Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2018, 19:12   #1
Genzal
Пользователь
 
Регистрация: 23.12.2017
Сообщений: 22
По умолчанию Процедуры ввода и вывода.

Я только начал разбираться с процедурами. Если не сложно можете сказать почему при вводе значений элементов в подпрограмме они не берутся в подпрограмму для вывода этих элементов в другую. Посмотрите есои не сложно и направите меня в правильное русло.
Код:
Const Max=10;
type
 arr=array[1..max] of integer;
var mas: arr;
 n: integer;

procedure InputMass(mas: arr; n: integer);
var i : integer;
begin
write('Размер матрицы от 2 до ',max,' n=');
readln(n);
for i := 1 to n do 
begin
write(i,' элемент > '); read(mas[i]);
end;
end;

procedure OutputMass(mas: arr; n: integer);
var i:integer;
begin
write('Результирующий массив: ');
for i:=1 to n do write(mas[i], ' '); {вывод массива}
end;

begin
  writeln('БЛА');  
  InputMass(mas, n);
  OutputMass(mas, n);
end.

Последний раз редактировалось Genzal; 26.02.2018 в 19:14.
Genzal вне форума Ответить с цитированием
Старый 26.02.2018, 19:51   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,578
По умолчанию

Вот с такой поправкой будет гораздо лучше :
Код:
  procedure InputMass(var mas: arr; var n: integer);

Без var параметры трактуются как входные, и после выхода из Input введенные значения "растворятся", а mas и n останутся не заполненными.
digitalis вне форума Ответить с цитированием
Старый 26.02.2018, 20:06   #3
Genzal
Пользователь
 
Регистрация: 23.12.2017
Сообщений: 22
По умолчанию

Спасибо большое, теперь запомнил.

Цитата:

Без var параметры трактуются как входные, и после выхода из Input введенные значения "растворятся", а mas и n останутся не заполненными.
Genzal вне форума Ответить с цитированием
Старый 26.02.2018, 20:35   #4
Genzal
Пользователь
 
Регистрация: 23.12.2017
Сообщений: 22
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Вот с такой поправкой будет гораздо лучше :
Код:
  procedure InputMass(var mas: arr; var n: integer);

Без var параметры трактуются как входные, и после выхода из Input введенные значения "растворятся", а mas и n останутся не заполненными.
Можно ещё один вопрос, я подставил какой-либо изменение массива подпрограммы используются в последовательности которую указана в выводе их. Значения он запоминает и использует и меняет их одновременно?
Можно ли так использовать подпрограммы в программе как у меня получилось или лучше по другому.
Код:
Const Max=10;
type
 arr=array[1..max] of integer;
var mas: arr;
 n: integer;

procedure InputMass(var mas: arr; var n: integer);
var i : integer;
begin
write('Размер матрицы от 2 до ',max,' n=');
readln(n);
for i := 1 to n do 
begin
write(i,' элемент > '); read(mas[i]);
end;
end;

procedure OutputMass(mas: arr; n: integer);
var i:integer;
begin
write('Исходный: ');
for i:=1 to n do write(mas[i], ' '); {вывод массива}
end;

Procedure Vstavka(var mas: arr; var n: integer);
Var
  i, j,e,g:integer;
Begin
  for i:=2 to n do
    begin
      e:=Mas[i];
      j:=1;
      while (e<mas[j]) do
        Inc(j);
      for g:=i-1 downto j do
        mas[g+1]:=mas[g];
      mas[j]:=e;
    end;
End;

procedure OutputMass1(mas: arr; n: integer);
var i:integer;
begin
writeln;
write('Обработанный: ');
for i:=1 to n do write(mas[i], ' '); {вывод массива}
end;

begin
  writeln('БЛА');  
  InputMass(mas, n);
  OutputMass(mas, n);
  Vstavka(mas, n);
  OutputMass1(mas, n);
end.
Genzal вне форума Ответить с цитированием
Старый 26.02.2018, 21:59   #5
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,578
По умолчанию

Ничего не понял - что куда будет вставляться ? Словами...
Вывод массива до и после обработки можно делать одной процедурой, добавив в качестве параметра строку 'Исходный: ' или 'Обработанный: ' или флаг
Код:
  if flag=0 then write('Исходный: ') else write('Обработанный: ');
Во Vstavka n не должен быть var - он же в процедуре не изменяется. Хотя не изменяться он не может - от вставки, видимо, получится n+1. Тогда var нужно оставить, и в n занести инкрементнутое значение.

Последний раз редактировалось digitalis; 26.02.2018 в 22:07.
digitalis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Операции ввода-вывода а СИ dannae Помощь студентам 0 19.12.2013 22:11
с++ Операторы ввода,вывода _yaroslav_ Общие вопросы C/C++ 0 29.04.2013 02:26
Написать рекурсивную процедуру для ввода с клавиатуры последовательности чи-сел (конец ввода – 0) и вывода её на экран в обратном netiv Паскаль, Turbo Pascal, PascalABC.NET 1 17.02.2012 18:14
ассемблер. нужно написать собственные процедуры ввода-вывода Kuroi_Aida Фриланс 2 15.02.2012 12:13
система ввода вывода StudentPolitech Общие вопросы C/C++ 3 02.04.2009 22:22