сложней оказалось, чем я думал…
-) Описать, используя записи с вариантами, телефоную книгу, содержащую номера телефонов городских и иногородних абонементов, для которых указан ещё и код города…….
вот кусок
program zap_s_variantami;
uses crt;
type telbuk=record
nomer:array[1..100] of integer;
case abonement:string of
'gor':();
'inogor':(kod:integer);
end;
var a:array[1..100] of telbuk;
i,n:integer;
Begin
writeln('vvedite kol-vo nomerov'); readln(n);
for i:=1 to n do
with a[i] do begin
writeln('vvedite ',i,' nomer');
readln(nomer[i]);
writeln('gor ili inogor?');
case abonement[i] of
'gor':
…..
End.
case abonement[i] of
'gor':
выдаёт ошибку(
чё я неправильно написал?
5 июня 2008 в 15:00
вот доделал прогу, и опять косяк=)
код проги
program zap_s_variantami;
uses crt;
type telbuk=record
nomer,gorod:string[30];
case abonement:integer of
1:();
2:(kod:integer);
end;
var a:array[1..100] of telbuk;
i,n,k:integer;
Begin clrscr;textcolor(15);
writeln('vvedite kol-vo nomerov'); readln(n);
for i:=1 to n do begin
writeln('vvedite ',i,' nomer');
readln(a[i].nomer);
writeln('vvedite gorod prozhivanija');readln(a[i].gorod);
writeln('gorodskoi(1) ili inogorodnii(2)?');
readln(a[i].abonement);
case a[i].abonement of
1:;
2:readln(a[i].kod);
end;
if copy(a[i].nomer,1,2)='33' then
if a[i].gorod='moscow' then k:=k+1;
write('(kod)nomerIgorod');writeln;
for i:=1 to n do begin
writeln('(',a[i].kod:3,')',a[i].nomer:5,a[i].gorod:10);end;end;
writeln('kol-vo prozhiv v Moscow= ',k);
readln
End.
как сделать так, чтоб все необходимые данные он выводил в конце проги, а не после нахождение верного варианта?
2 июня 2008 в 7:02
Запись с вариантами позволяет компактно хранить в одной и той же области памяти данные с различной структуорй и/или интерпретировать этой область по-разному, например, как один long или 4 char-а (для x86-32).
Ну, имхо, лучше пользоваться ООП.
2 июня 2008 в 1:04
ух ты!
2 июня 2008 в 1:03
запись в паскале – это особый финт ушами: в зависимости от значения одного из мемберов может меняться тип другого мембера, на сколько я помню.
1 июня 2008 в 23:01
чем именно? я ведь могу искать по какому то полю и через массив. выбираю поле, ввожу значение, он запускает цикл и перебирает все значения, запоминает найденные номера , соответствующие этим значениям и выводит элементы массива под этим номером. а в записи чем быстрее будет?
1 июня 2008 в 22:02
потомучто запись удобней!
1 июня 2008 в 22:01
кстати, почему такие вещи не делают просто через двумерный массив или несколько массивов, почему используют " запись"?
1 июня 2008 в 21:01
Давно не писал на паскале. Но насколько помню:
1. записть с вариантами пишется только через case of, никаких if-ов там нельзя вставлять.
2. сами варианты ('gor', 'inogor') должны быть порядкового типа, к коим строки не относятя.
Поэтому тебе лучше объявить тип перечисления (он порядкового типа и это наиболее разумно с точки зрения качества кода) и использовать его значения в записи с вариантами.
1 июня 2008 в 20:05
По-моему, конструкция case…of со стрингами не работает. Разумнее переписать через if.
1 июня 2008 в 19:02
'gor':
———
мол типы не совпадают…
1 июня 2008 в 19:00
Ты неправильно написал вопрос к сообществу, поскольку не указал, какую именно ошибку тебе выдает компилятор, и в какой строке.