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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.03.2009, 11:37   #1
world12_tk
Форумчанин
 
Регистрация: 24.02.2009
Сообщений: 269
По умолчанию запутался в процедурах

День добрый... у меня возникла проблема, которую не могу решить... Мне дали задание написать прогу с использованием процедур... Вот что я накалякал....
program p11;
const
N=10;
type
massiv=array[1..N] of integer;
a_p=array[1..N] of integer;
procedure input(a:massiv);
var
mass:integer;
pos:integer;
begin
for pos := 1 to N do
begin
writeln ('введите ',pos,'-ый элемент последовательности*');
readln(mass);
a[pos] :=mass;
end;
writeln;
end; {конец процедуры ввода}

procedure processing (var pos:integer; a:massiv; a_l:a_p);

var
last : boolean;
i:integer;
begin
last := a[1] >= 0;
pos := 1;
for I := 2 to N do
begin
if(last <> (a[i] >= 0)) then
begin
a_l[pos] := i;
inc(pos);
last := not last;
end;
end;
end; {конец процедуры обработке}

procedure output(var pos:integer; a_l:a_p);
var
i:integer;

begin
writeln('знак меняется: ');
for i:= 1 to pos-1 do
write(a_l[i], ',');

Writeln;
write('**нажмите любую клавишу');
readln;
end; {конец процедуры вывода}
var
a:massiv;
a_l:a_p;
begin
input(a); !!!!!!
processing(a,a_l); !!!!!
output(pos;a_l); !!!!!!
end.
ТАк вот, я не могу понять что нужно написать в скобках, где поставлены
знаки !!!!.... Помогите пожалуйста.... В ходе компиляции pascal выдает ошибку Type mismatch... Заранее спасибо
world12_tk вне форума Ответить с цитированием
Старый 01.03.2009, 11:57   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

мдя...я промолчу про двойное обьявление одного и того же типа, видимо тебе так нужно...попробуй вот так
кстати pos не стоит использовать как идентификатор(такая функция есть)
Код:
program p11;
const
 N=10;
type
 massiv=array[1..N] of integer;
 a_p=array[1..N] of integer;
procedure input(a:massiv);
var
 mass:integer;
 posit:integer;
begin
 for posit := 1 to N do
  begin
  writeln ('введите ',posit,'-ый элемент последовательности*');
  readln(mass);
  a[posit] :=mass;
  end;
  writeln;
end; {конец процедуры ввода}

procedure processing (var posit:integer; a:massiv; a_l:a_p);

var
 last : boolean;
 i:integer;
begin
 last := a[1] >= 0;
 posit := 1;
 for I := 2 to N do
  begin
   if(last <> (a[i] >= 0)) then
    begin
     a_l[posit] := i;
     inc(posit);
     last := not last;
    end;
  end;
end; {конец процедуры обработке}

procedure output(var posit:integer; a_l:a_p);
var
 i:integer;

begin
 writeln('знак меняется: ');
 for i:= 1 to posit-1 do
 write(a_l[i], ',');

 Writeln;
 write('**нажмите любую клавишу');
 readln;
end; {конец процедуры вывода}
var
 position:integer;
 a:massiv;
 a_l:a_p;
BEGIN
 input(a);
 processing(position,a,a_l);
 output(position,a_l);
END.
я проверял, все работает...но я не знаю выводит ли она то что тебе нужно(сами процедуры я полностью оставил на твоей совести, кроме того что исправил идентификатор)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 01.03.2009 в 12:01.
Пепел Феникса вне форума Ответить с цитированием
Старый 01.03.2009, 12:52   #3
world12_tk
Форумчанин
 
Регистрация: 24.02.2009
Сообщений: 269
По умолчанию

Огромное спасибоза помощь... но я так и не понял две вещи:
1. для чего мы пишим, а главное какие переменные при вызове процедур...
2.для чего была объявлена переменная position
world12_tk вне форума Ответить с цитированием
Старый 01.03.2009, 13:58   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

1)переменные этих процедур ты установил сам, их и нужно передавать в вызове
2)position нужна для этих функций
Код:
procedure processing (var posit:integer; a:massiv; a_l:a_p);
procedure output(var posit:integer; a_l:a_p);
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 01.03.2009, 14:26   #5
world12_tk
Форумчанин
 
Регистрация: 24.02.2009
Сообщений: 269
По умолчанию

хм..... но ведь в параметрах процедур написано posit, а не position....
Я наверно что то в процедурах не правильно написал... Не поможете????? моя программа должна определять сколько раз меняется знак в данной последовательности чисел, запоминать намера позиций, в которых меняется знак.
world12_tk вне форума Ответить с цитированием
Старый 01.03.2009, 18:34   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

то что описанно в обьявлении процедуры то внутренняя переменная она существует только внутри процедуры, и ей нужно присвоить какое-то значение(это и есть переменная position)

попробуй так:
Код:
procedure processing (var posit:integer; a:massiv; a_l:a_p);
var
 flag:boolean;
 i:integer;
begin
 posit:=0
 flag:=false;
 for i:=2 to n do
  if (a[i-1]<=0 and a[i]>0) or (a[i-1]>=0 and a[i]<0) then 
   begin
    posit:=posit+1;
    if flag=false then begin flag:=true; a_l[posit]:=a[i-1];end;
    a_l[posit+1]:=a[i];
   end;
 posit:=posit+1;
end;

procedure output(var posit:integer; a_l:a_p);
var
 i:integer;
begin
 write('знак меняется 'posit' раз: ');
 for i:= 1 to posit do
 write(a_l[i], ',');
 Writeln;
 write('**нажмите любую клавишу');
 readln;
end;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 03.03.2009, 18:57   #7
world12_tk
Форумчанин
 
Регистрация: 24.02.2009
Сообщений: 269
По умолчанию

большое спасибо..... вы мне очень помогли
world12_tk вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
sscanf_s запутался со строкой форматирования Selebro Общие вопросы C/C++ 3 23.12.2008 09:06
одинаковый код в процедурах jungle Помощь студентам 7 26.11.2008 22:45
Поиск текста в Memo1- Я ваще запутался kugagach Помощь студентам 5 20.08.2008 22:55
MySQL - рекурсия в хранимых процедурах Банзай SQL, базы данных 0 12.08.2008 19:04
Материал о процедурах Jondeer Помощь студентам 18 04.12.2007 21:22