Помощь - Поиск - Пользователи - Календарь
Полная версия: Очень нужна помощь отредактировать программу
Форум «Всё о Паскале» > 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 перебираем все пункты меню, кроме выхода.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.