Автор Тема: Вспоминаем Turbo Pascal и решаем задачи на нём  (Прочитано 49135 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Roman

  • Пользователь
  • Сообщений: 7
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #180 : 08 Июнь 2010, 14:38:25 »
Код в студию :)!

Оффлайн HardWareMan

  • Модератор
  • Сообщений: 7443
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #181 : 09 Июнь 2010, 09:52:30 »
Массив строк много памяти требует.
Я предлагаю так: берём исходную строку и идём по ней с конца. Когда образуется слово, вложенным циклом ищем это слово дальше по строке. Если находим, то удаляем ранее найденное слово процедурой delete и сбрасываем вложенный цикл. Потом ищем следующее и т. д.
Удалять из строки? Можно. Но массив то можно в кучу положить, а я думаю, что вряд-ли юзер напечатает больше 1КБ с клавиатуры. ;) А так, можно выводить уникальные слова + счетчик - количество повторений. ;)

Оффлайн Fly

  • Пользователь
  • Сообщений: 1896
  • Пол: Мужской
    • Steam
    • Youtube
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #182 : 09 Июнь 2010, 12:49:01 »
Думаешь, что товарищ, которому нужна эта программа, сможет положить массив в кучу?;)
А вообще с массивом, конечно, лучше, такая программа и работать быстрее будет.

Оффлайн Roman

  • Пользователь
  • Сообщений: 7
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #183 : 09 Июнь 2010, 13:00:42 »
Вот нашел:

program string;
uses crt;

var
  i, j, k: integer;
  p, q, s: string;
begin
  write('Enter string: '); readln(s);
  i:=1;
  while i<Length(s) do begin
    while (i<Length(s)) and (s=' ') do Inc(i);
    j:=i;
    while (i<Length(s)) and (s<>' ') do Inc(i);
    q:=Copy(s,j,i-j);
    repeat
      p:=Copy(s,i,Length(s)-i+1);
      k:=Pos(q,p);
      if k>0 then Delete(s,i+k-1,i-j)
    until k=0
  end;
  WriteLn('Result: ' , s);
  Readkey;
end.


Кажись, работает правильно.  :)

Оффлайн Fly

  • Пользователь
  • Сообщений: 1896
  • Пол: Мужской
    • Steam
    • Youtube
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #184 : 09 Июнь 2010, 16:43:26 »
Цитата: Roman
program string;
И она работает? :?

Оффлайн Roman

  • Пользователь
  • Сообщений: 7
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #185 : 09 Июнь 2010, 16:51:14 »
И она работает? :?

Еще как! Можешь сам проверить.

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #186 : 09 Июнь 2010, 17:55:01 »
Roman,нельзя такое имя программе задавать.

Оффлайн Roman

  • Пользователь
  • Сообщений: 7
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #187 : 09 Июнь 2010, 18:52:43 »
gepar,
Хосссподи, это же пример.

Оффлайн HardWareMan

  • Модератор
  • Сообщений: 7443
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #188 : 09 Июнь 2010, 19:55:10 »
Roman,нельзя такое имя программе задавать.
Кто сказал?
{ New Borlont Poskal 95 example program.
  This program lets you use new Borlont Poskal 95, which was built-in in the
  Borland Pascal 7.0. (I guess even developers didn't know about it.)
  It can be switched on by using double comments the [see below] way }
program external(private,public); { you can specify type of your program.
This is done in Borland Pascal 7.0, but when using Borlont Poskal 95, it
receives new meaning }

{ now, enable Borlont Poskal 95 syntax }
const forward = ^{; (* this string enables Borlont Poskal 95 }
{ now all the syntax of the new Poskal 95 can be used. Look through these
examples to find new features }
      private =  { Assign Private Action }
      BEGIN
        in case of export, do not object to destructor and goto library
      END;
      public =   { Assign Public Action }
      BEGIN
        goto do program and begin with absolute packed unit in assembler
      END;

type program = unit; { you can give any name to your identifiers }
     program = library; { you can redefine any type as many times }
     program = program; {                           as you want }
     type = var; { you can define type "type" }
     type = const;

var program : program; { you can redefine variables too }
    program : program with library; { you can use any syntax you want }
    program : program with unit;
    var : program; { you can even define variable "var" }
    var : const;
    var : type;

const program : program = program or unit and library;
      program : program = unit with library in program;
      const : const = type shl string in unit shr and;

{ new free object definition }
type object = object (do not object to object)
       constructor begin; external in library program;
       destructor end; assembler with program;
       procedure function; interrupt with assembler;
       function procedure:constructor; packed assembler unit in program;
     and end;

{ Now execute program with predefined constants (what does it mean?) }
do PROGRAM external ( const private, const public );
{ new function/procedure definition - you don't have any restriction to
function/procedure definition now! }
Function Function (Function:Function):Function; Function and Not Procedure;
 FUNCTION BEGIN
   Function:=Program(Unit Near.External(Far));
 FUNCTION END
Procedure Function (far,near : object) : function or procedure;
 begin
   Function(or procedure):=far far far far in program;
 and; { even if you mixed "end" with "and", compiler will understand it }
{ new "if" statement - no any restriction to the syntax }
IF procedure or function far far in program THEN
while repeat do repeat while;
{ You can construct any operator via constructors and destructors
(again, no restriction to the syntax) }
Constructor And (in library) : And:=library.and;
Destructor Constructor (Procedure : Function) : Program; Var;
{ New Great Assembler! Allows to write everything in words }
asm
  1. Write Message "Formatting disk C" on the screen
  2. Format Disk C (and also ignore all the Windows tries to stop it)
  3. Physically destroy hard drive
  4. Connect to the Internet
  5. Cheat Pentagon
  6. Download secret plans to the disk A:
  7. Disconnect and destroy computer (along with everything in 10 000 km^2
     around)
  8. Finish
end;
{ and at last, very free syntax. Just write everthing you want and
compiler will understand what you meant }
array begin:case[const] of constructor ...
destructor div do downto else end
exports file for function goto
if implementation in inherited inline then interface label library mod nil
not object or packed procedure program record repeat
set shl string to type shr
unit until uses var
while with xor
{ The only bad thing about Borlont Poskal 95 extension is the next:
Your program will NEVER run (although will ALWAYS compile) ;) guess why? :) }

(* And now, switch back to the Borland Pascal 7.0 with uncomment :*)

{ next lines are written in Borland Pascal 7.0. }
type far = string;

function near(far:far):far;far;
begin
  external.near:=external.far(far);
end;
{ you can also switch to the Poskal 95 extension with next line: }
const assembler = ^'; { '
begin
uses program external in unit forward xor string with far far in near
end. (* it is not end of program *)
(* another feature: number of begin's and end's doesn't have to match *)
procedure constructor and destructor(function:function and procedure);
begin
  if constructor then destructor else function in constructor;
    end:
    end;
    end,
    end.
end.
begin. begin. begin, begin begin(begin(end)).
asm
  (c) Pavel Anokhin 1999
  Net Mail: 2:5027/16.20
  E-Mail: mna@valley.ru
end and begin;
{ ok, I think that's enough, switch back to BP7 with next character:}
{ we're back in BP. Enjoy :)  Pascal rulezzzz forever!!! }

begin
  near(forward);
end.
Сохрани код в файл и попробуй в ТР7/ВР7.

Оффлайн Fly

  • Пользователь
  • Сообщений: 1896
  • Пол: Мужской
    • Steam
    • Youtube
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #189 : 09 Июнь 2010, 20:12:28 »
Ну так "external" не "string", и даже не комментарий.:)

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #190 : 09 Июнь 2010, 20:52:12 »
HardWareMan,да у тебя там какой-то Borlont Poskal, может в нём и можно, я в free pascal только что попробовал пихнуть он сразу заругался, правда заругался как всегда непонятно (за что и не люблю free pascal) так что сложно понять именно имя программы ему не нравиться или что другое. Если восстановлю загрузчик xp то попробую на обычном паскале запустить.

Оффлайн HardWareMan

  • Модератор
  • Сообщений: 7443
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #191 : 10 Июнь 2010, 07:52:15 »
HardWareMan,да у тебя там какой-то Borlont Poskal, может в нём и можно, я в free pascal только что попробовал пихнуть он сразу заругался, правда заругался как всегда непонятно (за что и не люблю free pascal) так что сложно понять именно имя программы ему не нравиться или что другое. Если восстановлю загрузчик xp то попробую на обычном паскале запустить.
Не парься, это просто прикол же. Прикол над паскальным синтаксис-подсвечником (дырка есть при двойной ремарке). Реальной программы там пара строк. И она пустая. Т.е., ничего не делает. Но вот этот код:
type far = string;

function near(far:far):far;far;
begin
  external.near:=external.far(far);
end;
Реально работает. И компилер распознает, где far=модификатор и где far=тип.

Оффлайн Roman

  • Пользователь
  • Сообщений: 7
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #192 : 15 Июнь 2010, 06:24:58 »
Следующая задача на расмотрение: "Написать процедуры, реализующие операции вставки, удалния и поиска элемента для динамического двунаправленного списка (списка со ссылками на следующий и предыдущий элементы)".

Оффлайн drak

  • Пользователь
  • Сообщений: 2
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #193 : 28 Ноябрь 2010, 20:21:04 »
помогите мне пожалуйста, никак не могу разобраться эт задач :'( :'( :'( :'( :'( :'( :'(
1)вывести на экран изображение всех возможных символов вместе с их номерами.
2)напишите программу,которая вводит с клавиатуры 10реальных чисел и организовывает их хранение в массиве.после этого массив пересортировывается по закону.первый элемент меняется с последним,второй с предпоследним :'( :'( :'( :'( :'(
3)напишите программу,организующую хранение в файле нескольких записей(до10) л дневной температуре.Каждая запись содержит четыре поля-номер записи,число,месяц,температура.Организуйте вывод на экран всех всех записей, а также определите день максимальной и минимальной температуры
заранее спасибо=*

Оффлайн Йобан Матич

  • Emu-Land Team
  • Сообщений: 2593
  • Пол: Мужской
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #194 : 28 Ноябрь 2010, 20:41:51 »
первая прога
program one;
var
   i:byte;
begin
   for i := 0 to 255 do
       begin
            writeln(chr(i),' = ', i);
       end;
   readln;
end.

Оффлайн HardWareMan

  • Модератор
  • Сообщений: 7443
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #195 : 29 Ноябрь 2010, 06:14:08 »
первая прога
program one;
var
   i:byte;
begin
   for i := 0 to 255 do
       begin
            writeln(chr(i),' = ', i);
       end;
   readln;
end.

А вот х*й ты угадал! Все символы менее 32 будут восприняты как управляющие и будет локальный армагеддец. Нужна прямая запись в ОЗУ текстового экрана. :3

Оффлайн Йобан Матич

  • Emu-Land Team
  • Сообщений: 2593
  • Пол: Мужской
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #196 : 29 Ноябрь 2010, 13:04:25 »
HardWareMan,
Ы. Точно.
А может ему нужно с 32-го? Учитывая 2 и 3 задачи рано им ещё до прямой записи в ОЗУ.

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #197 : 29 Ноябрь 2010, 13:12:42 »
Я даже не знал что такое есть:
Цитата: HardWareMan
Нужна прямая запись в ОЗУ текстового экрана. :3
Там наверное и правда надо чтобы пищало и визжало.
Хотя мне что-то подсказывает что drak болше на форум не зайдёт потому и не писал я решение для 2 задачи, зайдёт тогда уже и установлю паскаль и напишу  :)

Оффлайн Йобан Матич

  • Emu-Land Team
  • Сообщений: 2593
  • Пол: Мужской
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #198 : 29 Ноябрь 2010, 14:52:42 »
Цитата: gepar
огда уже и установлю паскаль и напишу 
Можно и не устанавливать, так пиши =)

Оффлайн drak

  • Пользователь
  • Сообщений: 2
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #199 : 30 Ноябрь 2010, 21:21:51 »
спасибо ребят) :lol:

Оффлайн igarexa

  • Пользователь
  • Сообщений: 348
  • Пол: Мужской
  • Да! Это мой новый статус!..
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #200 : 01 Октябрь 2011, 23:03:40 »
Народ, помогите пожалуйста кто может.
Паскаль не может скомпилировать написанное: выводит на непонятную мне ошибку:
iganew.pas(5.20) Fatal: Syntax error, 'identifier' excepted but ":" found

На эту строчку:
var A, Pie, Sie, Z,: real;

А именно на двоеточие, но ведь там ведь вроде всё в порядке. Как же так?

Если необходимо, могу весь код сюда кинуть.

Оффлайн paul_met

  • Супермодератор
  • Сообщений: 8077
  • Пол: Мужской
  • Похититель эмуляции
    • Youtube
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #201 : 01 Октябрь 2011, 23:19:56 »
Цитата: igarexa
var A, Pie, Sie, Z,: real;
Убери запятую после "Z".

Оффлайн igarexa

  • Пользователь
  • Сообщений: 348
  • Пол: Мужской
  • Да! Это мой новый статус!..
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #202 : 01 Октябрь 2011, 23:25:10 »
paul_met, благодарю!  :) и как же я так не догнал... ладно пойду дальше разбираться с ошибками...

Оффлайн igarexa

  • Пользователь
  • Сообщений: 348
  • Пол: Мужской
  • Да! Это мой новый статус!..
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #203 : 02 Октябрь 2011, 19:38:43 »
Блин, не могу никак сделать что бы всё идеально работало... Помогите пожалуйста разобраться с заданием. Алгоритм придумал, блок схему нарисовал, код написал как смог, но вычисления неправильные делает. Подскажите в чем же дело, где у меня ошибка?
Задание с латышского языка, переведу как понял на русский для вас.

Квадрат характеризует сторона А, периметр P и площадь S. Точность с (плавающей точкой?) проверяется значением Z. Ввести A, P, S, Z значения. Вычислить P, S, и сравнить с введёнными значениями, проверить с точностью Z, если не правильно - попросить ввести значения снова.

Алгоритм я понял такой:


Sr и Pr я назвал так реальные значения площади и периметра, вычисляемые по формулам.
Sie и Pie я назвал вводимые нами значения


Код я написал такой: Program Kvadrat;
Uses Crt;
Label Vvod_dannih;
Label Vse_rabotaet;
Label Variants1;
Label Variants2;
var A, Pie, Sie, Z, Pr, Sr: real;

Begin
clrscr;
Vvod_dannih: Writeln('Vvedi neobhodimie dannie');
Writeln('Vvedi storonu A');
Readln(A);
Writeln('Vvedi perimetr P');
Readln(Pie);
Writeln('Vvedi ploshadj S');
Readln(Sie);
Writeln('Vvedi to4nostj Z');
Readln(Z);
Pr := A*4;
Sr := A*A;

if( A<0 ) or ( Pie <0 ) or ( Sie <0 ) or ( Z <0 ) then
  begin
    writeln('Nelza vvoditj negativnie 4isla' );
    goto Vvod_dannih;
   end;


if (Pr > Pie) and (Sr > Sie) then
begin
   goto Variants1;
end
else
begin
   goto Variants2;
end;
Variants1:
begin
  if ((Pr - Pie) <=Z ) and ((Sr - Sie) <=Z )  then
  begin
    writeln ('To4nostj pozvolaet');
        goto Vse_rabotaet;
    end
         else
    begin
    writeln ('To4nostj ne pozvolaet');
         goto Vvod_dannih;
    end;

if (Pr < Pie) and (Sr < Sie) then
   goto Variants2;

Variants2:
if ((Pie - Pr) <=Z ) and ((Sie - Sr) <=Z )  then
begin
    writeln ('To4nostj pozvolaet');
        goto Vse_rabotaet;
         end

         else
         begin
    writeln ('To4nostj ne pozvolaet');
         goto Vvod_dannih;
         end;

end;
Vse_rabotaet: Writeln('Vse rabotaet!');
Readln;
End.

Буду рад любой помощи..



То есть, если возмём сторону A=3, то реальный периметр (Pr)=12 и реальная площадь (Sr)=9
если я ввожу P=10 и S=7 точность Z=2, то он разрешает такие значения.
если я ввожу P=10 и S=7 точность Z=1, то он не разрешает такие значения.
То есть здесь всё в порядке, но:
если я ввожу P=12 и S=7 точность Z=1, то он  разрешает такие значения. Программа видит что одно значение годится для такой точности, и значит этого достаточно, но в этом случае S не должно подходить.


Кстати, за это время нашёл 1 недочёт, и исправил уже. В вариантах надо было сделать <=Z (меньше или равно Z, а не просто меньше).
« Последнее редактирование: 02 Октябрь 2011, 20:58:28 от igarexa »

Оффлайн Planestranger

  • Пользователь
  • Сообщений: 1837
  • Пол: Мужской
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #204 : 02 Октябрь 2011, 22:32:29 »
неправильно. а если у тебя введенный периметр будет больше вычисленного, а площадь меньше?
разницу бери по модулю для проверки, и тогда будет достаточно одного условного оператора.

Оффлайн igarexa

  • Пользователь
  • Сообщений: 348
  • Пол: Мужской
  • Да! Это мой новый статус!..
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #205 : 02 Октябрь 2011, 22:59:50 »
lost_hero, у меня на такой случай,  если введённые данные больше реальных, программа вычисляет по другой формуле, то есть "введённые - реальные" а не "реальные - введённые", сейчас проверил, и когда вводимые больше реальных, программа работает безотказно при любых значениях.

Но да, ты прав, с модулями было бы намного лучше. Спасибо.


То есть есть 1 проблемный случай: при условиях того что вводимые данные меньше реальных, и если хоть 1 значение удовлетворяет заданной точностью, то программа пишет что всё в порядке.

Конечно я могу надеяться что профессор просто не заметит и не проверит этот случай  :D
« Последнее редактирование: 02 Октябрь 2011, 23:05:18 от igarexa »

Оффлайн igarexa

  • Пользователь
  • Сообщений: 348
  • Пол: Мужской
  • Да! Это мой новый статус!..
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #206 : 07 Октябрь 2011, 19:49:22 »
Всё, засада... Оказывается, я неправильно понял задачу. А именно момент про точность. Точность надо задавать количеством цифр после запятой...

Но по идее всё остальное зато уже понятно.

Поэтому у меня только один вопрос. Да и то небольшой:
Как сделать так, что бы при заданной точностью (например 0.001), проверялось определённое значение.
В смысле, как задать это свойство какому либо значению?

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #207 : 08 Октябрь 2011, 12:21:19 »
Вообще точность подразумевает дисперсию (разброс) значения.

Оффлайн igarexa

  • Пользователь
  • Сообщений: 348
  • Пол: Мужской
  • Да! Это мой новый статус!..
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #208 : 19 Ноябрь 2011, 01:10:56 »
Всем привет... снова я   :blush:

Помогите пожалуйста с заданием в паскале, уже сколько времени сижу, не могу никак догнать как его сделать.
Задание двумерного массива.
По идее, надо лишь составить алгоритм заполнения двумерного массива. Только я никак не могу додуматься как его сделать.
У меня есть пример как он составляется по горизонтали:

wrk:=1;                                     
for i:=1 to 6 do {cikl po strokam}         
begin
j:=5-i; if j<1 then j:=1;                   
while(j <= 7-i) do {cikl po kolonnam}     
begin               
ms[i,j]:=wrk;
wrk:=wrk+1;                                     
j:=j+1
end;
end;

{ . . . 1 2 3 . . . . }
{ . . 4 5 6 . . . . . }
{ . 7 8 9 . . . . . . }
{101112 . . . . . . . }
{1314 . . . . . . . . }
{15 . . . . . . . . . }
{ . . . . . . . . . . }
{ . . . . . . . . . . }
{ . . . . . . . . . . }
{ . . . . . . . . . . }



А надо, что бы составлялось вот так:
{ . . 1 . . . . . . . }
{ . . 2 7 . . . . . . }
{ . . 3 813 . . . . . }
{ . . 4 91419 . . . . }
{ . . 510152025 . . . }
{ . . 611162126 . . . }
{ . . .12172227 . . . }
{ . . . .182328 . . . }
{ . . . . .2429 . . . }
{ . . . . . .30 . . . }


Добрался до того, что бы вводить по вертикали, первая колонна заполняется правильно, остальное - нет...

Выложил файл .pas , думаю с ним разобраться легче с программой. http://ifolder.ru/27046988

Большая помощь помочь мне :)

Такс... сделал несколько ошибок когда отправлял задание. Отправил то, над чем уже работал, соответственно внёс там изменения.
Сейчас уже всё исправил, перезалил заново .pas файл, на правильный.
« Последнее редактирование: 19 Ноябрь 2011, 14:39:54 от igarexa »

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #209 : 19 Ноябрь 2011, 15:12:17 »
igarexa,какое-то странное у тебя задание, не алгоритмическое я бы сказал, почему данные вводить нужно именно с 3ей строки и почему только до 6 в столбец мы считаем? А если у нас строк меньше (2) например, а если столбцов меньше (2), тогда что? Вот есть у нас матрица 2x2, что тогда твой алгоритм будет делать, ничего? Ты бы лучше задание написал, а не то как ты его понимаешь.