1 Востаннє редагувалося Vaska (10.06.2013 13:47:49)

Тема: Двовимірний масив

Підкажіть, будь ласка, яка тут помилка?  В задачі потрібно з файла ф1 прочитати матирицю А[10,10], знайти найбільший елемент кожного рядка і помістити його на головну діагональ, а діагональний елемент -на місце найбільшого.

Post's attachments

laba7 prob.pas 629 b, 475 downloads since 2013-06-10 

2 Востаннє редагувалося koala (10.06.2013 14:08:13)

Re: Двовимірний масив

А тепер помилка в тому, що ви не вказали, чому вважаєте, що в цьому коді є помилка...
І в тому, що ви завантажили файл замість використовувати теґ [ code ]

3

Re: Двовимірний масив

Vaska, помилка в алгоритмі, гадаю: занадто громіздка структура, щоб ув одному блоці її накидати.

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

А отут пропустили крапкому.

BEGIN
    MAX:=A[I,J]
END;

І ще далі кілька разів по коду...

4

Re: Двовимірний масив

Bartash написав:

А отут пропустили крапкому.

BEGIN
    MAX:=A[I,J]
END;

І ще далі кілька разів по коду...

Нічого не пропустили, не треба людину плутати!

Звернемо також увагу на те, що всі рядки між begin та end, крім останнього, закінчуються крапкою з комою. Крапка з комою служить для відокремлення команд одна від одної, а оскільки end не є командою, відокремлюватися від нього непотрібно. Тим не менш, часто ставлять крапку з комою і перед end. Це не є помилкою - крапка з комою, якщо не розділює команди, розглядається як пустий оператор - тобто відсутність дії, цей оператор не впливає на виконання програми.

Подякували: DOP2

5

Re: Двовимірний масив

Звернемо також увагу на те, що всі рядки між begin та end, крім останнього, закінчуються крапкою з комою. Крапка з комою служить для відокремлення команд одна від одної, а оскільки end не є командою, відокремлюватися від нього непотрібно.

Дякую - не знав про такі фічі. 0_о

6

Re: Двовимірний масив

Чесно кажучи, я теж до четвертого курсу не знав. А паскаль у нас був на першому.

7

Re: Двовимірний масив

Проблема в тому, що коли я нажимаю виконати  програму, біля MAX:=A[J][J]; виникає:"массив имеет другоє количество розмерностей". Що це означає?

Post's attachments

laba7 prob.pas 629 b, 466 downloads since 2013-06-10 

8

Re: Двовимірний масив

Vaska написав:

Проблема в тому, що коли я нажимаю виконати  програму, біля MAX:=A[J][J]; виникає:"массив имеет другоє количество розмерностей". Що це означає?

Спробуйте A[J,J] замість A[J][J].
А що за версія паскаля? Російськомовна - значить, не ТурбоПаскаль; але PascalABC ніби нормально таку індексацію сприймає.

9

Re: Двовимірний масив

koala написав:
Vaska написав:

Проблема в тому, що коли я нажимаю виконати  програму, біля MAX:=A[J][J]; виникає:"массив имеет другоє количество розмерностей". Що це означає?

Спробуйте A[J,J] замість A[J][J].
А що за версія паскаля? Російськомовна - значить, не ТурбоПаскаль; але PascalABC ніби нормально таку індексацію сприймає.



Так, це PascalABC. Я спробувала написати[I,I],але тоді вибиває іншу помилку:"выход за границы диапазона изминения индекса 1..10."

10

Re: Двовимірний масив

Vaska написав:

Так, це PascalABC. Я спробувала написати[I,I],але тоді вибиває іншу помилку:"выход за границы диапазона изминения индекса 1..10."

А де саме це відбувається?
Я там бачу ще купу проблем в цій програмі, але ви маєте зрозуміти, що окрім вас самих вам ніхто не допоможе. Ми можемо тільки підказати. Доки ви не будете активно шукати причин виникнення проблем, а будете їх викладати сюди - отримуватимете максимум самоочевидні відповіді.

На майбутнє: будь-яке питання по коду має містити три складові: що ви хочете зробити (завдання), як ви це робите (код), що виходить (помилка). По кожному пункту має бути стільки інформації, щоб не викликати уточнювальних питань... ну або принаймні максимум інформації, що ви можете надати, і бажано в найзручнішій для тих, хто відповідатиме, формі. У останньому вашому питанні немає коду, і не вказано, де саме відбувається збій.
Так, і ще бажано нормально відформатувати код: всі рядки після begin, repeat, case зсунуті на 2 пробіли (якщо вкладений в begin-end begin - на 4, якщо ще вкладений - на 6 і т.д.; після відповідних end і until повераємося на рівень назад. Це значно полегшує читання програми (і вам теж).

Подякували: Очі.завидющі, prostoPhil, Vaska3

11

Re: Двовимірний масив

Приклад правильно відформатованого коду, за яким можна прослідкувати логіку програми:

PROGRAM LAB7;
VAR
  F: FILE OF INTEGER;
  A: ARRAY [1..10, 1..10] OF INTEGER;
  B: ARRAY [1..10, 1..10] OF INTEGER;
  MN, I, J, MAX: INTEGER;
BEGIN
  ASSIGN(F, 'D:\Dance.Mission\MOE.txt');
  RESET(F);
  WRITELN('VVID Z FILE F.TXT');
  READ(F, A[I,J]);
  BEGIN
    MAX := A[1,1];
    FOR I := 1 TO 10 DO
    BEGIN
      FOR J := 1 TO 10 DO
      BEGIN
        IF A[I,J] < MAX THEN
        BEGIN
          MAX := A[I,J]
        END;
        MN := MAX;
        MAX := A[J, J];
        A[J, J] := MN;
        WRITE('RESULTATIV MASUV A=');
        FOR I:=1 TO 10 DO {змінна I уже використовується для зовнішнього циклу}
          WRITE(A[I, J])  {для цього циклу потрібно завести нову змінну, наприклад K}
      END
    END;
  END;
  CLOSE(F)
END.
Подякували: Vaska1