![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
NasHab |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 2 Пол: Женский Реальное имя: Анастасия Репутация: ![]() ![]() ![]() |
Добрый день! Помогите пожалуйста отредактировать эту программу, так что бы было меню. Буду очень благодарна!
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 |
![]()
Сообщение
#2
|
![]() Большевик–концептуал ![]() ![]() ![]() Группа: Пользователи Сообщений: 194 Пол: Мужской Реальное имя: Иван Левашев Jabber: bu_gen@octagram.name Skype: i.levashew QQ: 3152538431 Ада: Сторонник Embarcadero Delphi: Сторонник Free Pascal: Разработчик Turbo Pascal: Установлен Репутация: ![]() ![]() ![]() |
Не очень понятно, что за меню
-------------------- If you want to get to the top, you have to start at the bottom
|
NasHab |
![]()
Сообщение
#3
|
Группа: Пользователи Сообщений: 2 Пол: Женский Реальное имя: Анастасия Репутация: ![]() ![]() ![]() |
|
Федосеев Павел |
![]()
Сообщение
#4
|
Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 481 Пол: Мужской Реальное имя: Федосеев Павел Репутация: ![]() ![]() ![]() |
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 |
![]()
Сообщение
#5
|
![]() Большевик–концептуал ![]() ![]() ![]() Группа: Пользователи Сообщений: 194 Пол: Мужской Реальное имя: Иван Левашев Jabber: bu_gen@octagram.name Skype: i.levashew QQ: 3152538431 Ада: Сторонник Embarcadero Delphi: Сторонник Free Pascal: Разработчик Turbo Pascal: Установлен Репутация: ![]() ![]() ![]() |
Объявляем переменную LastChoice, например, типа Integer для последнего выбранного пункта меню и делаем цикл repeat .. until LastChoice = номер того пункта меню, который нужен для выхода. В этом цикле в начале отображаем меню несколькими строками WriteLn, потом узнаём выбор пользователя, например, ReadLn(LastChoice), потом оператором case или if перебираем все пункты меню, кроме выхода.
-------------------- If you want to get to the top, you have to start at the bottom
|
![]() ![]() |
![]() |
Текстовая версия | 19.04.2025 4:14 |