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

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

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

 
 Ответить  Открыть новую тему 
> Процедуры и ф-ии
сообщение
Сообщение #1


Гость






Пожалуйста помогите переделать данную программу в 4 новых проги :molitva:
А именно, нужно:
1. Использовать процедуры с параметрами.
2. Использовать процедуры без параметров.
3. Использовать функции с параметрами.
4. Использовать функции без параметров.
Во всех четырёх прогах, необходимо использовать не менее трёх параметров.
Суть проги должна остаться той же.

Код

uses crt;
const
  max_n = 9;
var
a,b:array[1..max_n,1..max_n] of integer;
i,j,n1,n2,error:integer;
s: string; x: longint; er: integer;

label e1;
begin
clrscr;
gotoxy  (3,10);
  writeln ('Данная программа задаёт матрицу А. После чего создаёт');
   gotoxy  (57,10);
  writeln ('новую матрицу B, где ');
   gotoxy  (12,11);
  writeln ('а) B(i,j) = A(i,j), если A(i,j) > 0');
   gotoxy  (12,12);
  writeln ('б) B(i,j) не равно 0, если A(i,j) <= 0');
   gotoxy  (7,14);
  writeln ('Элементами матрицы могут быть только целые числа от -32768 до 32767,');
   gotoxy  (18,15);
  writeln ('максимальный размер матрицы 9х9!');
   gotoxy  (18,20);
  writeln ('Нажмите любую клавишу для продолжения');
   readkey;
e1:
clrscr;
  repeat
    write('Введите кол-во строк = ');
{$I-} readln(n1);
error:=ioresult;{$I+}
IF (n1<2) or (n1>max_n) or (error<>0)
then  writeln ('Кол-во строк от 2 до 9!');
  until (n1 >= 2) and (n1<=max_n) and (error=0);

  repeat
    write('Введите кол-во столбцов = ');
    {$I-} readln(n2);
    error:=ioresult;{$I+}
    IF (n2<2) or (n2>max_n) or (error<>0)
    then writeln ('Кол-во столбцов от 2 до 9!');
  until (n2 >= 2) and (n2<=max_n) and (error=0);


  for i := 1 to n1 do
  for j := 1 to n2 do
    begin
      repeat
        write('a[', i, ',', j, '] = '); Readln(s);
        val(s, x, er);
        if (er<>0) or (x < -32768) or (x > maxint)
        then writeln('Введённый вами символ вне диапозона от -32768 до 32767');
      until (x>=-32768) and (x<=maxint) and (er=0);
      a[i,j] := x;
    end;

  for i := 1 to n1 do
  for j := 1 to n2 do
  begin
       if a[i,j] > 0 then b[i,j] := a[i,j]
       else
       b[i,j] := 0;
  end;
  clrscr;
  write('Матрица A');
  for i := 1 to n1 do
  begin
       writeln;
       for j := 1 to n2 do
       Write(a[i,j]:7);
  end;

  writeln;
  write('Матрица B');
  for i := 1 to n1 do
  begin
       writeln;
       for j := 1 to n2 do
       Write(b[i,j]:7);
       end;
       writeln ('');
       write('Вы хотите сделать ещё одну матрицу? y/n');
       case readkey of
   #89: goto  e1;
   #121: goto e1;
   #78: exit;
   #110: exit;
  end;
end.

Пожалуйста помогите.

Добавлено

Поправка:
НЕ
"Во всех четырёх прогах, необходимо использовать не менее трёх параметров."
А
Только в двух прогах, необходимо использовать не менее трёх параметров.
В 1 и 3=)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






У меня наверное глюки... В прошлый раз это был не Guest а ghost... http://forum.pascal.net.ru/index.php?showt...indpost&p=31093
Ничего не напоминает?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






:D Нет у тебя не глюки, я ghost. Дело в том, что тогда я свой пароль помнил, а щас нет. Запрос на восстановление забытого пароля я сделал, но писмецо пока что не пришло (уже как 2 часа его нет).
Кстати я и мыло то не помню, которе тут оставлял при реге (если оставлял blink.gif )
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Значит, смотри... Предложения пока такие:
1. Вместо конструкций вида
Код
gotoxy(x, y);
writeln(str);

описываешь процедуру (как раз с тремя параметрами)
Код
Procedure PrintStr(x, y: byte; s: string);
 begin
   gotoxy(x, y);
   writeln(s);
 end;
...
{ и в основной программе: }
PrintStr(3, 10, 'Данная программа задаёт матрицу А. После чего создаёт');
{ и так далее... }


2. Делаешь процедуру (опять с тремя параметрами):
Код
type matrix = array[1..max_n,1..max_n] of integer;;
procedure matrixOut(arr: matrix; sz_1, sz_2: integer);
 var i, j: integer;
 begin
   for i := 1 to sz_1 do
   begin
     writeln;
     for j := 1 to sz_2 do
       Write(arr[i, j]:7);
   end;
 end;
...
{ в основной программе - }
 write('Матрица A');
 matrixOut(a, n1, n2);

 write('Матрица b');
 matrixOut(b, n1, n2);
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Всё здорого, только во втором варианте происходит ошибка. Ошибка не совпадения типов.

Код

uses crt;
const
 max_n = 9;
var
a,b:array[1..max_n,1..max_n] of integer;
i,j,n1,n2,error:integer;
s: string; x: longint; er: integer;
type matrix = array[1..max_n,1..max_n] of integer;
procedure matrixOut(arr: matrix; sz_1, sz_2: integer);
var i, j: integer;
begin
  for i := 1 to sz_1 do
  begin
    writeln;
    for j := 1 to sz_2 do
      Write(arr[i, j]:7);
  end;
end;

...

 write('Матрица A');
 matrixOut(a, n1, n2); {в этой строке происходит ошибка}

 writeln;
 write('Матрица B');
 matrixOut(b, n1, n2);
      writeln ('');
      write('Вы хотите сделать ещё одну матрицу? y/n');
      case readkey of
  #89: goto  e1;
  #121: goto e1;
  #78: exit;
  #110: exit;
 end;
end.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Я же написал:
Код
type matrix = array[1..max_n,1..max_n] of integer;


Так a и b объяви не так:
Код
var
a,b:array[1..max_n,1..max_n] of integer;

а вот так:
Код
var
a,b:matrix;


и ошибка исчезнет... :yes:
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Спасиб, помогло=)
А с остальными тремя не поможете?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Guest, а почему, собственно, с тремя? Что, нельзя в одной программе изменить одно, а во второй - другое?

Ну я бы еще описал функцию:
Код
Function GetColRow: Integer;
Var x, error: integer;
Begin
 repeat
   {$I-} readln(x);
   error:=ioresult;{$I+}
   IF (x<2) or (x>max_n) or (error<>0)
     then writeln ('Кол-во строк (столбцов) от 2 до 9!');
 until (x >= 2) and (x<=max_n) and (error=0);
 GetColRow := x
End;

И вместо того, что есть сейчас, пользовался бы вот этим:
Код
...
write('Введите кол-во строк = ');
n1 := GetColRow;
write('Введите кол-во столбцов = ');
n2 := GetColRow;

Вот тебе функция без параметров... ;)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






volvo, извиняюсь за первоначальную дэзинформацию.
Учитель в задание ввёл ещё пару требований,
1. чтобы процедура или ф-ия использовалась в проге минимум 2 раза.
2. чтобы использовынные параметры в проге изменялись.
Вот тут например они не изменяюцца

Код

...
matrixOut(a, n1, n2);
...
matrixOut(b, n1, n2);
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






kazqg vtne aguc tplcujsrk zuxc ibrxgyev mcjtq
 К началу страницы 
+ Ответить 

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

 





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