• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Программа в паскале, помогите, пожалуйста, исправить программу

Severina

Вечная ученица
Регистрация
27 Июн 2011
Сообщения
29
Реакции
0
Баллы
0
Программа в паскале, помогите, пожалуйста, исправить программу

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

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

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

Думаю, что надо использовать 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 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 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.
 
В процедуре VVOD вместо цикла for используйте цикл repeat...until, в качестве условия для продолжения используйте кодовую фразу, например, после ввода компании спросите, желаете ли вы продолжить ввод, если не желаете, нажмите N и Enter, символ считайте в переменную, а в until условием пропишите эту переменную не равную 'N'.
И еще, константе присвойте заведомо большое значение, дабы не пришлось переопределять массив как динамический. Ну, или сразу определите массив динамическим, так вы получите возможность в режиме реального времени выделять под него память по мере ввода элементов.
 
а если у меня нельзя использовать кодовую фразу?
т.е. просто дан файл с записями, в котором n авиакомпаний, и надо их все вывести как есть в файл результата
 
n в начале файла хранится? Если нужна работа с файлом, то используйте цикл while not eof(FI) do... С таким условием считывание записей из файла будет осуществляться пока не будет прочитан признак конца файла EOF(FI)
 
нет, n не храниться.

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

Sibir Sentralnii 3000 2 9
Lux Novii 3456 6 99

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

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

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