1. Заголовок или название темы должно быть информативным ! 2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК ! 4.НЕ используйте форум для личного общения! 5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
программа из Уроки от Дмитриева Эдуарда, помогите начинающему разобраться
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 := 1 to n do x[i,i] := i;
for i := 1 to n do begin writeln; for j := 1 to n do write(x[i,j],' '); end; readln end.
диаганальный элемент - элемент и индексов i,i то есть 1,1; 2,2; 3,3; ... итд ;)
--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
странно, в этом варианте программы я так понимаю ты используешь двумерный массив, а судя по "Уроки от Дмитриева",которые выложены на этом сайте все должно быть куда проще, т.к. до этой задаче о массивах вообще не упоменалось, только FOR...
Вот еще вопрос, нужно посчитать сумму элементов массива расположенных между первым и последнм нулевым эдементами. Все это в однородном массиве, подскажите какова идея решения этой задачи?
Так... это... Идешь с конца массива ДО того как встретишь нулевой элемент, запоминаешь его индекс(это будет последний нулевой)... Потом идешь с начала до первого нулевого (оба эти действия - на цикл While)...
Ну и напоследок - обычным For-ом перебираешь все, что находится между двумя найденными индексами, суммируя при этом элементы...
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 := 1 to n do read(A[i]); writeln;
for j:=1 to n do if odd(j)= false then proiz:=proiz*A[j]; writeln('proizved',proiz);
for j:=n downto 1 do begin if A[j] = 0 then nuln:=j else nuln:=0; end; for j:=1 to n do begin if A[j]=0 then nulk:=j else nulk:=0; end; if j=i then summa:=0 else begin for j:=nuln to nulk do summa:=summa+A[j]; end; writeln('summa mezhdu0 ',summa);
for i:=1 to n-1 do begin new:=A[i]; old:=A[i+1]; k:=i; if new>A[i+1] then begin A[i+1]:=new; A[i]:=old;
end; end; for i:=1 to n do writeln(A[i]); readln; end.
тута я пытался: сначала найти произведение эл-ов массива с четными номерами, потом сумму эл-ов между первыми последним нулевыми элементами, ну и в конце упорядочить по возростанию... конечно же ничего не получается, ну почему я такой корявый??? Во, тама кое что изменил, теперь сортирует, а вот произведение неправильно делает....
Ну, допустим, произведение она как раз правильно считает... Неправильно вычисляется сумма... Смотри, почему... Вот твой код:
for j:=n downto 1 do begin if A[j] = 0 then nuln:=j else nuln:=0; { Вот эта ветка не нужна } end; for j:=1 to n do begin if A[j]=0 then nulk:=j else nulk:=0; { Эта, соответственно, тоже } end;
{ разве нужно сравнивать I и J, а не nuln и nulk ? } if j=i then summa:=0 else begin for j:=nuln to nulk do summa:=summa+A[j]; end;
Почему Else в обоих случаях не нужен? Потому, что тебе нужно найти позиции нулевых элементов, ненулевые ты должен просто игнорировать, а ты не игнорируешь, а обращаешь на них внимание...
VOLVO что бы я без тебя делал!!! Спасибо тебе огромное, тока есть еще один вопрос, как сделать в сортировке так чтоб он нули в начало сувал? а то так как я написал, нули остаются на своих места, хотя остальное нормально выстраивается....
Блин и произведение он неправильно считает... я вот щас вводил элементы: 0 1 3 4 0 2 6 7 8 9 он вывел что произведение =248 а на самом деле 504....
Кстати, произведение считается правильно, только вспомни, какой диапазон значений у типа Byte? Просто произведение больше, чем Byte может вместить... Опиши его как Integer...
ч одномерным массивом вроде немного разобрался, теперь двумерный массив... в уроках на вашем сервере о них ничего не объясняется, я правда пытался понять чтонибудь из Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи > FAQ там есть про матрицы, но тоже трудно понять.. мне напимер нужно упорядочить строки целочисленной матрицы по возрастанию количества одинаковых элементов в каждой строчке, причем желательно это сделать в виде процедуры.. если не очень трудно не могли бы объяснить как?
А что ты хочешь .. чтобы тебе полную программу выложили ?
Для начала сообрази как подсчитать колво одинковыйх элементов в одномерном массиве, потом на основе этого алгоритмя реализуешь ф-ю, которая будет считать кол-во одинаковых элементов в i-ой строке, после этого пойдешь в наш FAQ и там выберешь себе понравившийся метод сортировки и дело в шляпе.
--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'