Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача со списками.
Форум «Всё о Паскале» > 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
неужели никто не знает?!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.