Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 31.01.2015, 23:12   #1 (permalink)
denis199
Новичок
 
Регистрация: 31.01.2015
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Индекс находился вне границ масива

помогите исправить программу вот задание
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[i].FIO);
Write (' название занимаемой должности; ? ');
Readln (WorkerArray[i].title);
Write (' год поступления на работу. ? ');
Readln (WorkerArray[i].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[i].fio);
Write ('Введите сегодняшний год');
Readln (mas[i].god);
for i:=1 to kol do
if WorkerArray[i].FIO<>mas[i].fio then
Writeln ('Пользователь не найден')
else begin
if WorkerArray[i].FIO=mas[i].fio then
c:=mas[i].God-WorkerArray[i].God;
end;


begin

Writeln ('---------------------------------------');
writeln(WorkerArray[i].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.
denis199 вне форума   Ответить с цитированием

Старый 31.01.2015, 23:12
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Может быть на нашем форуме проблема уже решена, попробуйте посмотреть в похожих темах

Индекс производительности вашего ПК
Индекс производительности на acer aspire 5310

Старый 01.02.2015, 09:58   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

В общем, так. После исправления кучи всяко-разных нелепостей, наворота ненужных действий (и, в то же время, отсутствия нужных), замены непонятно на кой ляд навтыканных диапазонов простыми переменными и всего такого прочего, у меня получилась вот такая действующая и полностью отлаженная программка:
Код:
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.
Vladimir_S вне форума   Ответить с цитированием
Старый 01.02.2015, 11:01   #3 (permalink)
denis199
Новичок
 
Регистрация: 31.01.2015
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

cпасибо большое
denis199 вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 01:43.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.