3 / 3 / 0
Регистрация: 20.01.2009
Сообщений: 6
1

Найти элементы матрицы, которые являются наименьшими в своей строке и наибольшими в своем столбце

20.01.2009, 19:44. Показов 1980. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В квадратной матрице нужно найти элементы (и запомнить их значения и координаты), которые являются наименьшими в своей строке и наибольшими в своем столбце одновременно.
Организовать ввод и вывод из файла, для нахождения этих элементов использовать подпрограмму. Запрещен обмен глобальными переменными между программой и подпрограммой (вот тут я мож чуток неправильно написала... не знаю, как это точно звучит))).

Вот прога, помогите исправить ошибку, пожалуйста...
и может там что-то неправильно, напишите плз

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
Program prog;
uses crt;
const Nmax=100;
type massiv=array[1..Nmax,1..Nmax] of real;
mas=array[1..Nmax] of real;
var
a:massiv;
c:mas;
z,l,i,j,n, y:integer;
f2,f:file of real;
put,put2:string;
s: real;
ch:char;
 
procedure raschet (var b:massiv; m:integer; var y:integer);
var i, j,im,jm, k:integer;
begin
b[im,jm]:=b[1,1];
im:=1;
jm:=1;
k:=0;
y:=0;
for i:=1 to m do begin
for j:=1 to m do begin
if b[i,j]<b[im,jm] then {находим наименьший элемент в строке}
im:=i; jm:=j;
b[im,jm]:=b[i,j];
for i:=im+1 to m do {находим наибольший элемент в столбце этого
элемента}
if b[i,j]>b[im,jm] then
k:=k+1; {k-счетчик на количество элементов, с которыми сверяли
ниаменьший в строке}
if k=m-1 {если они совпадают, то выводим на экран это элемент с
координатами}
then y:=y+1; {y-счетчик на количество выведенных элементов}
writeln ('нименьший в своей строке и наибольший в столбце элемент:');
writeln ('b[',im,jm,']=', b[im,jm]:4:4);end;
end;
end;
 
begin
writeln ('vvesti massiv vrychnyu - 1, iz faila - lubaya klavisha');
ch:=readkey;
if (ch=#49) then begin
writeln ('vvedite razmernost matrici');
readln (n);
for i:=1 to n do
for j:=1 to n do
writeln ('a[',i,j,']=');
readln (a[i,j]);
end
else begin
writeln ('vvedite put k faily');
readln (put);
assign (f,put);
reset (f);
while not eof (f) do begin
for i:=1 to n do
for j:=1 to n do
read (f,s);
a[i,j]:=s;
write ('a[',i,j,']=', a[i,j]:4:4);
close (f); end; end;
raschet (a,n,z);
writeln ('sohranit v faile - 1');
ch:=readkey; if (ch=#49) then begin repeat
writeln ('vvedite put k faily');
readln (put2);
assign (f2,put2); {$I-}
reset (f2) {$I+}
until ioresult<>0; end;
rewrite (f2); write (f2,z);
begin for l:=1 to y do begin
write (f2, c[l]); close (f2); end; end;end.
Добавлено через 57 минут 26 секунд
помогите плз, оч срочно...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.01.2009, 19:44
Ответы с готовыми решениями:

Найти элементы матрицы, которые одновременно являются минимальными в своей строке и максимальными в своем столбце
В двумерном массиве размерностью n × m, все элементы которого различны, требуется найти такие...

Найти элементы матрицы, которые одновременно являются min в своей строке и max в своем столбце
Дан массив размера n × m, все элементы которого различны. Необходимо найти такие элементы, которые...

Найти элементы, которые одновременно являются минимальными в своей строке и максимальными в своем столбце
Дан массив размера n × m, все элементы которого различны. Необходимо найти такие элементы, которые...

Найти числа, которые являются одновременно максимальными в своем столбце и минимальными в своей строке
Нужна ваша помощь Console.Write(&quot;Введите кол-во строк для матрицы: &quot;); ...

5
726 / 478 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
20.01.2009, 20:00 2
z должно быть типа real, также и в процедуре нужно y зделать real. При сохранении файла что-то вообще ничего не понятно много лишних begin'ов и end'дов. Программу не проверял.
0
3 / 3 / 0
Регистрация: 20.01.2009
Сообщений: 6
20.01.2009, 20:30  [ТС] 3
а почему количество элементов типа real?...
а можешь всё-таки проверить программу? у меня недостаточно знаний, чтобы самой это всё исправить, без помощи не обойтись

Добавлено через 3 минуты 11 секунд
з.ы. ошибку выдает на переменную i в 28 строке
0
726 / 478 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
20.01.2009, 22:31 4
Потомучто сохраняеш в файл z а файл типа real. Вот переписал сохранение в файл матрици, решение оставляю на твою совесть помучаешся немножко, порешаеш, я не проверял правильно решает или нет.
Код
Program prog;
uses
    crt;
const
     Nmax = 100;
type
    massiv = array[1..Nmax, 1..Nmax] of real;
    mas = array[1..Nmax] of real;
var
   a: massiv;
   c: mas;
   z, l, i, j, n, y: integer;
   f2, f: file of real;
   put, put2: string;
   s: real;
   ch: char;

procedure raschet(var b: massiv; m: integer; var y: integer);
var
   i, j, im, jm, k: integer;
begin
     b[im, jm]:=b[1, 1];
     im:=1;
     jm:=1;
     k:=0;
     y:=0;
     for i:=1 to m do
     begin
          for j:=1 to m do
          begin
               if b[i, j]<b[im, jm] then
               begin
                    im:=i;
                    jm:=j;
               end;
               b[im, jm]:=b[i, j];
               for i:=im+1 to m do
               if b[i, j]>b[im, jm] then
               k:=k+1;
               if k=m-1 then
               y:=y+1;
               writeln ('нименьший в своей строке и наибольший в столбце элемент:');
               writeln ('b[', im, jm, ']=', b[im, jm]:4:4);
          end;
     end;
end;

begin
     writeln ('vvesti massiv vrychnyu - 1, iz faila - lubaya klavisha');
     ch:=readkey;
     if (ch=#49) then
     begin
          writeln ('vvedite razmernost matrici');
          readln (n);
          for i:=1 to n do
          for j:=1 to n do
          begin
               writeln ('a[', i, j, ']=');
               readln (a[i, j]);
          end;
     end
     else
     begin
          writeln ('vvedite put k faily');
          readln (put);
          assign (f, put);
          reset (f);
          i:=1;
          j:=1;
          n:=FileSize(f) div 2;
          while not eof (f) do
          begin
               if j>n then
               begin
                    j:=1;
                    inc(i);
                    writeln;
               end;
               read(f, s);
               a[i, j]:=s;
               write ('a[', i, j, ']=', a[i, j]:4:4);
               inc(j);
          end;
          close(f);
     end;
     writeln;

     writeln('Massiv a:');
     for i:=1 to n do
     begin
          for j:=1 to n do
          write(a[i, j]);
          writeln;
     end;

     raschet (a, n, z);
     writeln ('sohranit v faile - 1');
     ch:=readkey;
     if (ch=#49) then
     begin
           writeln ('vvedite put k faily');
           readln (put2);
           assign (f2,put2);
           rewrite (f2);
           for i:=1 to n do
           begin
                for j:=1 to n do
                write(f2, a[i, j]);
           end;
           close(f2);
     end;
end.
Добавлено через 5 минут 29 секунд
Извеняюсь конечно за ошибку не знаю о чем думал. но нужно убрать
Код
n:=FileSize(f) div 2;
и к n присваивать значение которое сохранено будет в файле это размерность массива и при сохранении нужно первым сохранить размерность массива.
1
3 / 3 / 0
Регистрация: 20.01.2009
Сообщений: 6
20.01.2009, 22:52  [ТС] 5
спасибо огромнейшее! сча буду разбираться))
0
726 / 478 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
20.01.2009, 23:29 6
Ну это еще не все так как написал не думая о программе то получилось много ошибок, вот убрал ошибки где были, в сохранении и чтении файла добавил размерность массива.
Код
Program prog;
uses
    crt;
const
     Nmax = 100;
type
    massiv = array[1..Nmax, 1..Nmax] of real;
    mas = array[1..Nmax] of real;
var
   a: massiv;
   c: mas;
   z, l, i, j, n, y: integer;
   f2, f: file of real;
   put, put2: string;
   s: real;
   ch: char;

procedure raschet(var b: massiv; m: integer; var y: integer);
var
   i, j, im, jm, k: integer;
begin
     b[im, jm]:=b[1, 1];
     im:=1;
     jm:=1;
     k:=0;
     y:=0;
     for i:=1 to m do
     begin
          for j:=1 to m do
          begin
               if b[i, j]<b[im, jm] then
               begin
                    im:=i;
                    jm:=j;
               end;
               b[im, jm]:=b[i, j];
               for i:=im+1 to m do
               if b[i, j]>b[im, jm] then
               k:=k+1;
               if k=m-1 then
               y:=y+1;
               writeln ('нименьший в своей строке и наибольший в столбце элемент:');
               writeln ('b[', im, jm, ']=', b[im, jm]:4:4);
          end;
     end;
end;

begin
     writeln ('vvesti massiv vrychnyu - 1, iz faila - lubaya klavisha');
     ch:=readkey;
     if (ch=#49) then
     begin
          writeln ('vvedite razmernost matrici');
          readln (n);
          for i:=1 to n do
          for j:=1 to n do
          begin
               writeln ('a[', i, j, ']=');
               readln (a[i, j]);
          end;
     end
     else
     begin
          writeln ('vvedite put k faily');
          readln (put);
          assign (f, put);
          reset (f);
          i:=1;
          j:=1;
          read(f, s);
          n:=round(s);
          writeln('n=', n);
          while not eof (f) do
          begin
               if j>n then
               begin
                    j:=1;
                    inc(i);
                    writeln;
               end;
               read(f, s);
               a[i, j]:=s;
               write ('a[', i, ',', j, ']=', a[i, j]:4:4);
               inc(j);
          end;
          close(f);
     end;
     writeln;
     raschet (a, n, z);
     writeln ('sohranit v faile - 1');
     ch:=readkey;
     if (ch=#49) then
     begin
           writeln ('vvedite put k faily');
           readln (put2);
           assign (f2, put2);
           rewrite (f2);
           s:=n;
           write(f2, s);
           for i:=1 to n do
           for j:=1 to n do
           write(f2, a[i, j]);
           close(f2);
     end;
end.
Извини за рассеяность мысли совсем о другом.
0
20.01.2009, 23:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.01.2009, 23:29
Помогаю со студенческими работами здесь

Найти элемент матрицы, являющийся максимальным в своей строке и минимальным в своем столбце
Двумерные массивы(статическое выделение памяти) Дана целочисленная матрица размера M на N. Найти...

Найти элемент матрицы, являющийся максимальным в своей строке и минимальным в своем столбце
Дана целочисленная матрица размера M x N. Найти элемент, являющийся максимальным в своей строке и...

Найти элемент матрицы, являющийся максимальным в своей строке и минимальным в своем столбце
Помогите пожалуйста написать программу.. Дана целочисленная матрица размера M × N. Найти...

Найти элемент матрицы, являющийся максимальным в своей строке и минимальным в своем столбце
Дана целочисленная матрица размера M x N. Найти элемент, являющийся максимальным в своей строке и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru