эээ млин если шутите, то несмешно, я только начинаю паскаль.... Эту программу нужно напсать на паскале а не на асемблере...
Гость
14.12.2005 20:41
ну блин это же наверное несложно, подскажите
klem4
14.12.2005 20:42
ладно не кипятись
uses crt;
const
n=9;
var
x : array[1..n,1..n] of integer;
i,j : byte;
begin
fillchar(x, sizeof(x),0); // заполняем весь массив нулями
for i := 1to n do x[i,i] := i;
for i := 1to n dobegin
writeln;
for j := 1to n dowrite(x[i,j],' ');
end;
readln
end.
диаганальный элемент - элемент и индексов i,i то есть 1,1; 2,2; 3,3; ... итд ;)
Гость
14.12.2005 20:43
klem4 прости я незнал в какой раздел написать, и решил что пусть модератор удалит неправильный вариант...
спасибо большое....
Гость
14.12.2005 20:47
странно, в этом варианте программы я так понимаю ты используешь двумерный массив, а судя по "Уроки от Дмитриева",которые выложены на этом сайте все должно быть куда проще, т.к. до этой задаче о массивах вообще не упоменалось, только FOR...
klem4
14.12.2005 20:49
for i := 1to n dobegin
writeln;
for j := 1to n doif i=j thenwrite(i,' ')
elsewrite(0,' ');
end;
KENNY
14.12.2005 20:59
воистину все гениальное просто, большое спасибо.. очень полезный у вас портал.... респект
вот кстати зарегестрировался...
Altair
15.12.2005 2:48
Цитата
Ты прав, задача очень трудная, вот самое простое решение :
и где это скомпилиться?
KENNY
15.12.2005 23:08
Вот еще вопрос, нужно посчитать сумму элементов массива расположенных между первым и последнм нулевым эдементами. Все это в однородном массиве, подскажите какова идея решения этой задачи?
volvo
15.12.2005 23:16
Так... это... Идешь с конца массива ДО того как встретишь нулевой элемент, запоминаешь его индекс(это будет последний нулевой)... Потом идешь с начала до первого нулевого (оба эти действия - на цикл While)...
Ну и напоследок - обычным For-ом перебираешь все, что находится между двумя найденными индексами, суммируя при этом элементы...
KENNY
16.12.2005 0:36
program maasiv1_var3;
const n=10;
var
A: array[1..n] of integer;
B: array[1..n] of integer;
i,j,proiz,nuln,nulk,k,summa,old,new: byte;
begin
proiz:=1;
WRITELN ('VVEDITE N ELEMENTOV MASSIVA');
for i := 1to n doread(A[i]);
writeln;
for j:=1to n doif odd(j)= false then proiz:=proiz*A[j];
writeln('proizved',proiz);
for j:=n downto1dobeginif A[j] = 0then nuln:=j
else nuln:=0;
end;
for j:=1to n dobeginif A[j]=0then nulk:=j else nulk:=0;
end;
if j=i then summa:=0elsebeginfor j:=nuln to nulk do summa:=summa+A[j];
end;
writeln('summa mezhdu0 ',summa);
for i:=1to n-1dobegin new:=A[i];
old:=A[i+1];
k:=i;
if new>A[i+1] thenbegin
A[i+1]:=new;
A[i]:=old;
end;
end;
for i:=1to n do writeln(A[i]);
readln;
end.
тута я пытался: сначала найти произведение эл-ов массива с четными номерами, потом сумму эл-ов между первыми последним нулевыми элементами, ну и в конце упорядочить по возростанию... конечно же ничего не получается, ну почему я такой корявый??? Во, тама кое что изменил, теперь сортирует, а вот произведение неправильно делает....
volvo
16.12.2005 1:00
Ну, допустим, произведение она как раз правильно считает... Неправильно вычисляется сумма... Смотри, почему... Вот твой код:
for j:=n downto1dobeginif A[j] = 0then nuln:=j
else nuln:=0; { Вот эта ветка не нужна }end;
for j:=1to n dobeginif A[j]=0then nulk:=j
else nulk:=0; { Эта, соответственно, тоже }end;
{ разве нужно сравнивать I и J, а не nuln и nulk ? }if j=i then summa:=0elsebeginfor j:=nuln to nulk do summa:=summa+A[j];
end;
Почему Else в обоих случаях не нужен? Потому, что тебе нужно найти позиции нулевых элементов, ненулевые ты должен просто игнорировать, а ты не игнорируешь, а обращаешь на них внимание...
KENNY
16.12.2005 1:17
VOLVO что бы я без тебя делал!!! Спасибо тебе огромное, тока есть еще один вопрос, как сделать в сортировке так чтоб он нули в начало сувал? а то так как я написал, нули остаются на своих места, хотя остальное нормально выстраивается....
Блин и произведение он неправильно считает... я вот щас вводил элементы: 0 1 3 4 0 2 6 7 8 9 он вывел что произведение =248 а на самом деле 504....
volvo
16.12.2005 1:23
Ну, так пользуйся любым из методов сортировки... Например, обычный "пузырек":
for i := 1to n dofor j := n downto i + 1doif a[j - 1] > a[j] thenbegin
old := a[j - 1]; a[j - 1] := a[j]; a[j] := old
end;
Кстати, произведение считается правильно, только вспомни, какой диапазон значений у типа Byte? Просто произведение больше, чем Byte может вместить... Опиши его как Integer...
KENNY
16.12.2005 1:28
точто... байт.... еще раз спасибо... мне этот паскаль позарез в уневере нужен.. так что буду совершенствоваться... спасибо большое VOLVO.
P.S. мне всегда нравились машины вольво
KENNY
17.12.2005 21:48
ч одномерным массивом вроде немного разобрался, теперь двумерный массив... в уроках на вашем сервере о них ничего не объясняется, я правда пытался понять чтонибудь из Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи > FAQ там есть про матрицы, но тоже трудно понять.. мне напимер нужно упорядочить строки целочисленной матрицы по возрастанию количества одинаковых элементов в каждой строчке, причем желательно это сделать в виде процедуры.. если не очень трудно не могли бы объяснить как?
klem4
17.12.2005 22:11
А что ты хочешь .. чтобы тебе полную программу выложили ?
Для начала сообрази как подсчитать колво одинковыйх элементов в одномерном массиве, потом на основе этого алгоритмя реализуешь ф-ю, которая будет считать кол-во одинаковых элементов в i-ой строке, после этого пойдешь в наш FAQ и там выберешь себе понравившийся метод сортировки и дело в шляпе.
KENNY
17.12.2005 23:48
Ну можно и полностью программу..... сейчас буду соображать...
делать проверку для каждого элемента и искать равные ему? больше ничего не могу придумать..
volvo
18.12.2005 0:03
Цитата
после этого пойдешь в наш FAQ и там выберешь себе понравившийся метод сортировки
klem4, если бы все было так просто... Все алгоритмы сортировки, приведенные в FAQ-е работают с одномерными массивами...
да да, я это читал... так всеже как правильно посчитать колво одинковыйх элементов в массиве?
klem4
18.12.2005 6:24
например вот так :
uses crt;
const
n=10;
var
x : array[1..n] of integer;
i,j,count,temp : integer;
begin
clrscr;
for i := 1to n do readln(x[i]);
i := 1;
count :=1 ;
while(i<=n-1) dobegin
j := i + 1;
temp := 1;
while(j<=n) dobeginif x[i] = x[j] then inc(temp);
inc(j);
end;
if temp>count then count := temp;
inc(i);
end;
writeln('count=',count);
readln
end.
volvo
18.12.2005 9:20
While иногда запутывает программу, и она выглядит искусственным нагромождением конструкций... То же самое через For читается проще:
uses crt;
const
n=10;
var
x : array[1..n] of integer;
i,j,count,temp : integer;
begin
clrscr;
for i := 1to n do readln(x[i]);
count :=1 ;
for i := 1to n - 1dobegin
temp := 1;
for j := i + 1to n doif x[i] = x[j] then inc(temp);
if temp>count then count := temp;
end;
writeln('count=',count);
readln
end.
klem4
18.12.2005 10:41
Да, я просто выложил не окончательную версию, не то скопировал, если использовать такой вариант, то возможны лишние операции, вот тот вариант который я хотел запостить :
uses crt;
const
n=10;
var
x : array[1..n] of integer;
i,j,count,temp : integer;
begin
clrscr;
for i := 1to n do readln(x[i]);
i := 1;
count :=1 ;
while(i<=n-1) and (count<n-i+1) dobegin
j := i + 1;
temp := 1;
while(j<=n) dobeginif x[i] = x[j] then inc(temp);
inc(j);
end;
if temp>count then count := temp;
inc(i);
end;
writeln('count=',count);
readln
end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.