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

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

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

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

Структура: найти работника с возрастом, попадающим в заданный диапазон

Eklipsa12

Ученик
Регистрация
13 Фев 2018
Сообщения
3
Реакции
0
Баллы
0
Структура: найти работника с возрастом, попадающим в заданный диапазон

Запись с полями: ФИО работника; возраст; домашний адрес.
Найти работника с минимальным возрастом, попадающим в диапозон 20-30 лет.
Начало программы идет вот так:

Код:
Type 
rec=record 
FIO:string[30]; 
Vozr:integer; 
adress:string[30]; 
end; 
mas=array[1..10] of rec;
var
f: text;e1:integer;m:mas;

Procedure inp(var a:mas;var n:integer);{Процедура ввода} 
var i:integer; 
begin 
readln(n);
for i:=1 to n do 
begin 
readln(f,a[i].FIO); 
readln(f,a[i].Vozr); 
readln(f,a[i].adress);
end; 
end;  
Procedure ext(a:mas;n:integer); {Процедура вывода} 
var i:integer;
begin
for i:=1 to n do
begin
writeln(a[i].FIO);
writeln(a[i].Vozr);
writeln(a[i].adress);
end;
end;
Begin 
assign(f,'file.txt'); 
reset(f); 
inp(m,e1);
ext(m,e1);
end.
Самый главный вопрос как "Найти работника с минимальным возрастом, попадающим в диапозон 20-30 лет."
Посмотреть вложение file.txt
 
Начало программы идет вот так:
А продолжение (точнее, программа целиком) бежит вот этак:
Код:
Type
  rec=record
   FIO:string[30];
   Vozr:integer;
   adress:string[30];
  end;
 mas=array[1..10] of rec;

Var
 f:text;
 e1,j,Min_age,k:integer;
 m:mas;

Procedure inp(var a:mas;var n:integer);{Процедура ввода}
var i:integer;
begin
 i:=0;
 Repeat
  Inc(i);
  readln(f,a[i].FIO);
  readln(f,a[i].Vozr);
  readln(f,a[i].adress);
 Until EoF(f);
 n:=i;
end;

Begin
 assign(f,'file.txt');
 reset(f);
 inp(m,e1);
 close(f);
 Min_age:=100;
 for j:=1 to e1 do
  With m[j] do
   if (Vozr<Min_age) and (Vozr>=20) and (Vozr<=30) then
    begin
     k:=j;
     Min_Age:=Vozr;
    end;
 Writeln('Result:');
 Writeln(m[k].FIO);
 Writeln(m[k].Vozr);
 Writeln(m[k].adress);
 Readln
End.
 
Большое спасибо! Выручили! У меня к Вам просьба,не могли ли бы вы пожалуйста описать каждое действие,что оно значит? Хочу полностью разобраться в коде. Буду очень благодарен!
 
Большое спасибо! Выручили! У меня к Вам просьба,не могли ли бы вы пожалуйста описать каждое действие,что оно значит? Хочу полностью разобраться в коде. Буду очень благодарен!
Да пожалуйста!
Слегка подредактированная процедура inp считывает данные из файла и, кроме того, автоматически определяет количество участников, так что вводить этот параметр отдельно не нужно (счётчик увеличивается на 1 с каждым считыванием данных, пока файл не кончится).
Дальше самым стандартным образом ищем минимум возраста, правда, с наложением дополнительных рамок. Для этого сначала присваиваем искомому минимуму заведомо большее значение (100), потом прогоняем весь массив записей. Если возраст меньше минимального и находится в указанных рамках, то он становится минимальным и фиксируется (переменной k) номер этой записи.
Дальше выводятся все поля записи с номером k.
 
Владимир, день добрый. Не могли ли бы вы меня еще раз выручить, нужно сделать всё тоже самое, НО, на каждое действие должна быть своя процедура, т.е процедура входная (inp), процедура выхода(outp) и процедура поиска(find), и как написал выше, локальные переменные, буду Вам благодарен!
 
Назад
Сверху