Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Pascal, задача на записи (record)

19K
08 декабря 2006 года
t3rmin@1
10 / / 08.12.2006
Надо написать расписание автобусов.

Указание(lol :))) : скорость, расстояние и время связаны формулой v=s/t, где v - это средняя скорость, s - расстояние, t - время.

Данные берутся из файла data2.txt, в котором содержатся:
на первой строке - 4 целочисленные цифры:
1-ая цифра - количество остановок (не больше 100),
2-ая - средняя скорость автобуса в км/ч,
3-ья - время отправления из начального пункта в часах,
4-ая - то же самое, но в минутах.

следующие строки предоставляют инфо об остановках:
название остановки (не больше 15 символов) и расстояние между пунктами в км в целочисленном формате.

Например:

3 70 10 15
Chicago 10.27
Detroit 30
Boston 12.24

Например, расстояние между начальным пунктом и Chicago - 10.27 км, между Chicago и Detroit - 30 км и так далее.

Результат программа должна записать в файл result.txt в таком виде:

Chicago 10 hr. 48 min.
Detroit 11 hr. 34 min.
Boston 12 hr. 02 min.

Требования к программе:

1) данные и результат хранить в массиве(массивах) с элементами записи (type=record...end)
2) создать и использовать процедуру, считывающую данные в массив с элементами записи
3) создать и использовать процедуру для подсчётов
4) создать и использовать процедуру для записи результатов в файл
5) в программе использовать функцию, подсчитывающую время (в минутах), за которое автобус проезжает указанное расстояние:

function time (s,v:real):integer;
begin
time:=trunc(s/v*60);
end;

где s - расстояние, проеханное автобусом в км, v - средняя скорость автобуса км/ч


Пока что ничего не получается... :(
Самое трудное - считать из файла данные и в массив записать, дальше я уже справился бы...
3.2K
09 декабря 2006 года
Sania
186 / / 28.10.2006
 
Код:
Type TBusStop=record
 name:string[16];
 time:integer;// как со временем работать будешь, такой и тип
 fromPreviousStop:real;
 end;
 
var f:text;// Текстовый файл
a:array of TBusStop;


Как конкретно в Pascal читать не помню, но сводится к:
 
Код:
assign();
reset();
readln();
Разбиение строки на подстроки, задание размера массива и первого элемента(в первом хранится отправная точка, и его индекс 0)
for i:=1 to count do
begin
readln();
разбиение новой строки и запись в массив
end;
close();
19K
09 декабря 2006 года
t3rmin@1
10 / / 08.12.2006
Цитата: Sania
 
Код:
Type TBusStop=record
 name:string[16];
 time:integer;// как со временем работать будешь, такой и тип
 fromPreviousStop:real;
 end;
 
var f:text;// Текстовый файл
a:array of TBusStop;



Т.е. использовать файл с данными data2.txt как нетипизированный? Это, понятно, упрощает задачу считывания, но всё же не очень понятно, как присвоить название города из файла data2.txt полю NAME записи TBusStop , а расстояние из того же файла - полю fromPreviousBusStop?
:confused:

19K
10 декабря 2006 года
t3rmin@1
10 / / 08.12.2006
Вот, вроде написал процедуру для считывания из файла data.txt и записи
данных в массив с элементами записи(record)


Код:
program read;
 uses crt;
 type city=record
           name:string[15];
            rast:real;
           end;
 var ch:char;
      rast2:real;
      n:array [1..100] of city;
  place:city;
   f,f1:text;
   ii,i,number:byte;
 begin
  clrscr;
  assign(f,'data.txt');
  reset(f);
  readln(f,number);
   for i:=1 to number do
    begin
     for ii:=1 to 15 do
      begin
       read(f,ch);
       place.name[ii]:=ch;
       write(ch);
      end;
     readln(f,q); {и вот на этом месте пишет "Invalid numeric format"}
     place.rast:=rast2;
     with n do
      begin
       name:=place.name;
       pop:=place.pop;
       writeln(name);
       write(' ',rast);
       writeln;
      end;
    end;
   readln;
   end.


И ещё одна проблема:
не выводит поле NAME в теле оператора
 
Код:
with n do
 begin
writeln(name);


хотя считывает в операторе
 
Код:
for ii:=1 to 15 do
      begin
       read(f,ch);
       place.name[ii]:=ch;
      end;

верно, проверял вставляя после place.name:=ch
write(ch);
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог