singlepost

Pascal (запись с вариантами) << На главную или назад  

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

вот кусок
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':
выдаёт ошибку(

чё я неправильно написал?

66 ответов в теме “Pascal (запись с вариантами)”

  1. 11
    Сергей Владимирович ответил:

    вот доделал прогу, и опять косяк=)

    код проги

    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. 10
    Петр Полежаев ответил:

    Запись с вариантами позволяет компактно хранить в одной и той же области памяти данные с различной структуорй и/или интерпретировать этой область по-разному, например, как один long или 4 char-а (для x86-32).
    Ну, имхо, лучше пользоваться ООП.

  3. 9
    Дмитрий Бородин ответил:

    ух ты!

  4. 8
    Леонид Максимов ответил:

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

  5. 7
    Дмитрий Бородин ответил:

    чем именно? я ведь могу искать по какому то полю и через массив. выбираю поле, ввожу значение, он запускает цикл и перебирает все значения, запоминает найденные номера , соответствующие этим значениям и выводит элементы массива под этим номером. а в записи чем быстрее будет?

  6. 6
    Сергей Владимирович ответил:

    потомучто запись удобней!

  7. 5
    Дмитрий Бородин ответил:

    кстати, почему такие вещи не делают просто через двумерный массив или несколько массивов, почему используют " запись"?

  8. 4
    Петр Полежаев ответил:

    Давно не писал на паскале. Но насколько помню:
    1. записть с вариантами пишется только через case of, никаких if-ов там нельзя вставлять.
    2. сами варианты ('gor', 'inogor') должны быть порядкового типа, к коим строки не относятя.

    Поэтому тебе лучше объявить тип перечисления (он порядкового типа и это наиболее разумно с точки зрения качества кода) и использовать его значения в записи с вариантами.

  9. 3
    Олег Седанов ответил:

    По-моему, конструкция case…of со стрингами не работает. Разумнее переписать через if.

  10. 2
    Сергей Владимирович ответил:

    'gor':
    ———
    мол типы не совпадают…

  11. 1
    Жека Кирпичев ответил:

    Ты неправильно написал вопрос к сообществу, поскольку не указал, какую именно ошибку тебе выдает компилятор, и в какой строке.

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.