IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Задача на записи, Составить таблицу . Хелп
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 70
Пол: Мужской
Реальное имя: Мартын

Репутация: -  1  +


Простите за беспокойство но у меня проблема, которую не могу решить.
И так нам в универе тему Record почти не объясняли, так как учитель заболел. И за месяц у нас была только одна пара( и то замещали) на которой другой учитель написал две задачки на доске как пример и все- одним словом тему нам не объясняли. А по практике уже требуют что бы я сдал задачку. Помогите пожалуйста с задачей

Вот собственно и она:
Даны сведения о расходе топлива на автобазах города :№ автобазы, количество израсходованного топлива, количество автомашин на базе. Подсчитать средний расход топлива на одну автомашину на каждой базу и в целом городе. Результат оформить в виде таблицы.

Пожалуйста можете помочь решить задачку и растолковать тупому =), что бы следующую задачу сам смог бы решить =)

З.ы. Вроде по форуму искал но похожей задачки не нашел. Лазил в FAQ и нашел только это Записи. Record., почитал , но пока что мало что понял.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Человек
*****

Группа: Пользователи
Сообщений: 1 050
Пол: Мужской
Реальное имя: Станислав

Репутация: -  3  +


у меня получилось как-то так:


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.

таблицу украшай сам как знаешь)

Сообщение отредактировано: compiler -


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 100
Пол: Мужской

Репутация: -  0  +


Ну вот структура твоей записи, на сколько я понял:

Код

const n=100;            {Пусть будет 100 баз в городе}

Type
    TAutoBase=record        {Запись одной автобазы}
        nuber: integer;    {Номер автобазы}
        topl: real;        {Кол-во израсходованного топлива на всю базу, как я понял}
        AutoNum: integer    {Кол-во машин}
        SrednRash: real;    {Средний расход топлива на этой базе}
    end;
    
    AutoBases: array [1..n] of TAutoBase;    {Массив баз в городе}


compiler, я думаю если sintanial не понимает записи, то врятли он понимает динамические переменные... Наверно лучше пока без них обойтись
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
const n=100;
...
А у него в городе 102 базы... Ну, вот такой мегаполис... И все? Меняем исходники?

Никогда не выделяй память "с запасом", я это уже говорил, и хотя это некоторым не нравится, я буду и дальше повторять... Организовать список или дин. массив ненамного сложнее, но зато ты не будешь иметь проблем с недостатком кем-то выделенного количества памяти...

Цитата
если sintanial не понимает записи, то врятли он понимает динамические переменные
Чем раньше он начнет работать с динамикой, тем лучше.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Пионер
**

Группа: Пользователи
Сообщений: 70
Пол: Мужской
Реальное имя: Мартын

Репутация: -  1  +


Спасибо вам большое добрые люди. Щаз буду разбираться =). Если что готовьтесь буду задавать вопросы =)
ЕЩЕ РАЗ ОГРОМНОЕ СПАСИБО

Добавлено через 17 мин.
Че то я вообще почти не че не понимаю =) . Что ето означает data = ^node; ? А именно значок ^ - она везде но не могу понять для чего =) Вот щас читаю в FAQ Все о динамических структурах данных однако мало что доходит =) .
Что дает функция nil ? ?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Пионер
**

Группа: Пользователи
Сообщений: 64
Пол: Мужской
Реальное имя: Макс

Репутация: -  1  +


Ну я тут попроще сделал нежели 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.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Пионер
**

Группа: Пользователи
Сообщений: 70
Пол: Мужской
Реальное имя: Мартын

Репутация: -  1  +


dream-x . Спасибо большое это понятнее намного.
Люди спасибо за проделанный труд , мне аж стыдно что отнял у вас время =)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


поиск
****

Группа: Пользователи
Сообщений: 347
Пол: Мужской
Реальное имя: nir

Репутация: -  2  +



type
data = ^node; // ип data это указатель на тип записи node (точнее на ячейку памяти где лежит node)
node = record
number, gas, num : integer;
next : data; // тож самое
end;
...
var
p_new, tail: data; // указатели на на тип записи node
i, n : integer;


Представь вагоны smile.gif : сцепка это указатель (next : data;) на следующий вагон.
Мы знаем как попасть на 1 вагон. Что бы перейти во 2 вагон нпм надо взять из первого вагона указатель
на следующий и перейти на него. В 3 : сделать это 2 раза(поасть в 1 вагон из НЕГО в 2 из 2 в 3).

while p <> nil do begin//пока указатель p ссылается на что то (пока не конец состава)
действия с записью на которую ссылается указатель допустим writeln()(разбмваем стекла или чиним скамейки)
p := p^.next ;// переходим к следующей записи(переход в след. вагон)
end ;


Точнее мы работаем с памятью где запись лежит те с записью.
Здесь могут быть некие не точности с формулировкой и понятиями : память и запись, но в целом
динамические структуры мощьный инструмент с которым удобно работать.
Лично я когда читал про них представлял их так, может тебе это поможет, после поймешь, что они есть добро.
ps
Глупый пример, но перенос сложных вещей на простые примеры помагает моему мозгу не рухнуть в рутину.


--------------------
typedef void Śūnyatā ;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Пионер
**

Группа: Пользователи
Сообщений: 100
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 15.05.2008 16:40) *

А у него в городе 102 базы... Ну, вот такой мегаполис... И все? Меняем исходники?

Никогда не выделяй память "с запасом", я это уже говорил, и хотя это некоторым не нравится, я буду и дальше повторять... Организовать список или дин. массив ненамного сложнее, но зато ты не будешь иметь проблем с недостатком кем-то выделенного количества памяти...

Чем раньше он начнет работать с динамикой, тем лучше.


Согласен, я бы тоже с динамикой сделал... но не надо запрыгивать вперед, если еще не знаешь основ... Кстати, я оказался прав, он не понял твой код
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Человек
*****

Группа: Пользователи
Сообщений: 1 050
Пол: Мужской
Реальное имя: Станислав

Репутация: -  3  +


Цитата(kosyak @ 15.05.2008 17:47) *
Согласен, я бы тоже с динамикой сделал... но не надо запрыгивать вперед, если еще не знаешь основ... Кстати, я оказался прав, он не понял твой код
первое, не надо отождествлять меня и volvo, ты к кому обращаешься?
второе, а если бы он знал списки? что тогда? это точно такие основы как и записи, имхо.
а потом если не разбирать неизвестный код, то некогда ничего не понять, опять имхо.
но это еще не все - этот код может понадобится другим, желающим учится.


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Пионер
**

Группа: Пользователи
Сообщений: 100
Пол: Мужской

Репутация: -  0  +


Цитата(compiler @ 15.05.2008 19:13) *

первое, не надо отождествлять меня и volvo, ты к кому обращаешься?
второе, а если бы он знал списки? что тогда? это точно такие основы как и записи, имхо.
а потом если не разбирать неизвестный код, то некогда ничего не понять, опять имхо.
но это еще не все - этот код может понадобится другим, желающим учится.


Извини, ошибся...
Я просто не знаю способов создать список не используя записи... и вроде везде проходят сначала записи, а потом и динамические структуры(ИМХО)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Человек
*****

Группа: Пользователи
Сообщений: 1 050
Пол: Мужской
Реальное имя: Станислав

Репутация: -  3  +


Цитата(kosyak @ 15.05.2008 18:32) *
и вроде везде проходят сначала записи, а потом и динамические структуры(ИМХО)
я не знаю как "везде", я никогда специально задачи на структуры не решал, а с динамическими массивами познакомился довольно рано...


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Пионер
**

Группа: Пользователи
Сообщений: 100
Пол: Мужской

Репутация: -  0  +


Цитата(compiler @ 15.05.2008 20:43) *

я не знаю как "везде", я никогда специально задачи на структуры не решал, а с динамическими массивами познакомился довольно рано...


И ты их без записей делал?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Человек
*****

Группа: Пользователи
Сообщений: 1 050
Пол: Мужской
Реальное имя: Станислав

Репутация: -  3  +


Цитата(kosyak @ 15.05.2008 19:45) *
И ты их без записей делал?
сначала, мне было достаточно готовых модулей, а потом я открыл для себя FPC, где всё уже реализовано... знание записей пришло как-то само)


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 26.11.2020 11:43
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name