1 Востаннє редагувалося Torbins (15.12.2013 14: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.

Подякували: koala, Адріян Ігорович2

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

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

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

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

"Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program."
- Linus Torvalds
Подякували: Меліса, 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 21: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 і т.д. в коді багато, особливо, якщо вони використовуються в тілі основної програми.

"Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program."
- Linus Torvalds
Подякували: Меліса, koala, DOP, Torbins4

5 Востаннє редагувалося Меліса (14.12.2013 22: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-му рядку, то повинно виводити весь рядок цих елементів. А у вас виводить лише позицію та сам елемент.

"Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program."
- Linus Torvalds
Подякували: Меліса, Torbins2

7 Востаннє редагувалося Меліса (15.12.2013 03: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

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