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

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

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

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

Индекс находился вне границ масива

denis199

Ученик
Регистрация
31 Янв 2015
Сообщения
2
Реакции
0
Баллы
0
Индекс находился вне границ масива

помогите исправить программу вот задание
1. Описать запись с именем WORKER, содержащую следующие поля:
фамилия и инициалы работника;
название занимаемой должности;
год поступления на работу.
2. Написать программу, выполняющую следующие действия:
ввод с клавиатуры данных в массив, состоящий из десяти записей типа WORKER;
вывод на дисплей фамилий работников, чей стаж работы в организации превышает значение, введенное с клавиатуры; если таких работников нет, вывести на дисплей соответствующее сообщение.
вот код
program prim;
uses crt;
type
WORKER=record
FIO:string [50];
title:string [50] ;
God:integer;
end;
var
WorkerArray:Array [1..100] of WORKER;
otv:0..3;
kol,i:0..100;
vvod_:0..1;
Procedure vvod;
begin
i:=0;
Writeln ('Формирование массива ');
Writeln ('____________________________________________');
repeat
i:=i+1;
clrscr;
Writeln ('Введите данные-',i,' -о работниках');
Write (' ФИО ? ');
Readln (WorkerArray.FIO);
Write (' название занимаемой должности; ? ');
Readln (WorkerArray.title);
Write (' год поступления на работу. ? ');
Readln (WorkerArray.God);
Writeln ('_________________________________');
Writeln ('Исчерпан список ввода-0 нет-1');
Readln (otv);
Until otv=0;
kol:=i; vvod_:=1;
end;

Procedure vivod;
var
otv:1..3;
fio:String [30];
c,title:real;
god,k,i:integer;

vivod_:0..1;
mas: array[1..200] of WORKER ;

begin
clrscr; vivod_:=0;
Writeln ('Введите данные для вывода информации');
Writeln ('------------------');
Write ('ФИО ');
Readln (mas.fio);
Write ('Введите сегодняшний год');
Readln (mas.god);
for i:=1 to kol do
if WorkerArray.FIO<>mas.fio then
Writeln ('Пользователь не найден')
else begin
if WorkerArray.FIO=mas.fio then
c:=mas.God-WorkerArray.God;
end;


begin

Writeln ('---------------------------------------');
writeln(WorkerArray.FIO,c);
k:=i+1;
end;


if k=0 then
begin
clrscr;
writeln('Стаж всех работников меньше заданого.');
end;
readln;

end;

begin
vvod_:=0;
repeat
clrscr;
Writeln ('Введите Вариант работы с программой');
Writeln ('--------------------------');
Writeln ('Формирование массива сведений о работниках -1');
Writeln ('Поиск и вывод информации -2');
Writeln ('Закончить работу с программой -3');
Writeln ('---------------------------------------');
readln (otv);
case otv of
1:vvod;
2: if vvod_=0 then begin Vvod; vivod;end else vivod;
3:exit;
end;
until false;

end.
 
В общем, так. После исправления кучи всяко-разных нелепостей, наворота ненужных действий (и, в то же время, отсутствия нужных), замены непонятно на кой ляд навтыканных диапазонов простыми переменными и всего такого прочего, у меня получилась вот такая действующая и полностью отлаженная программка:
Код:
program prim;
uses crt;
type
 WORKER=record
         FIO:string [50];
         title:string [50] ;
         God:Word;
        end;

var
 WorkerArray:Array [1..10] of WORKER;
 otv,kol,i,vvod_:Byte;
 Tek_god:Word;

Procedure vvod;
begin
 clrscr;
 i:=0;
 Writeln ('Формирование массива ');
 Writeln ('____________________________________________');
 Writeln ('Введите данные о работниках:');
 repeat
  i:=i+1;
  Write (i:2,' ФИО? ');
  Readln (WorkerArray[i].FIO);
  Write (' Название занимаемой должности? ');
  Readln (WorkerArray[i].title);
  Write (' Год поступления на работу? ');
  Readln (WorkerArray[i].God);
  Writeln ('_________________________________');
  Write('Исчерпан список ввода? да-0, нет-1 ');
  Readln(otv);
 until (otv=0) or (i=10);
 kol:=i;
 vvod_:=1;
end;

Procedure vivod;
var
 Stazh:Word;
 B:boolean;
begin
 clrscr;
 Writeln ('Введите данные для вывода информации');
 Writeln ('------------------');
 Write('Введите минимальный стаж: ');
 Readln(Stazh);
 B:=true;
 for i:=1 to kol do
  if Tek_god-WorkerArray[i].God>=Stazh then
   begin
    B:=false;
    Writeln(WorkerArray[i].FIO);
   end;
 If B then writeln('Стаж всех работников меньше заданного.');
 Writeln;
end;

Begin
 vvod_:=0;
 clrscr;
 Write('Введите сегодняшний год: ');
 Readln(Tek_god);
 Writeln;
 repeat
  Writeln ('Введите Вариант работы с программой:');
  Writeln ('--------------------------');
  Writeln ('Формирование массива сведений о работниках - 1');
  Writeln ('Поиск и вывод информации - 2');
  Writeln ('Закончить работу с программой - 3');
  Writeln ('---------------------------------------');
  readln (otv);
  case otv of
   1: vvod;
   2: if vvod_=0 then begin Vvod; vivod; end else vivod;
   3: exit;
  end;
 until false;
End.
 
cпасибо большое
 
Назад
Сверху