singlepost

Pascal (оператор присоединения WITH) << На главную или назад  

program rec_slozh_struk;
uses crt;
type student=record
fam,fak:string[25];
kurs:integer;
ocenka:array[1..4] of integer end;

var vedom:array[1..50] of student;
i,j,k,:integer;

Begin clrscr;
writeln('vvedite kol-vo studentov');
readln(k);

for i:=1 to k do
with vedom[i] do begin
write('familia ');read(fam);
write('kurs ');read(kurs);
write('fakultet ');read(fak);
for j:=1 to 4 do begin
writeln(j,' ocenka ');read(ocenka[j]);
end;
end;

readln;
End.

почему не вводится факультет?
на экране сразу появляется "'fakultet1 ocenka"
а при вводе данных о втором студенте сразу"familia kurs"
PS если задать fak:integer то факультет нормально вводится….

31 ответов в теме “Pascal (оператор присоединения WITH)”

  1. 19
    Антон Щиров ответил:

    Вообще мой вам совет – стараться использовать оператор with как можно меньше и многократно перед этим подуав

  2. 18
    Леночка Салахутдинова ответил:

    я нашла ошибку – неправильное обращение к записи

  3. 17
    Роман Еннер ответил:

    ошибки нет
    только вот этот код :
    Begin
    for i:=1 to N do
    if davlenie>140
    then
    writeln(‘Spisok pacientov – gypertonycov, kotorye imeut povyshennoe davlenie:');
    for i:=1 to N do
    begin
    with massiv[i] do
    if davlenie>140
    then
    end;
    End;
    TextColor(red);
    end;
    ReadKey;
    End.

    УДАЛИ.
    после точки в паскале любой текст игнорируется

  4. 16
    Леночка Салахутдинова ответил:

    Добрый день!
    Препод сказал, что в проге ошибка. Помогите пожалуйста найти ее. Вот собственно задание:
    сформировать базу данных, которая будет содержать информацию о пациентах районной поликлиники (используя такие данные, как фамилия, имя, отчество, вес, рост, давление и др.), и в конечном итоге программа должна выдать всю информацию о тех людях, которые имеют повышенное давление (гипертоники).

    мой вариант проги:
    Program bolnitca_list;
    Uses crt;
    Type
    pacient=record
    Imya:string[10];
    Famil:string[15];
    Otch:string[15];
    Gorod:string[20];
    Ulica:string[20];
    Dom:string[5];
    Kvartira: integer;
    DD:integer;
    MM: integer;
    GG:integer;
    Rost: integer;
    Ves: integer;
    davlenie: integer;
    end;
    Var
    Massiv : array[1..50] of person;
    I, N : integer;
    Begin
    ClrScr;
    TextColor(9);
    write('Vvedite kolichestvo pacientov');
    readln(N);
    for i:=1 to N do
    begin
    with massiv[i] do
    begin {Создание списка пациентов районной больницы}
    write('Vvedite imya');
    readln(imya);
    write('Vvedite famil ');
    readln(famil);
    write('Vvedite ochestvo');
    readln(otch);
    write('Vvedite gorod');
    readln(gorod);
    write('Vvedite ulicy ');
    readln(ulica);
    write('Vvedite dom');
    readln(dom);
    write('Vvedite kvartiry');
    readln(kvartira);
    write('Vvedite datu rogdeniya');
    readln(DD);
    write('Vvedite mesyac rogdeniya ');
    readln(MM);
    write(' Vvedite god rogdeniya');
    readln(GG);
    write(' Vvedite rost');
    readln(rost);
    write(' Vvedite ves');
    readln(ves);
    write(' Vvedite davlenie');
    readln(davlenie);
    end;
    end;
    TextColor(red);
    writeln(‘Spisok pacientov – gypertonycov, kotorye imeut povyshennoe davlenie:');
    for i:=1 to N do
    begin
    with massiv[i] do
    if davlenie>140
    then
    begin
    writeln('Imya:', Imya);
    writeln('Famil:',famil);
    writeln('otch:',otch);
    writeln('gorod:',gorod);
    writeln('Ulica:',ulica);
    writeln('Dom:',dom);
    writeln('Kvartira:',kvartira);
    writeln(' Data_rojdeniya: ', DD );
    writeln(' Mesyac rojdeniya:', MM);
    writeln(‘god_rojdeniya:', GG);
    writeln (‘rost:’, rost);
    writeln(‘ves:’, ves);
    writeln(‘davlenie:’, davlenie);
    end;
    end;
    ReadKey;
    End.
    Begin
    for i:=1 to N do
    if davlenie>140
    then
    writeln(‘Spisok pacientov – gypertonycov, kotorye imeut povyshennoe davlenie:');
    for i:=1 to N do
    begin
    with massiv[i] do
    if davlenie>140
    then
    end;
    End;
    TextColor(red);
    end;
    ReadKey;
    End.

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

    я проги всегда стараюсь сам писать…
    т.е исходный код таков:

    Begin clrscr;
    writeln('vvedite kol-vo studentov');
    readln(k);
    d:=k;
    for i:=1 to k do
    {–}with vedom[i] do
    {—}begin
    {—–}writeln('familia ');readln(fam);
    {—–}writeln('kurs ');readln(kurs);
    {—–}writeln('fakultet ');readln(fak);
    {—–}for j:=1 to 4 do
    {——–}begin
    {———-}writeln(j,' ocenka ');readln(ocenka[j]);
    {———-}c:=c+ocenka[j];sb:=c/4;
    {——–}end;
    {—}end; {<——-}

    for i:=1 to k do
    {–}begin
    {—-}j:=1;
    {—-}while (j<=4)and (ocenka[j]>2)do inc(j);
    {—-}if j<=4 then writeln('fakultet – ',fak,' familia – ',fam);
    {–}end;
    end;ob:=(ob+sb)/d;
    writeln('srednii bal = ',ob:2:0);
    readln;
    End.

    ———————-
    но ведь этот
    {—}end; {<——-}
    закрывает оператор WITH
    и последущие действия не имеют смысла
    }begin
    {—-}j:=1;
    {—-}while (j<=4)and (ocenka[j]>2)do inc(j);
    {—-}if j<=4 then writeln('fakultet – ',fak,' familia – ',fam);
    {–}end;

    или я в чём то ошибся?

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

    а, всё один end лишний=)
    вот этот
    end; ob:=(ob+sb)/d;

    всем спасибо!!!
    Очень выручили!

  7. 13
    Валерий Волков ответил:

    пешите исчо

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

    обязательно)
    на выходных, когда новые задачи буду решать, мб появятся какие вопросы – сразу к вам =)

  9. 11
    Валерий Волков ответил:

    //c:=c+ocenka[j];sb:=c/4;end;
    c:=c+ocenka[j];sb:=c/4;end; END;

    //end; ob:=(ob+sb)/d;
    ob:=(ob+sb)/d;

  10. 10
    Валерий Волков ответил:

    С отступами правильно сказано…например можно операторные скобки
    begin – end переводить на следующую строку и добавлять 1-2 пробела или знак табуляции перед ними.

  11. 9
    Валерий Волков ответил:

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

  12. 8
    Валерий Волков ответил:

    следите за операторными скобками

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

    да я уже устал переставлять их…
    поэтому и обратился…

  14. 6
    Роман Еннер ответил:

    for i:=1 to k do
    {–}with vedom[i] do
    {—}begin
    {—–}writeln('familia ');readln(fam);
    {—–}writeln('kurs ');readln(kurs);
    {—–}writeln('fakultet ');readln(fak);
    {—–}for j:=1 to 4 do
    {——–}begin
    {———-}writeln(j,' ocenka ');readln(ocenka[j]);
    {———-}c:=c+ocenka[j];sb:=c/4;
    {——–}end;
    {—}end; {<——-}

    for i:=1 to k do
    {–}begin
    {—-}j:=1;
    {—-}while (j<=4)and (ocenka[j]>2)do inc(j);
    {—-}if j<=4 then writeln('fakultet – ',fak,' familia – ',fam);
    {–}end;

    Отступы расставляй иногда, тогда будешь видеть где нехватает end'а
    Удачи!

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

    ещё вопрос по этой задачке.
    вообщем мне из ведомости нужно вывести факультет и фамилии двоишников.

    program rec_slozh_struk;
    uses crt;
    type student=record
    fam,fak:string[25];
    kurs:integer;
    ocenka:array[1..4] of integer end;
    var vedom:array[1..50] of student;
    i,j,k,d,c:integer; sb,ob:real;
    Begin clrscr;
    writeln('vvedite kol-vo studentov');
    readln(k);
    d:=k;
    for i:=1 to k do
    with vedom[i] do begin
    writeln('familia ');readln(fam);
    writeln('kurs ');readln(kurs);
    writeln('fakultet ');readln(fak);
    for j:=1 to 4 do begin
    writeln(j,' ocenka ');readln(ocenka[j]);
    c:=c+ocenka[j];sb:=c/4;end;
    for j:=1 to 4 do
    if ocenka[j]=2 then
    writeln('fakultet – ',fak,' familia – ',fam);
    end;ob:=(ob+sb)/d;
    writeln('srednii bal = ',ob:2:0);
    readln;
    End.
    ——————————–
    беда в том, что прога выводит фак и фам, сразу после окончания набора даных для первого студента.

    как сделать так чтобы фак-ы и фам-ии выводились в конце?

  16. 4
    Антон Щиров ответил:

    А наверно на эти грабли все наступали

  17. 3
    Марат Сурмашев ответил:

    тож по началу с этой бодягой парился, пока не понял в чем дело )

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

    =)
    как всё просто)
    спасибо!

  19. 1
    Антон Щиров ответил:

    Заменить Read на Redln

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