• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о проекте и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Подскажите, чего не хватает в процедуре?

  • Автор темы Автор темы snakind
  • Дата начала Дата начала

snakind

Ученик
Регистрация
22 Май 2011
Сообщения
7
Реакции
0
Баллы
0
Подскажите, чего не хватает в процедуре?

Последняя процедура должна выводить наименьшую зарплату. Что-то никак не пойму где в ней что прописать, подскажите пожалуйста. Остальное всё работает корректно. Выкладываю всё что бы проще разобраться было


program RAbota;
const
N=3;
type
worker=record;
Name: String [30];
Salary:Integer;
Podrazdel: String [50];
Number: String [2];
end;
var
Org : array [1..N] of worker;
i,Min:Integer;


procedure Vvod (var S:Worker);
begin
writeln ('Введите ФИО');
readln (S.Name);
writeln ('№ подразделения');
readln (S.Podrazdel);
writeln ('Введите личный №');
readln (S.Number);
writeln ('Введите размер оклада');
readln (S.Salary);
end;

Procedure Vivod (S:Worker);
begin
writeln (S.Name, ':', S.Podrazdel, ':', S. Number, ':', S.Salary);
end;

procedure Abc(Org:Worker);
begin

Min:=Org.
for i:=1 to N do
if S.Salary<Min
then Min:=S.Salary;
writeln ('Минимальная зарплата =', Min);
end;

begin
For i:=1 to N do
Vvod (Org);
for i:=1 to N do
vivod (Org);
Abc (Worker)
end.
 
Ошибок - просто море.
1. Параметру процедуры Abc Вы зачем-то присваиваете имя глобальной переменной Org. Зачем?
2. В то же время внутри процедуры Вы пытаетесь манипулировать с переменной-записью S, для данной процедуры вовсе не определенной.
3. Изначальное значение переменной Min в виде Org. (и никакого поля!!!) - полнейшая нелепость.
4. В теле основной программы запись вида Abc (Worker) - тоже нечто невразумительное. Если по замыслу обращение к процедуре Abc входит в цикл по i, то:
а) процедуры vivod и Abc, составляющие тело цикла, должны быть заключены в операторные скобки begin end. Но этого не сделано.
б) Применение того же глобального счетчика (i) без переопределения в теле процедуры абсолютно недопустимо.
Если же обращение Abc (Worker) НЕ входит в глобальный цикл, то что тогда там такое i и зачем оно?
В общем так. Я бы это организовал как-нибудь в таком роде:
Код:
procedure Abc;
var j:Integer;
begin
 Min:=Org[1].Salary;
 for j:=2 to N do
  with Org[j] do
   if Salary<Min then Min:=Salary;
 writeln ('Минимальная зарплата = ', Min);
end;

begin
 For i:=1 to N do
  Vvod (Org[i]);
 for i:=1 to N do
  vivod (Org[i]);
 Abc;
 Readln
end.
 
Спасибо за помощь, но вы меня не совсем так поняли) в процедуре Abc имена параметру процедуры и прочил состовляющих я поставил от балды, тк отчался найти рабочую их комбинацию...

А за столь подробные обьяснения большое спасибо:tehnari_ru_203:
 
Назад
Сверху