IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Очень нужна помощь отредактировать программу
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 2
Пол: Женский
Реальное имя: Анастасия

Репутация: -  0  +


Добрый день! Помогите пожалуйста отредактировать эту программу, так что бы было меню. Буду очень благодарна!
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.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Большевик–концептуал
***

Группа: Пользователи
Сообщений: 194
Пол: Мужской
Реальное имя: Иван Левашев
Jabber: bu_gen@octagram.name
Skype: i.levashew
QQ: 3152538431
WeChat
Ада: Сторонник
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик
Turbo Pascal: Установлен

Репутация: -  1  +


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


--------------------
If you want to get to the top, you have to start at the bottom
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 2
Пол: Женский
Реальное имя: Анастасия

Репутация: -  0  +


Цитата(OCTAGRAM @ 24.04.2014 10:15) *

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


Каждый пункт меню - вызов одной из задачи программы. После работы очередной задачи должен быть возврат в меню....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Знаток
****

Группа: Пользователи
Сообщений: 481
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  9  +


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.

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

Когда это выполнишь - попробуем двигаться дальше. А без этого мы все запутаемся в массе операторов.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Большевик–концептуал
***

Группа: Пользователи
Сообщений: 194
Пол: Мужской
Реальное имя: Иван Левашев
Jabber: bu_gen@octagram.name
Skype: i.levashew
QQ: 3152538431
WeChat
Ада: Сторонник
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик
Turbo Pascal: Установлен

Репутация: -  1  +


Объявляем переменную 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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 4.05.2024 11:04
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name