В строке матрицы, содержащей максимальный элемент, заменить все отрицательные числа нулями - Turbo Pascal
Формулировка задачи:
Добрый день! Подскажите, пожалуйста, что я сделала неправильно. Задание звучит так:
Сформировать двумерный массив F размером 4 x 8 с помощью генератора случайных чисел и вывести элементы массива на экран и в файл. В строке матрицы F, содержащей максимальный элемент, заменить все отрицательные числа нулями (оформить нахождение максимального элемента в виде функции). Вывести на экран и в файл номер этой строки и максимальный элемент.
После выполнения программы всегда пишет, что максимальный элемент в строке 4 и почему-то через раз заменяет отрицательные числа на нули(
Листинг программы
- program Project1;
- type
- mass=array [1..4,1..8] of real;
- var
- x,y: integer;
- procedure preobr (maximum:real;var a:mass);
- var
- nomer_stroki:1..4;
- begin
- for x := 1 to 4 do
- for y := 1 to 8 do
- if maximum=a[x,y] then nomer_stroki:=x;
- for y := 1 to 8 do
- if a[nomer_stroki,y]<0 then a[nomer_stroki,y]:=0;
- end;
- function max (b:mass): real;
- var
- x,y: integer;
- max1:real;
- begin
- max1:=b[1,1];
- for x:=1 to 4 do
- for y:=1 to 8 do
- if b[x,y]>max1 then max1:=b[x,y];
- max:=max1;
- end;
- var
- c: text;
- max_element: real;
- f:mass;
- begin
- assign (c,'C:\text.txt');
- rewrite (c);
- randomize;
- for x:=1 to 4 do
- for y:=1 to 8 do
- f[x,y]:=random*20-10;
- for x:=1 to 4 do
- begin
- for y:=1 to 8 do
- begin
- write (f[x,y]:2:0);
- end;
- writeln;
- writeln(c)
- end;
- max_element:=max (f);
- preobr (max_element,f);
- writeln ('max element= ',max_element:2:0,' v stroke: ',x);
- writeln (c,max_element:2:0);
- writeln (c,x);
- close (c);
- for x:=1 to 4 do
- begin
- for y:=1 to 8 do
- begin
- write (f[x,y]:2:0);
- end;
- writeln;
- end;
- readln;
- end.
Решение задачи: «В строке матрицы, содержащей максимальный элемент, заменить все отрицательные числа нулями»
textual
Листинг программы
- uses crt;
- const m=4;
- n=8;
- type mass=array [1..m,1..n] of real;
- procedure matrix(var a:mass;var f:text);
- var i,j:byte;
- begin
- writeln('Исходная матрица');
- writeln(f,'Matrix');
- for i:=1 to m do
- begin
- for j:=1 to n do
- begin
- a[i,j]:=-5+11*random;
- write(a[i,j]:6:2);
- write(f,a[i,j]:6:2);
- end;
- writeln;
- writeln(f);
- end;
- end;
- function max (a:mass;var s:byte):real;
- var i,j:byte;
- mx:real;
- begin
- mx:=a[1,1];
- s:=1;
- for i:=1 to m do
- for j:=1 to n do
- if a[i,j]>mx then
- begin
- mx:=a[i,j];
- s:=i;
- end;
- max:=mx;
- end;
- procedure preobr (var a:mass;var f:text);
- var i,j,s:byte;
- x:real;
- begin
- x:=max(a,s);
- writeln('Максимальный элемент=',x:0:2,' в строке ',s);
- writeln(f,'max=',x:0:2,' Nstr=',s);
- writeln('Измененная матрица');
- writeln(f,'New matrix');
- for i:=1 to m do
- begin
- for j:=1 to n do
- begin
- if(i=s)and(a[i,j]<0) then a[i,j]:=0;
- write(a[i,j]:6:2);
- write(f,a[i,j]:6:2);
- end;
- writeln;
- writeln(f);
- end;
- end;
- var c: text;
- f:mass;
- begin
- clrscr;
- assign (c,'text.txt'); {в папку с программмой}
- rewrite (c);
- randomize;
- matrix(f,c);
- preobr(f,c);
- readln;
- end.
Объяснение кода листинга программы
- В строке матрицы, содержащей максимальный элемент, заменить все отрицательные числа нулями.
- Исходная матрица.
- Вывести матрицу.
- Найти максимальное значение в матрице.
- Записать максимальное значение и его строку в текстовый файл.
- Заменить все отрицательные числа в строке нулями.
- Вывести измененную матрицу.
- Записать измененную матрицу в текстовый файл.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д