1 Востаннє редагувалося Torbins (15.12.2013 13:46:52)

Тема: Пошук максимального елемента у двовимірному масиві

Програма працює.
Потрібен погляд професіоналів :)
Оскільки цю лабу буду здавати і захищати.
Чи є якісь зауваження/критика?

Завдання:
Знайти найбільший елемент масиву У[8,6], вивести на друк рядок, в якому
він знаходиться.

Прихований текст
program Max_search;
uses crt;
const
    m = 20;
var
    Y: array[1..m] of byte;
    max_num, max_index: byte;
    i: byte;
Begin
clrscr;
    randomize;
    writeln('Creating and showing array');
      for i:=1 to m do
         begin
           Y[i]:=random(50);
           write(Y[i]:3);
         end;
    max_index := 1;
    max_num := Y[1];
 
    for i := 2 to m do
        if Y[i] > max_num then 
        begin
            max_index := i;
            max_num := Y[i];
        end;
      writeln;
      writeln('meaning max=',max_num);
      writeln('position=',max_index);
      writeln('For ending press <Enter>');
readln
END.

2 Востаннє редагувалося Logans (14.12.2013 20:13:29)

Re: Пошук максимального елемента у двовимірному масиві

Завдання:
Знайти найбільший елемент масиву У[8,6], вивести на друк рядок, в якому

Одновимірний? У[8,6] - так здається позначається двовимірний масив, а ви позначили і працюєте з одновимірним. Тим більш, що вивести рядок, якщо одновимірний то він і так в один рядок записаний.
А ще, я б порадив формування та вивід масиву робити в різних циклад, або процедурах (якщо ви надумаєте через них робити).

Подякували: Меліса, koala, Torbins3

3

Re: Пошук максимального елемента у двовимірному масиві

Все нормально, все що я далі напишу це маленькі зауваження які можна ігнорувати.

Перше що мені кинулось в очі це

for i := 2 to m do
        if Y[i] > max_num then 
        begin
            max_index := i;
            max_num := Y[i];
        end;

можливо воно  і працює, але як для людини яка в перший і в останній раз програмувала в паскалі в інституті неочевидно, якби була ще одна пара бегін/енд було б краще.

Дргуге це що немає ; після readln хоче може так і потрібно.

По третє мені не дуже подобаються змінні з назвами Y, m. Я б їх переіменував на щось більш інформативне наприклад array і array_lenght.

Ну і саме найголовніше вам уже сказав Logans. Ця програма працює (на перший погляд) але вона знаходить максимальний елемент в одновимірному масиві довжиною 20 наповненим випадковими елементами. А в вас завдання все ж таки інше.

Подякували: Меліса, koala2

4 Востаннє редагувалося Logans (14.12.2013 20:42:34)

Re: Пошук максимального елемента у двовимірному масиві

truesupport написав:

Все нормально, все що я далі напишу це маленькі зауваження які можна ігнорувати.

Перше що мені кинулось в очі це

Прихований текст
for i := 2 to m do
        if Y[i] > max_num then 
        begin
            max_index := i;
            max_num := Y[i];
        end;

можливо воно  і працює, але як для людини яка в перший і в останній раз програмувала в паскалі в інституті неочевидно, якби була ще одна пара бегін/енд було б краще.

Дргуге це що немає ; після readln хоче може так і потрібно.

По третє мені не дуже подобаються змінні з назвами Y, m. Я б їх переіменував на щось більш інформативне наприклад array і array_lenght.

Ну і саме найголовніше вам уже сказав Logans. Ця програма працює (на перший погляд) але вона знаходить максимальний елемент в одновимірному масиві довжиною 20 наповненим випадковими елементами. А в вас завдання все ж таки інше.

1. Пара begin/end не обов'язкова, якщо цикл включає в себе виконання однієї дії.

2. Після readln можна і не ставити ";" тому, що перед будь-яким end-ом ";" не обов'язково ставити (це напевне єдине, що я запам'ятаю з коледжа на все життя :))
3. Що до змінних, я на всі 100% згоден, сам зараз привчаюсь використовувати інформативне оголошення змінних. Важко зрозуміти код, коли змінних типу: a1, a2, s, m, p1, p2 і т.д. в коді багато, особливо, якщо вони використовуються в тілі основної програми.

Подякували: Меліса, koala, DOP, Torbins4

5 Востаннє редагувалося Меліса (14.12.2013 21:59:25)

Re: Пошук максимального елемента у двовимірному масиві

Logans і Truesupport

Все зрозуміло, Велике Вам спасибі обом :)
Я відкоригувала код і трохи переробила :)
Прошу оцінити:

Прихований текст
Program Max_search;
 Uses CRT;

 const n=4; m=3;
 type
       Mass=array[1..n,1..m] of integer;
 var
     Y:Mass;
     I, j, Max, Imax, Jmax: integer;
 begin
 Clrscr;
     Randomize;
     writeln('Creating and showing array');
            for i:=1 to n do
       begin
            for j:=1 to m do
       begin
          Y[I,j]:=-50+random(101);
          write(Y[I,j]:4);
       end;
   writeln;
 end;
     Max:=Y[1,1];
  for i:=1 to n do
  for j:=1 to m do
    if Max<=Y[i,j] then
     begin
   Max:=Y[i,j];
   Imax:=i; Jmax:=j;
 end;
        Writeln('meaning max=', Max);
        Writeln('position Imax=', Imax);
        Writeln('position Jmax=', Jmax);
        Writeln('For ending press <Enter>');
 Readln;
 end.

6

Re: Пошук максимального елемента у двовимірному масиві

Трішки підправив зовнішний вигляд коду:

Прихований текст
Program Max_search;
Uses CRT;

const n = 4; m = 3;
type Mass = array[1..n,1..m] of integer;
var Y:Mass;
    I, j, Max, Imax, Jmax: integer;
begin
  Clrscr;
  Randomize;
  writeln('Creating and showing array');
  for i := 1 to n do
  begin
    for j := 1 to m do
    begin
      Y[i,j] := random(101) - 50;
      write(Y[i,j]:4);
    end;
    writeln;
  end;

  Max := Y[1,1];
  for i := 1 to n do
    for j := 1 to m do
      if Max <= Y[i,j] then
      begin
        Max := Y[i,j];
        Imax := i; Jmax := j;
      end;

  Writeln('meaning max = ', Max);
  Writeln('position Imax = ', Imax);
  Writeln('position Jmax = ', Jmax);
  Writeln('For ending press <Enter>');
  Readln;
end.

Програма робоча, але все-ж-таки вона не виконує завдання, яке ви описали:

Знайти найбільший елемент масиву У[8,6], вивести на друк рядок, в якому
він знаходиться.

Наскільки я зрозумів, якщо максимальний елемент знаходиться (наприклад) в 2-му рядку, то повинно виводити весь рядок цих елементів. А у вас виводить лише позицію та сам елемент.

Подякували: Меліса, Torbins2

7 Востаннє редагувалося Меліса (15.12.2013 02:02:10)

Re: Пошук максимального елемента у двовимірному масиві

Logans

оо, так-так, Спасибі Вам  :)
хоча це й не дуже суттєво, і виправляти не довго, дрібниця, але все ж хай буде як в завданні  :)
от:

Прихований текст
Program Max_search;
Uses CRT;
 
const n = 4; m = 3;
type Mass = array[1..n,1..m] of integer;
var Y:Mass;
    I, j, Max, Imax, Jmax: integer;
begin
  Clrscr;
  Randomize;
  writeln('Creating and showing array:');
  for i := 1 to n do
  begin
    for j := 1 to m do
    begin
      Y[i,j] := random(101) - 50;
      write(Y[i,j]:4);
    end;
    writeln;
  end;
 
  Max := Y[1,1];
  for i := 1 to n do
    for j := 1 to m do
      if Max <= Y[i,j] then
      begin
        Max := Y[i,j];
        Imax := i; Jmax := j;
      end;
 
  Writeln('meaning max = ', Max);
  Writeln('position Imax = ', Imax);
  Writeln('position Jmax = ', Jmax);
  Writeln('Row which have the maximal strain:');
     for j:=1 to m do
        write(Y[i,j]:3);
  writeln;
  Writeln('For ending press <Enter>');
  Readln;
END.

8

Re: Пошук максимального елемента у двовимірному масиві

Мабуть в останньому циклі усе ж має бути Imax замість i.

Подякували: Меліса1

9

Re: Пошук максимального елемента у двовимірному масиві

Torbins

а чому? що це змінить??

10

Re: Пошук максимального елемента у двовимірному масиві

Меліса написав:

Torbins

а чому? що це змінить??

Рядок.

Подякували: Меліса1

11

Re: Пошук максимального елемента у двовимірному масиві

Torbins, Koala

отак має бути:

Прихований текст
for j:=1 to m do
        write(Y[Imax,j]:3);
  writeln;
  Writeln('For ending press <Enter>');
  Readln;
END.

Чи Ви щось інше мали на увазі ??

12

Re: Пошук максимального елемента у двовимірному масиві

Меліса

отак має бути?

Так. Тепер у вас виводитиметься не останній рядок, а той, який містить максимальний елемент.
Хоча якщо бути зовсім точним, то після закінчення циклу for, значення i не обов'язково дорівнюватиме n. Довідка каже, що воно може бути будь-яким.

Подякували: Меліса1

13

Re: Пошук максимального елемента у двовимірному масиві

Torbins

аа, тепер все зрозуміла, дуже вдячна Вам за допомогу  :)
Спасибі.