Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 13.01.2012, 21:55   #1 (permalink)
Severina
Вечная ученица
 
Регистрация: 27.06.2011
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Программа в паскале, помогите, пожалуйста, исправить программу

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

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

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

Думаю, что надо использовать 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.
Severina вне форума   Ответить с цитированием

Старый 13.01.2012, 21:55
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Скорее всего в схожих темах вы найдете много полезной информации

Помогите составить программу на Паскале
Помогите исправить программу С#

Старый 13.01.2012, 22:12   #2 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,794
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

В процедуре VVOD вместо цикла for используйте цикл repeat...until, в качестве условия для продолжения используйте кодовую фразу, например, после ввода компании спросите, желаете ли вы продолжить ввод, если не желаете, нажмите N и Enter, символ считайте в переменную, а в until условием пропишите эту переменную не равную 'N'.
И еще, константе присвойте заведомо большое значение, дабы не пришлось переопределять массив как динамический. Ну, или сразу определите массив динамическим, так вы получите возможность в режиме реального времени выделять под него память по мере ввода элементов.
AlexZir вне форума   Ответить с цитированием
Старый 13.01.2012, 22:17   #3 (permalink)
Severina
Вечная ученица
 
Регистрация: 27.06.2011
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

а если у меня нельзя использовать кодовую фразу?
т.е. просто дан файл с записями, в котором n авиакомпаний, и надо их все вывести как есть в файл результата
Severina вне форума   Ответить с цитированием
Старый 13.01.2012, 22:26   #4 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,794
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

n в начале файла хранится? Если нужна работа с файлом, то используйте цикл while not eof(FI) do... С таким условием считывание записей из файла будет осуществляться пока не будет прочитан признак конца файла EOF(FI)
AlexZir вне форума   Ответить с цитированием
Старый 13.01.2012, 22:32   #5 (permalink)
Severina
Вечная ученица
 
Регистрация: 27.06.2011
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

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

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

Sibir Sentralnii 3000 2 9
Lux Novii 3456 6 99

и т.д
Severina вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 13.01.2012, 22:35   #6 (permalink)
Severina
Вечная ученица
 
Регистрация: 27.06.2011
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

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

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

опять запись с фиксированным кол-вом эл-ов
и снова требуемая с неизв-ым кол-вом эл-ов
Severina вне форума   Ответить с цитированием
Старый 13.01.2012, 22:37   #7 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,794
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Могу порекомендовать вам только использовать динамические массивы, или писать напрямую из входного файла в выходной без промежуточного хранения в массиве, дабы не заморачиваться с динамическими структурами.
AlexZir вне форума   Ответить с цитированием
Старый 13.01.2012, 22:41   #8 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,794
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Количество элементов в записи должно быть фиксированным или не превышать максимально допустимого (меньше можно, больше - ни-ни!). Обычно файлы формируются с учетом требования к структуре, чтобы не было ошибок чтения. Но если количество переменных будет различаться в каждой записи, то можно ввести дополнительный цикл чтения до конца строки (EOL(FI)), причем несчитанные значения должны трактоваться как нулевые. Следовательно, перед циклом чтения переменные нужно обнулять.
AlexZir вне форума   Ответить с цитированием
Старый 13.01.2012, 22:42   #9 (permalink)
Severina
Вечная ученица
 
Регистрация: 27.06.2011
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

т.е. я не проверяю на конец файла, а каждый раз смотрю на конец строки?
Severina вне форума   Ответить с цитированием
Старый 13.01.2012, 22:46   #10 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,794
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Конец файла тоже проверять надо
AlexZir вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




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

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.