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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2010, 14:45   #1
lMasterl
 
Регистрация: 25.09.2010
Сообщений: 5
По умолчанию Pascal/ Найти сумму максимальных элементов 3ех массивов.

Ввод массивов реализовать с помощью процедуры, нахождение максимального элемента массива с помощью функции.
program Project2;

{$APPTYPE CONSOLE}

uses
SysUtils;
type mas=array[1..10] of Byte;
var
A,B,C:mas;
y:Integer;
i,m,n,k:Byte;

procedure vvod(l:Byte;D:mas);
var
i:byte;
begin
Writeln('vv dlinu massiva');
Readln(l);
Writeln('vv massiv');
for i:=1 to l do
readln(D[i]);
end;

function max(l:Byte;D:mas):Byte;
var
i:Byte;
mx:Byte;
begin
mx:=D[1];
for i:=2 to l do
if D[i]>mx then mx:=D[i];
max:=mx;
Writeln('mx=',mx);
end;

begin
//vvod(m,A);
Writeln('vv dlinu massiva');
Readln(m);
Writeln('vv massiv');
for i:=1 to m do
readln(A[i]);
vvod(n,B);
vvod(k,C);
y:=max(m,A)+max(n,B)+max(k,C);
Writeln('y=',y);
Readln;
end.

При ручном вводе массива нормально находится его максимальный элемент, а при вводе через процедуру нет. Помогите, пожалуйста, найти, в чем я ошибся.
lMasterl вне форума Ответить с цитированием
Старый 25.09.2010, 15:20   #2
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

В процедуре ввода массива объяви массив как параметр-переменную, т.е. Var D:mas
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 25.09.2010, 15:39   #3
lMasterl
 
Регистрация: 25.09.2010
Сообщений: 5
По умолчанию

А как именно?
Если пробую так:
procedure vvod(l:Byte;D:mas);
var
D:mas;
i:byte;
то получается повторное объявление, а если так:
procedure vvod(l:Byte);
var
D:mas;
i:byte;
то выдает ошибку при обращении к процедуре.
lMasterl вне форума Ответить с цитированием
Старый 25.09.2010, 15:51   #4
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Вот это
Код:
procedure vvod(l:Byte;D:mas);
напиши вот так
Код:
procedure vvod(l:Byte; var D:mas);
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 25.09.2010, 15:53   #5
lMasterl
 
Регистрация: 25.09.2010
Сообщений: 5
По умолчанию

Теперь работает, спасибо.
lMasterl вне форума Ответить с цитированием
Старый 26.09.2010, 13:27   #6
lMasterl
 
Регистрация: 25.09.2010
Сообщений: 5
По умолчанию

В продолжение к этой задаче: теперь нужно поместить функцию и процедуру в модуль, а вызывать их из главной программы. По идее должно быть как-то так:

UNIT vvod;

INTERFACE
type mas=array[1..10] of Byte;
procedure vv(var l:Byte;var D:mas);
function max(l:Byte;D:mas):Byte;

IMPLEMENTATION
procedure vv;
var
i:byte;
begin
Writeln('vipolnenie proceduri');
Writeln('vv dlinu massiva');
Readln(l);
Writeln('vv massiv');
for i:=1 to l do
readln(D[i]);
end;

function max;
var
i:Byte;
mx:Byte;
begin
Writeln('vipolnenie funkcii');
for i:=1 to l do
write(' ',D[i]);
mx:=D[1];
for i:=1 to l do
if D[i]>mx then mx:=D[i];
max:=mx;
Writeln(' mx=',mx);
end;

BEGIN
END.

Но, очевидно, я опять делаю что-то не так и при обращении в главной программе:

program Project2;

{$APPTYPE CONSOLE}

uses
vvod;

type mas=array[1..10] of Byte;
var
A,B,C:mas;
y:Integer;
m,n,k:Byte;


begin
vv(m,A);
vv(n,B);
vv(k,C);
y:=max(m,A)+max(n,B)+max(k,C);
Writeln('y=',y);
Readln;
end.

выдает ошибки. Если кто-то может, помогите, пожалуйста, разобраться.
lMasterl вне форума Ответить с цитированием
Старый 26.09.2010, 14:37   #7
savva
Форумчанин
 
Регистрация: 10.06.2010
Сообщений: 225
По умолчанию

какие ошибки расскажи

модуль нормально компилируется?
За помощь: Нажмите на весы слева от сообщения!
savva вне форума Ответить с цитированием
Старый 26.09.2010, 14:43   #8
lMasterl
 
Регистрация: 25.09.2010
Сообщений: 5
По умолчанию

Модуль компилируется нормально. При обращении к процедуре ввода выдает: "Types of actual and formal var parameters must be identical", а при обращении к функции нахождения макс элемента: "Incompatible types 'vvod.mas' and 'Project2.mas'".
lMasterl вне форума Ответить с цитированием
Старый 26.09.2010, 17:30   #9
T(h)rasher
Пользователь
 
Аватар для T(h)rasher
 
Регистрация: 24.09.2010
Сообщений: 46
По умолчанию

У вас происходит несоответсвие типов между модулем и главной прогой. Видимо, где-то не правильно указаны типы параметров(в модуле или в главной проге) или передача параметров не верно работает, поэтому один тип не состыкуется с другим.
"...Before you accuse me take a look at yourself..."
T(h)rasher вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Pascal] найти сумму элементов лежащих ниже побочной диагонали Рамик Помощь студентам 12 28.03.2011 22:53
Pascal - Найти сумму всех ее отрицательных элементов и заменить ею все диагональные элементы этой матрицы NewBi Паскаль, Turbo Pascal, PascalABC.NET 2 24.04.2010 09:15
Паскаль-Найти сумму максимальных элементов строк матрицы tanyhaftv Помощь студентам 9 24.03.2010 16:03
В матрице упорядочить строки по возрастанию максимальных элементов. Помогите найти ошибку. amerhant Помощь студентам 3 16.01.2010 19:39
Сумма максимальных элементов матриц в Pascal Бармалей Помощь студентам 19 19.11.2009 15:59