Помощь - Поиск - Пользователи - Календарь
Полная версия: Очень нужна помощь отредактировать программу
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
NasHab
Добрый день! Помогите пожалуйста отредактировать эту программу, так что бы было меню. Буду очень благодарна!
program matritsa;
const n=8;
type

matr= array[1..n,1..n] of integer;

var
a: matr;
i, j, k,l,ko,sm : integer;

Procedure findk ( a:matr; var k:integer );
var i, j: integer;
begin
for i:=1 to n do begin
k:=i;
for j:=1 to n do
if A[i,j] <> A [j,i] then begin
k:=0;
break;
end;
if k>0 then break;
end;
end;

begin
for i:=1 to n do
for j:=1 to n do begin
write('a[',i,',',j,']=');
read(a[i,j])
end;
findk(a, k);
writeln(k);
writeln;
for i:=1 to n do begin
for j:=1 to n do
write(a[i,j]:3);
writeln;
end;
writeln('Совпадающие строки и столбцы;');
l:=0;{считаем что совпадающих строк и столбцов нет}
for k:=1 to n do
begin
i:=0;{считаем что в данных строке и столбце совпадений нет }
for j:=1 to n do
if a[k,j]=a[j,k] then i:=i+1;{если есть, считаем}
if i=n then{если все совпали}
begin
writeln('Строка и столбец № ',k);{выводим на экран}
l:=1;{фиксируем что есть такие}
end;
end;
if l=0 then writeln('Таких строк и столбцов нет!');
writeln;
for i:=1 to n do
begin
ko:=0;{считаем что отрицательных в строке нет}
for j:=1 to n do
if a[i,j]<0 then {если нашли}
begin
ko:=1;{фиксируем}
break;{больше не ищем}
end;
if ko=1 then{если есть отрицательные}
begin
sm:=0;{сумма=0}
for k:=1 to n do
sm:=sm+a[i,k];{считаем сумму в строке}
writeln('Сумма в строке ',i,'=',sm);
end;
end;
readln
end.
OCTAGRAM
Не очень понятно, что за меню
NasHab
Цитата(OCTAGRAM @ 24.04.2014 10:15) *

Не очень понятно, что за меню


Каждый пункт меню - вызов одной из задачи программы. После работы очередной задачи должен быть возврат в меню....
Федосеев Павел
NasHab, давай неспеша и по-порядку.
Я взял форматтер исходного кода JCF (см. описание). Потом для выкладывания результата на форум воспользовался кнопкой на форме ответа CODE, после появившегося тега скопировал прогу, перешёл к концу проги и нажал кнопку # - закрыл тег.
program matritsa;

const
  n = 8;
type

  matr = array[1..n, 1..n] of integer;

var
  a: matr;
  i, j, k, l, ko, sm: integer;

  procedure findk(a: matr; var k: integer);
  var
    i, j: integer;
  begin
    for i := 1 to n do
    begin
      k := i;
      for j := 1 to n do
        if A[i, j] <> A[j, i] then
        begin
          k := 0;
          break;
        end;
      if k > 0 then
        break;
    end;
  end;

begin
  for i := 1 to n do
    for j := 1 to n do
    begin
      Write('a[', i, ',', j, ']=');
      Read(a[i, j]);
    end;
  findk(a, k);
  WriteLn(k);
  WriteLn;
  for i := 1 to n do
  begin
    for j := 1 to n do
      Write(a[i, j]: 3);
    WriteLn;
  end;
  WriteLn('Совпадающие строки и столбцы;');
  l := 0;{считаем что совпадающих строк и столбцов нет}
  for k := 1 to n do
  begin
    i := 0;{считаем что в данных строке и столбце совпадений нет }
    for j := 1 to n do
      if a[k, j] = a[j, k] then
        i := i + 1;{если есть, считаем}
    if i = n then{если все совпали}
    begin
      WriteLn('Строка и столбец № ', k);{выводим на экран}
      l := 1;{фиксируем что есть такие}
    end;
  end;
  if l = 0 then
    WriteLn('Таких строк и столбцов нет!');
  WriteLn;
  for i := 1 to n do
  begin
    ko := 0;{считаем что отрицательных в строке нет}
    for j := 1 to n do
      if a[i, j] < 0 then {если нашли}
      begin
        ko := 1;{фиксируем}
        break;  {больше не ищем}
      end;
    if ko = 1 then{если есть отрицательные}
    begin
      sm := 0;{сумма=0}
      for k := 1 to n do
        sm := sm + a[i, k];{считаем сумму в строке}
      WriteLn('Сумма в строке ', i, '=', sm);
    end;
  end;
  readln;
end.

Вот это твоя программа. Теперь её возможно читать.
Т.к. я не видел формулировок задач, то сразу ничего сказать не могу. Предполагаю, что каждый цикл - это и есть решение отдельной задачи.
Предлагаю тебе самостоятельно преобразовать прогу так, чтобы решение каждой задачи оказалось в подпрограмме, а в основной программе эту процедуру вызывать. Ну вот, например, в начале программы осуществляется ввод исследуемой матрицы
.....................................
begin
  for i := 1 to n do
    for j := 1 to n do
    begin
      Write('a[', i, ',', j, ']=');
      Read(a[i, j]);
    end;
..................................

Выделяем его в процедуру, а в основной программе вызываем её
...........................
  procedure MatrCreate(var a: matr);
  var
    i, j: integer;
  begin
    for i := 1 to n do
      for j := 1 to n do
      begin
        Write('a[', i, ',', j, ']=');
        Read(a[i, j]);
      end;
  end;
................................
begin
  MatrCreate(a);
............................
end.

Потом такие же манипуляции с другими кусками кода.

Когда это выполнишь - попробуем двигаться дальше. А без этого мы все запутаемся в массе операторов.
OCTAGRAM
Объявляем переменную LastChoice, например, типа Integer для последнего выбранного пункта меню и делаем цикл repeat .. until LastChoice = номер того пункта меню, который нужен для выхода. В этом цикле в начале отображаем меню несколькими строками WriteLn, потом узнаём выбор пользователя, например, ReadLn(LastChoice), потом оператором case или if перебираем все пункты меню, кроме выхода.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.