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 то факультет нормально вводится….
1 июня 2008 в 14:03
Вообще мой вам совет – стараться использовать оператор with как можно меньше и многократно перед этим подуав
1 июня 2008 в 7:00
я нашла ошибку – неправильное обращение к записи
31 мая 2008 в 10:03
ошибки нет
только вот этот код :
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.
УДАЛИ.
после точки в паскале любой текст игнорируется
31 мая 2008 в 8:00
Добрый день!
Препод сказал, что в проге ошибка. Помогите пожалуйста найти ее. Вот собственно задание:
сформировать базу данных, которая будет содержать информацию о пациентах районной поликлиники (используя такие данные, как фамилия, имя, отчество, вес, рост, давление и др.), и в конечном итоге программа должна выдать всю информацию о тех людях, которые имеют повышенное давление (гипертоники).
мой вариант проги:
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.
30 мая 2008 в 0:02
я проги всегда стараюсь сам писать…
т.е исходный код таков:
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;
или я в чём то ошибся?
30 мая 2008 в 0:02
а, всё один end лишний=)
вот этот
end; ob:=(ob+sb)/d;
всем спасибо!!!
Очень выручили!
30 мая 2008 в 0:02
пешите исчо
30 мая 2008 в 0:02
обязательно)
на выходных, когда новые задачи буду решать, мб появятся какие вопросы – сразу к вам =)
30 мая 2008 в 0:01
//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;
30 мая 2008 в 0:01
С отступами правильно сказано…например можно операторные скобки
begin – end переводить на следующую строку и добавлять 1-2 пробела или знак табуляции перед ними.
30 мая 2008 в 0:01
это не только вырабатывает свой стиль оформления текстов программ, но и создает дополнительные удобства, такие как читабельность программы … по крайней мере тобой самим и…. возможность определения автора написания программы…сможешь отличить, что ты написал, а что не ты….
30 мая 2008 в 0:00
следите за операторными скобками
30 мая 2008 в 0:00
да я уже устал переставлять их…
поэтому и обратился…
30 мая 2008 в 0:00
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'а
Удачи!
29 мая 2008 в 23:00
ещё вопрос по этой задачке.
вообщем мне из ведомости нужно вывести факультет и фамилии двоишников.
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.
——————————–
беда в том, что прога выводит фак и фам, сразу после окончания набора даных для первого студента.
как сделать так чтобы фак-ы и фам-ии выводились в конце?
29 мая 2008 в 22:03
А наверно на эти грабли все наступали
29 мая 2008 в 22:00
тож по началу с этой бодягой парился, пока не понял в чем дело )
29 мая 2008 в 21:05
=)
как всё просто)
спасибо!
29 мая 2008 в 21:04
Заменить Read на Redln