Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача со списками.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Rom1k
Данные о соотрудниках содержат фамилию и оклад.Ввести данные с клавиатуры в список записей и вывести список для премирования на экран.премия=3 окладам.

Вот что я написал.Подскажите что не правильно что надо доделать?

program zapisi;
type
pData=^Tdata;
TData=record{Tip zapisi o slugawem}
name:string[20];{imya}
oklad:longint;{oklad}
next:pdata;{Указатель на следующий элемент списка}
end;

function readdata(var rec:TData):integer;
var
s:string;{stroka vvoda}
p:integer;{nomer pozicii v stroke}
okladS:string[10];{stroka,sodergawaya oklad}
Error:inTeger;{kod owibki pri preobrazovanii stroki v 4islo}
begin
readln(s);
if s='' then
readdata:=-1
else
begin
p:=pos(' ',s);
if p = 0 then
readdata:=1
else
begin
rec.name:=copy(s,1,p-1);
delete(s,1,p);
okladS:=copy(s,1,255);
val(okladS,rec.oklad,error);
if error <> 0 then
readdata:=1
else
readdata:=0
end;
end;
end;

Var
Head:Pdata;{ukazatel' na golovu spiska}
tail:Pdata;{ukazatel' na xvost spiska}
P:PData;{ukazatel' na o4erednoi element spiska}
readresult:integer;{rezul'tat vvoda zapisi}
n:integer;{4islo slugawix}
premiya:longint;
Begin

{Vvod spiska zapisei}
writeln('Введите фамилии служащих и через пробел их оклад ');
writeln('Для окончания введите пустую строку ');
{na4al'nie ustanovki}
head:=nil;{spisok pust}
tail:=nil;{spisok pust}
n:=0;
{cikl do tex por,poka ne budet vvedena pustaya stroka}
repeat
{Цикл до тех пор, пока очередная строка не будет введена правильно}
repeat
new(p);{создать новый элемент списка}
readresult:=readdata(p^);{Ввести данные с клавиатуры и записать в новый элемент списка}
if Readresult=0 then {Если запись введена без ошибок}
{Добавить элемент в конец списка}
begin
if head=nil then
head:=p;
if tail <> nil then
tail^.next:=p;
tail:=p;
p^.next:=nil;
n:=n+1;
end
else if readresult=1 then
writeln('Ошибка! Повторите!');

{Вывод фамилий соотрудников}
writeln('Результат: ');
p:=head;
while p<>nil do
begin
writeln(p^.NAME,' ',p^.OKLAD,' ',PREMIYA);
p:=p^.next;
end;
end.

volvo
Цитата
Подскажите что не правильно что надо доделать?
Оформить циклы (repeat/until в частности) как положено... У тебя сколько раз слово Repeat в программе встречается? Столько же раз должно упоминаться и слово until... Где эти упоминания?
Rom1k
И ещё!!! Я не понимаю,почему:

Изображение

Добавлено через 1 мин.
Цитата(volvo @ 11.04.2007 20:17) *

Оформить циклы (repeat/until в частности) как положено... У тебя сколько раз слово Repeat в программе встречается? Столько же раз должно упоминаться и слово until... Где эти упоминания?

я смотрел подобные программы и делал эту по образцу.там такого не встречалось!
volvo
Цитата
там такого не встречалось!
Да что ты? Был Repeat и не было Until? blink.gif Открой Help Паскаля, и посмотри, что говорится там...

Добавлено через 2 мин.
Цитата
И ещё!!! Я не понимаю,почему:
Где курсор установлен, может ты соизволишь сказать, или нам надо догадаться? Уж не на последней ли строке с End. ? Ну вот, я же говорил... Repeat открытый, не закрыт, и программа закончилась - что ты хочешь, чтоб сказал компилятор? Он прав... Error in statement, и ничего больше...
Rom1k
а ну всё.я нашёл все ошибки.можете удалять тему.спасибо за помощь!
Rom1k
а ещё вопрос.мне надо вывести элементы списка,расположенные в порядке возрастания оклада.то есть отсортировать? и как кста? помогите!

Добавлено через 16 мин.
помогите плизззззззззззззззззз!!!!!!!!!!!!!!!!!!!!!!
Айра
Цитата
то есть отсортировать? и как кста?

Да. Можно методом пузырька.
Rom1k
я понимаю,что можно,но когда я пытаюсь это сделать,то у меня не получается.напишите плиз сортировку для этой проги?или хотяб объясните,как?!

Добавлено через 10 мин.
блииииииинннннннннн.ну скажите,плиззззззззз!!!!!
мисс_граффити
может, покажешь, что у тебя не получается?
Rom1k
ну вот.я пишу

for i:=1 to n-1 do
for j:=1 to n-i do
if p^[i].okjad ......

но он сразу выписывает мне ошибку,а по другому,я не знаю,как делать((((
Rom1k
неужели никто не знает?!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.