Простите за беспокойство но у меня проблема, которую не могу решить.
И так нам в универе тему Record почти не объясняли, так как учитель заболел. И за месяц у нас была только одна пара( и то замещали) на которой другой учитель написал две задачки на доске как пример и все- одним словом тему нам не объясняли. А по практике уже требуют что бы я сдал задачку. Помогите пожалуйста с задачей
Вот собственно и она:
Даны сведения о расходе топлива на автобазах города :№ автобазы, количество израсходованного топлива, количество автомашин на базе. Подсчитать средний расход топлива на одну автомашину на каждой базу и в целом городе. Результат оформить в виде таблицы.
Пожалуйста можете помочь решить задачку и растолковать тупому =), что бы следующую задачу сам смог бы решить =)
З.ы. Вроде по форуму искал но похожей задачки не нашел. Лазил в FAQ и нашел только это http://forum.pascal.net.ru/index.php?showtopic=9198, почитал , но пока что мало что понял.
у меня получилось как-то так:
type
data = ^node;
node = record
number, gas, num : integer;
next : data;
end;
procedure init(var p: data);
var
p_new, tail: data;
i, n : integer;
begin
tail := nil;
write('Введите количество баз: '); readln(n);
for i:=1 to n do begin
writeln('База# ', i);
new(p_new);
p_new^.next := nil;
p_new^.number := i;
write('Введите количество израсходованного топлива: '); readln(p_new^.gas);
write('Введите количество автомашин на базе: '); readln(p_new^.num);
if tail = nil then p := p_new else tail^.next := p_new;
tail := p_new;
writeln;
end;
writeln;
end; { init }
procedure free(var p: data);
var p_old: data;
begin
while p <> nil do begin
p_old := p;
p := p^.next;
dispose(p_old);
end;
end; { free }
procedure print(p: data);
function my_div(const k,l : longint):real;
begin
if l<>0 then my_div:= k/l else my_div:=0;
end; { my_div }
var
sum_gas, sum_num : longint;
begin
sum_num:=0;
sum_gas:=0;
if p<>nil then writeln(' # ', 'машин', ' исп. ', ' средн.');
while p <> nil do begin
sum_num:= sum_num+ p^.num;
sum_gas:= sum_gas+ p^.gas;
writeln(p^.number:3, p^.num:5, p^.gas:5, my_div(p^.gas, p^.num):7:2);
p := p^.next;
end;
writeln;
writeln('Средний разход: ', my_div(sum_gas,sum_num):7:2);
end; { print }
var list : data;
begin
init(list);
print(list);
free(list);
end.
Ну вот структура твоей записи, на сколько я понял:
const n=100;
...
Спасибо вам большое добрые люди. Щаз буду разбираться =). Если что готовьтесь буду задавать вопросы =)
ЕЩЕ РАЗ ОГРОМНОЕ СПАСИБО
Добавлено через 17 мин.
Че то я вообще почти не че не понимаю =) . Что ето означает data = ^node; ? А именно значок ^ - она везде но не могу понять для чего =) Вот щас читаю в FAQ http://forum.pascal.net.ru/index.php?showtopic=2706 однако мало что доходит =) .
Что дает функция nil ? ?
Ну я тут попроще сделал нежели compiler, но все равно работает.
Вот код:
Program sclad;
Type
Baza = record
AvtoBaz:string[20];
Avto:integer;
Toplivo:integer;
end;
Var
r:real;
i,n:integer;
Gorod:string[20];
tbl:array[1..25] of Baza;
Begin
Writeln('Город:');
Read(gorod);
Writeln('Число автобаз');
read(n);
For i:=1 to N do
With tbl[i] do
Begin
Writeln('название автобазы');
Read(AvtoBaz);
Writeln('количество машин');
Read(Avto);
Writeln('количество топлива');
Read(Toplivo);
end;
Writeln('*****************************************');
writeln('* ',gorod,' *');
Writeln('*****************************************');
For i:=1 to N do
With tbl[i] do
Begin
Writeln('*',i,'*',AvtoBaz,'*',Avto,'*',Toplivo,'*');
end;
Writeln('*****************************************');
Writeln('Средний расход топлива на 1 машину составляет');
For i:=1 to n do
With tbl[i] do
writeln(avtobaz,' = ', toplivo/avto);
Writeln('Средний расход топлива по городу');
r:=0;
For i:=1 to n do
With tbl[i] do
r:=toplivo+r;
Writeln('расход=',r);
End.
dream-x . Спасибо большое это понятнее намного.
Люди спасибо за проделанный труд , мне аж стыдно что отнял у вас время =)
type
data = ^node; // ип data это указатель на тип записи node (точнее на ячейку памяти где лежит node)
node = record
number, gas, num : integer;
next : data; // тож самое
end;
...
var
p_new, tail: data; // указатели на на тип записи node
i, n : integer;
while p <> nil do begin//пока указатель p ссылается на что то (пока не конец состава)
действия с записью на которую ссылается указатель допустим writeln()(разбмваем стекла или чиним скамейки)
p := p^.next ;// переходим к следующей записи(переход в след. вагон)
end ;