Другие языки программирования и технологии
Помогите исправить ошибку
Дана целочисленная прямоугольная матрица. Определить количество столбцов, не содержащих ни одного нулевого элемента. Характеристикой строки целочисленной матрицы назовём сумму положительных элементов. Переставляя строки заданной матрицы, расположить их в соотвествии с ростом характеристик. Добавлено через 1 минуту Вот код uses crt; const nmax=20; var a:array[1..nmax,1..nmax] of integer; m,n,i,j,ks,l:byte; sm,b:integer; f:boolean; begin clrscr; randomize; repeat write('Количество строк до ',nmax,' n='); readln(n); until n in [1..nmax]; repeat write('Количество столбцов до ',nmax,' m='); readln(m); until m in [1..nmax]; {вычисление сумм в строках и запись их в дополнительный столбец} for i:=1 to n do begin sm:=0; for j:=1 to m do begin a[i,j]:=random(10)-4; sm:=sm+a[i,j]; a[i,m+1]:=sm; end; end; writeln('Исходный массив:'); writeln('Сумма'm*4+6)); for i:=1 to n do begin for j:=1 to m+1 do if j=m+1 then write(a[i,j]:6) else write(a[i,j]:4); writeln; end; writeln; ks:=0;{кол столб без 0} for j:=1 to m do{смотрим все столбцы} begin f:=true;{пока нолей нет} i:=1; while f and(i<=n)do{пока не ноль и не конец столбца} begin if a[i,j]=0 then f:=false{если ноль меняем значение флага} else i:=i+1;{иначе идем вперед} end; if f then ks:=ks+1;{если нет 0, считаем} end; writeln('Количество столбцов без нолей=',ks); write('Press Rnter...'); readln; {перестановка строк по неубыванию сумм(по последнему столбцу)} for i:=1 to n-1 do for l:=i+1 to n do if a[i,m+1]>a[l,m+1] then for j:=1 to m+1 do begin b:=a[i,j]; a[i,j]:=a[l,j]; a[l,j]:=b; end; writeln('Строки по неубыванию сумм:'); writeln('Сумма'm*4+6)); for i:=1 to n do begin for j:=1 to m+1 do if j=m+1 then write(a[i,j]:6) else write(a[i,j]:4); writeln; end; readln end. Дело в том что сумму оп просто складывает, а надо чтобы положительные чётные только, и надо что бы генерацию случ. чисел была отдельным циклом
Я так поняла, что код программы - это решение вышеуказанной задачи. А тебе нужно внести в нее коррективы, указанные внизу. Тогда разбиваем часть
{вычисление сумм в строках и запись их в дополнительный столбец}
for i:=1 to n do
begin
sm:=0;
for j:=1 to m do
begin
a[i,j]:=random(10)-4;
sm:=sm+a[i,j];
a[i,m+1]:=sm;
end;
end;
на две:
{заполнение массива}
for i:=1 to n do
for j:=1 to m do
a[i,j]:=random(10)-4;
{вычисление сумм положительных четных в строках и запись их в дополнительный столбец}
for i:=1 to n do
begin
sm:=0;
for j:=1 to m do
if (a[i,j] > 0) and (a[i,j] mod 2 =0) then
sm:=sm+a[i,j];
a[i,m+1]:=sm;
end;
{вычисление сумм в строках и запись их в дополнительный столбец}
for i:=1 to n do
begin
sm:=0;
for j:=1 to m do
begin
a[i,j]:=random(10)-4;
sm:=sm+a[i,j];
a[i,m+1]:=sm;
end;
end;
на две:
{заполнение массива}
for i:=1 to n do
for j:=1 to m do
a[i,j]:=random(10)-4;
{вычисление сумм положительных четных в строках и запись их в дополнительный столбец}
for i:=1 to n do
begin
sm:=0;
for j:=1 to m do
if (a[i,j] > 0) and (a[i,j] mod 2 =0) then
sm:=sm+a[i,j];
a[i,m+1]:=sm;
end;
В задании одно, ты говоришь - другое.
Uses CRT;
Const
Nmax=20;
Range=[1..Nmax];
Type Matrix=array [1..Nmax,1..Nmax+1] of integer;
Var a:Matrix;
i,j,k,l,n,m:byte;
tmp:integer;
Zero:boolean;
Procedure WriteArray(WAarray:Matrix; WAn,WAm:byte);
Var WAi,WAj:byte;
begin
writeln;
for WAi:=1 to WAn do
begin
for WAj:=1 to WAm do write(a[WAi,WAj]:3);
writeln(' |',a[WAi,WAm+1]:3);
end;
writeln;
end;
begin
ClrScr;
Randomize;
repeat
write('Количество строк до ',Nmax,' n=');
readln(n);
until n in Range;
repeat
write('Количество столбцов до ',Nmax,' m=');
readln(m);
until m in Range;
k:=0;
for j:=1 to m do
begin
Zero:=false;
for i:=1 to n do
begin
a[i,j]:=random(11)-5;
If a[i,j]=0 then Zero:=true
else
If (a[i,j]>0) {and (a[i,j] mod 2=0)} then a[i,m+1]:=a[i,m+1]+a[i,j]; {если надо чтобы только четные - убрать фигурные скобки}
end;
If not Zero then inc(k);
end;
writeln('Исходный массив: ');
WriteArray(a,n,m);
writeln('Количество столбцов без нолей: ',k);
writeln('Нажмите ввод для продолжения... ');
readln;
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i,m+1]>a[j,m+1] then
for l:=1 to m+1 do
begin
tmp:=a[i,l];
a[i,l]:=a[j,l];
a[j,l]:=tmp;
end;
writeln('Массив по неубыванию характеристик строки: ');
WriteArray(a,n,m);
readln
end.
Uses CRT;
Const
Nmax=20;
Range=[1..Nmax];
Type Matrix=array [1..Nmax,1..Nmax+1] of integer;
Var a:Matrix;
i,j,k,l,n,m:byte;
tmp:integer;
Zero:boolean;
Procedure WriteArray(WAarray:Matrix; WAn,WAm:byte);
Var WAi,WAj:byte;
begin
writeln;
for WAi:=1 to WAn do
begin
for WAj:=1 to WAm do write(a[WAi,WAj]:3);
writeln(' |',a[WAi,WAm+1]:3);
end;
writeln;
end;
begin
ClrScr;
Randomize;
repeat
write('Количество строк до ',Nmax,' n=');
readln(n);
until n in Range;
repeat
write('Количество столбцов до ',Nmax,' m=');
readln(m);
until m in Range;
k:=0;
for j:=1 to m do
begin
Zero:=false;
for i:=1 to n do
begin
a[i,j]:=random(11)-5;
If a[i,j]=0 then Zero:=true
else
If (a[i,j]>0) {and (a[i,j] mod 2=0)} then a[i,m+1]:=a[i,m+1]+a[i,j]; {если надо чтобы только четные - убрать фигурные скобки}
end;
If not Zero then inc(k);
end;
writeln('Исходный массив: ');
WriteArray(a,n,m);
writeln('Количество столбцов без нолей: ',k);
writeln('Нажмите ввод для продолжения... ');
readln;
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i,m+1]>a[j,m+1] then
for l:=1 to m+1 do
begin
tmp:=a[i,l];
a[i,l]:=a[j,l];
a[j,l]:=tmp;
end;
writeln('Массив по неубыванию характеристик строки: ');
WriteArray(a,n,m);
readln
end.
Похожие вопросы
- Помогите исправить ошибку в программе (c++).
- Помогите исправить ошибку в программе на Си
- Помогите исправить ошибку в коде программы на паскале.
- Помогите исправить ошибку в коде программы, пожалуйста!
- Пожалуйста, помогите исправить ошибки в программах на С++!
- помогите исправить ошибку в программе в Pascal
- Pascal ABC. Помогите исправить ошибку в программе.
- программа в паскале, помогите исправить ошибку плиз
- Пожайлуста, помогите исправить ошибки в программе на С++!!
- Помогите исправить ошибки в коде на Pascal, чтобы он выводил верные ответы. Или можете сами пожалуйста написать пжпжпж!