Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2011, 21:37   #1
Margarita 2703
Новичок
Джуниор
 
Регистрация: 17.11.2011
Сообщений: 3
По умолчанию Поменять максимальный элемент матрицы на минимальный

Вот программа:

Код:
Program ReplaceMinAndMax;
Var
 Matrix:Array[1..3,1..3] of Byte = (1,2,3,4,5,6,7,8,9);
 PP:Byte;
 Max,Min:Byte;
 XMin,YMin,XMax,Ymax:Byte;
 X,Y:Byte;
Begin
 XMin := 1;
 YMax := 1;
 XMax := 1;
 YMax := 1;
 Max := Matrix[1,1];
 Min := Matrix[1,1];
 For Y := 1 to 3 do
  For X := 1 to 3 do
   Begin
    If Matrix[X,Y] > Max Then  Begin Max := Matrix[X,Y]; XMax := X; YMax := Y; End;
    If Matrix[X,Y] < Max Then Begin Min := Matrix[X,Y]; XMin := X; YMin := Y; End;
   End;
 PP := Matrix[XMax,YMax];
 Matrix[XMax,YMax] := Matrix[Xmin,YMin];
 Matrix[XMin,YMin] := PP;
End.
Почему то пишет error 85 exptcted на отрезке
Matrix:Array[1..3,1..3] of Byte = (1,2,3,4,5,6,7,8,9);
Помогите найти ошибку.


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 17.11.2011 в 22:15.
Margarita 2703 вне форума Ответить с цитированием
Старый 17.11.2011, 21:59   #2
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Matrix:Array[1..3,1..3] of Byte = (1,2,3,4,5,6,7,8,9);
У вас массив двумерный, а вы его объявляете как одномерный
Вадим Мошев вне форума Ответить с цитированием
Старый 17.11.2011, 22:35   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
У вас массив двумерный, а вы его объявляете как одномерный
т.е. то, что величины задаются в разделе VAR Вас не смутило?!

Ошибка 85:
Error 85 │";" expected
т.е. компилятор ждёт точку с запятой, а её нет.
И курсор становит в то место, где эта самая точка с запятой должна быть.
А именно сразу после of Byte [ТУТ]

если комплятор TurboPascal, тогда можно (и нужно) матрицу объявить в разделе CONST.

Это будет константная переменная. Т.е. переменная, которой присваивается изначально значение, и потом их можно изменять.
Внимание! в PascalABC константные переменные изменять совсем нельзя, а в старших версиях Delphi и FreePascal можно изменять или нет - задаётся опционально.

А сколько ошибок, где Вы путаете
XMax, XMin, YMax, YMin, Max и Min ?!!!
посмотрите, каким переменным, например, Вы единички присваиваете!!

Короче, Вам нужно использовать такой код:
Код:
Program ReplaceMinAndMax;
Const
 Matrix:Array[1..3,1..3] of Byte = ((1,2,3),(4,5,6),(7,8,9));

Var
 PP:Byte;
 XMin,YMin,XMax,Ymax:Byte;
 X,Y:Byte;
Begin
 XMax := 1;
 YMax := 1;
 XMin := 1;
 YMin := 1;
 For X := 1 to 3 do
  For Y := 1 to 3 do
   Begin
    If Matrix[X,Y] > Matrix[XMax,YMax] Then
        Begin XMax := X; YMax := Y; End;
    If Matrix[X,Y] < Matrix[XMin,YMin] Then
        Begin XMin := X; YMin := Y; End;
   End;

 {для отладки просто выведем Min и Max на экран.
     Эти две строчки ниже можно смело выкинуть}
 Writeln('max=', Matrix[XMax,YMax],' ',XMax,' ',YMax);
 Writeln('min=', Matrix[XMin,YMin],' ',XMin,' ',YMin);


 {поменять местами максимальный и минимальный элементы}
 PP := Matrix[XMax,YMax];
 Matrix[XMax,YMax] := Matrix[Xmin,YMin];
 Matrix[XMin,YMin] := PP;

 {напечатать содержимое матрицы}
 for X:=1 to 3 do begin
   for Y:=1 to 3 do
     Write(Matrix[X,Y]:3,' ');
   WriteLn;
 end;

 Readln
End.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.11.2011, 22:52   #4
kuy
Форумчанин
 
Аватар для kuy
 
Регистрация: 05.09.2011
Сообщений: 109
Радость

Serge_Bliznykov, вы же матрицу как константу записали, елементы не поминяются мистами, нужно или ещё одну матрицу в переменную записать или же просто её как переменную записать:
Код:
program Project2;
{$APPTYPE CONSOLE}
uses
  SysUtils;
Var
 Matrix:Array[1..3,1..3] of Byte = ((1,2,3),(4,5,6),(7,8,9));
 PP:Byte;
 XMin,YMin,XMax,Ymax:Byte;
 X,Y:Byte;
Begin
writeln('Mas1:');
 for X:=1 to 3 do begin
   for Y:=1 to 3 do
     Write(Matrix[X,Y]:3,' ');
   WriteLn;
 end;
 XMax := 1;
 YMax := 1;
 XMin := 1;
 YMin := 1;
 For X := 1 to 3 do
  For Y := 1 to 3 do
   Begin
    If Matrix[X,Y] > Matrix[XMax,YMax] Then
        Begin XMax := X; YMax := Y; End;
    If Matrix[X,Y] < Matrix[XMin,YMin] Then
        Begin XMin := X; YMin := Y; End;
   End;


 {поменять местами максимальный и минимальный элементы}
 PP := Matrix[XMax,YMax];
 Matrix[XMax,YMax]:=Matrix[Xmin,YMin];
 Matrix[XMin,YMin]:=PP;

 {напечатать содержимое матрицы}
writeln('Mas2:');
 for X:=1 to 3 do begin
   for Y:=1 to 3 do
     Write(Matrix[X,Y]:3,' ');
   WriteLn;
 end;

 Readln
End.
kuy вне форума Ответить с цитированием
Старый 17.11.2011, 23:43   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от kuy
Serge_Bliznykov, вы же матрицу как константу записали, елементы не поминяются мистами, нужно или ещё одну матрицу в переменную записать или же просто её как переменную записать
перечитайте, пожалуйста, мой пост выше.
там, где я говорю про константную переменную.
И тогда, вдруг, Вы поймёте, что в TurboPascal в константе значения МОЖНО ИЗМЕНЯТЬ.

а вот, наоборот, в TurboPascal задавать значения для переменных в разделе VAR - НЕЛЬЗЯ!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.11.2011, 05:28   #6
kuy
Форумчанин
 
Аватар для kuy
 
Регистрация: 05.09.2011
Сообщений: 109
По умолчанию

Serge_Bliznykov, извеняюсь тогда, на своей Делфи7 писал. Нужно и себе TurboPascal поставить)
kuy вне форума Ответить с цитированием
Старый 18.11.2011, 08:47   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Serge_Bliznykov, извиняюсь тогда, на своей Делфи7 писал. Нужно и себе TurboPascal поставить)
ну, если собираетесь задачи под TurboPascal решать - тогда можно и поставить.
или если нужно код под MS DOS генерить.
А иначе смысла ставить и использовать TP нет.
Delphi по любому и лучше и мощнее!

p.s. чтобы закрыть тему о возможности изменять в коде типизированные константы.

во всех известных мне версия Delphi есть опция: [ ] Assignable typed constants

Цитата:
Assignable typed constants Enable this for backward compatibility with Delphi 1.0. When enabled, the compiler allows assignments to typed constants. Corresponds to {$J}
.
при чём в Delphi 5 эта опция "по умолчанию" включена.
что позволяет использовать и Const Matrix:Array[1..3,1..3] of Byte = ((1,2,3),(4,5,6),(7,8,9));
и Var Matrix:Array[1..3,1..3] of Byte = ((1,2,3),(4,5,6),(7,8,9));
и там и там позволяет изменять значения константы.

в Borland Delph 2006 (Delphi 7 под рукой нет, но уверен, что там то же самое) и выше.
Эта опция по умолчанию ВЫКЛЮЧЕНА (что НЕ ПОЗВОЛЯЕТ присваивать что-то типизированным константам.)
если в опциях compiler
[ ] Assignable typed constants
если поставить "птичку" - то компилятор позволяет присваивать значения таким константам.

Хотя, если речь идёт о Delphi, то я бы всё же рекомендовал использовать Var ... = значение (там, где это допустимо, разумеется!)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.11.2011, 12:12   #8
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
т.е. то, что величины задаются в разделе VAR Вас не смутило?!
На самом деле, смутило, просто я это писал уже тогда, когда надо было ложиться спать (на работу вставать рано).
Я не был уверен, чтоб переменные можно инициализировать. Я вот думаю, а что, если бы объявить этот массив в разделе CONST.

Кроме того, чтобы объявить двуменый массив, не надо использовать точку я запятой. То есть, всё пишется так:
Код:
Const
A : Array of [1..3, 1..3] = ((1,2,3),
                                   (4,5,6),
                                   7,9,0));
Если я не ошибаюсь.
Вадим Мошев вне форума Ответить с цитированием
Старый 18.11.2011, 13:42   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Если я не ошибаюсь.
не ошибаетесь.. смотрите выше посты с #3 по #7
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi Максимальный и минимальный элемент массива Arden Virth Помощь студентам 1 25.10.2011 11:04
В заданной последовательности поменять местами максимальный и минимальный члены amegi Паскаль, Turbo Pascal, PascalABC.NET 2 22.01.2011 21:11
Паскаль! поменять местами максимальный и минимальный элемент матрицы. wrmarw Помощь студентам 4 08.05.2010 13:06
Для файла определить максимальный и минимальный элемент zheka89 Паскаль, Turbo Pascal, PascalABC.NET 0 27.04.2010 09:46
Максимальный элемент массива поменять местами с четвертым. Katie Помощь студентам 2 13.01.2010 05:59