31.01.2015, 23:12 | #1 (permalink) |
Новичок
Регистрация: 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. |
31.01.2015, 23:12 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Может быть на нашем форуме проблема уже решена, попробуйте посмотреть в похожих темах Индекс производительности вашего ПК Индекс производительности на acer aspire 5310 |
01.02.2015, 09:58 | #2 (permalink) |
Специалист
Регистрация: 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. |
01.02.2015, 11:01 | #3 (permalink) |
Новичок
Регистрация: 31.01.2015
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
cпасибо большое
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|