Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Программа в паскале, помогите, пожалуйста, исправить программу (http://www.tehnari.ru/f41/t62548/)

Severina 13.01.2012 21:55

Программа в паскале, помогите, пожалуйста, исправить программу
 
Добрый вечер,
Не могу исправить код программы, точнее не могу понять, что мне надо сделать.

В задаче дан массив записей, со сведениями об авиакомпаниях (название авиакомпании, базовый аэропорт, количество перевозимых пассажиров в год, количество ВС, численность персонала). Надо ввести и вывести исходные данные.

У меня получается если известно количество авиакомпаний, а вот если не известно кол-во авиакомпаний, как тогда делать?

Думаю, что надо использовать while. Но вот как и куда его поставить - не знаю.
вот мой код для 10 авиакомпаний:
Цитата:

const n = 10;
type
avl = record
NAZ: string[12];
BAZ: string[10];
KPP : real;
KVS: real;
CHP: real;
end;

var
R: array[1..n] of avl;
FI,FR: text;
b:char;
i:byte;

procedure p;
begin
with R[i] do
writeln(FR, NAZ:12, b, BAZ:10, b, KPP, b, KVS, b, CHP);
end;

procedure VVOD;
begin
assign(FI, 'tt.dat');
reset(FI);
for i:=1 to n do with R[i] do
readln(FI, NAZ, b, BAZ, b, KPP, b, KVS, b,CHP);
end;
for i:=1 to n do p;
close(FI);
end;

begin
assign(FR, 'tt.res');
rewrite(FR);
VVOD;
close(FR);
end.

AlexZir 13.01.2012 22:12

В процедуре VVOD вместо цикла for используйте цикл repeat...until, в качестве условия для продолжения используйте кодовую фразу, например, после ввода компании спросите, желаете ли вы продолжить ввод, если не желаете, нажмите N и Enter, символ считайте в переменную, а в until условием пропишите эту переменную не равную 'N'.
И еще, константе присвойте заведомо большое значение, дабы не пришлось переопределять массив как динамический. Ну, или сразу определите массив динамическим, так вы получите возможность в режиме реального времени выделять под него память по мере ввода элементов.

Severina 13.01.2012 22:17

а если у меня нельзя использовать кодовую фразу?
т.е. просто дан файл с записями, в котором n авиакомпаний, и надо их все вывести как есть в файл результата

AlexZir 13.01.2012 22:26

n в начале файла хранится? Если нужна работа с файлом, то используйте цикл while not eof(FI) do... С таким условием считывание записей из файла будет осуществляться пока не будет прочитан признак конца файла EOF(FI)

Severina 13.01.2012 22:32

нет, n не храниться.

Текстовый файл с данными в виде:

Sibir Sentralnii 3000 2 9
Lux Novii 3456 6 99

и т.д

Severina 13.01.2012 22:35

про while not eof(FI) do..
поняла
а если записи будут разделяться другими?
например

идет первая запись( с фиксированным кол-вом элементов)
за ней требуемая ( где не изв кол-во эл-ов)

опять запись с фиксированным кол-вом эл-ов
и снова требуемая с неизв-ым кол-вом эл-ов

AlexZir 13.01.2012 22:37

Могу порекомендовать вам только использовать динамические массивы, или писать напрямую из входного файла в выходной без промежуточного хранения в массиве, дабы не заморачиваться с динамическими структурами.

AlexZir 13.01.2012 22:41

Количество элементов в записи должно быть фиксированным или не превышать максимально допустимого (меньше можно, больше - ни-ни!). Обычно файлы формируются с учетом требования к структуре, чтобы не было ошибок чтения. Но если количество переменных будет различаться в каждой записи, то можно ввести дополнительный цикл чтения до конца строки (EOL(FI)), причем несчитанные значения должны трактоваться как нулевые. Следовательно, перед циклом чтения переменные нужно обнулять.

Severina 13.01.2012 22:42

т.е. я не проверяю на конец файла, а каждый раз смотрю на конец строки?

AlexZir 13.01.2012 22:46

Конец файла тоже проверять надо :)


Часовой пояс GMT +4, время: 23:56.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.