Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/37: Рейтинг темы: голосов - 37, средняя оценка - 4.62
 Аватар для newcooller
0 / 0 / 0
Регистрация: 19.03.2009
Сообщений: 23

3 задачи (на файлы, строки, модуль CRT)

19.03.2009, 09:23. Показов 7181. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот такие задачки остались нерешонными до конца модуля...никак немогу решить (, а нодо как можно скорее сдать...Помогите чем сможете

1. На файлы:
О каждом из студентов известны фамилии и 4 оценки. Определить средний балл каждого студента и вывести соответствующий документ.(Нужно что бы фамилии и оценки вводились и записывались в файл, файл потом открывался, производился подсчёт среднего балла и выводился результат.)
Я решил эту задачу но без использования фАЙЛОВ ))) немогу никак переделать.

program sred_bal;
uses crt;
const nmax=50;
type Tstud=record
fam:string[15];
ocn:array[1..4]of byte;
srb:real;
end;
var sp:array[1..nmax] of Tstud;
n,i,k,j,t:byte;
begin
clrscr;
repeat
write('Введите кол-во студентов =');
readln(n);
until (n>0)and(n<=nmax);
writeln('Введите данные о ',n,' студентах:');
for i:=1 to n do
begin
writeln('Студент',i);
write('Фамилия: ');readln(sp[i].fam);
writeln(' Оценки:');
sp[i].srb:=0;
for j:=1 to 4 do
begin
write(j:7,'=');
readln(sp[i].ocn[j]);
sp[i].srb:=sp[i].srb+sp[i].ocn[j]/4;
end;
end;
clrscr;
writeln;
writeln(' >>>Общий список студентов<<<');
writeln;
writeln('':4,'Фамилия Средний балл');
writeln;
for i:=1 to n do
writeln('':5,sp[i].fam,'':7,sp[i].srb:0:2);
readln
end.

2. На строки и записи.
В ряде содержатся слова разделённые пробелами. Создать массив из этих слов.
Тоже пытался решать но решил неправильно ))

program Mas_slov;
uses crt;
const nmax=50;
type Slova=record
sl:string[15];
end;
var sp:array[1..nmax] of Slova;
n,i,k,j,t:byte;
begin
clrscr;
repeat
write('Количество слов (Максимум 50) = ');
readln(n);
until (n>0)and(n<=nmax);
writeln('Введите ',n,' слов(*а):');
for i:=1 to n do
begin
writeln('Слово ',i);
readln(sp[i].sl);
end;
clrscr;
writeln;
writeln(' >>>Массив слов<<<');
writeln;
for i:=1 to n do
writeln('':5,sp[i].sl);
readln
end.

Строка не должна быть ограничена как у меня...и ввод строки конечно же у меня не правильный...неполучается что то подругому никак ((

3. Использования модуля CRT
Организовать вывод какого-нибудь символа по расходящейся от центра заданного квадратного окна прямоугольной спирали. Программа должна прекращать работу после нажатия на клавишу ТАВ.

Ну тут вообще полный ноль...как только не пробывал решать....нечего путнего не поучилось.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.03.2009, 09:23
Ответы с готовыми решениями:

Модуль CRT, Вариативные поля, файлы
Нужна помощь осталась 3 задачи и я не знаю как решить (Болел долго) Помогите ПЛЗ 1. Представить решение любой задачи, проиллюстрировав...

Модуль CRT
Нарисовать на экране несколько вложенных друг в друга разноцветных прямоугольников.

Модуль CRT
Здравствуйте! Помогите, пожалуйста, с этой программой! Вот задание: Создать окно и ввести в него небольшой текст. Организовать...

22
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
19.03.2009, 10:25
№1.
Я решил эту задачу но без использования фАЙЛОВ
Не умрем мы с Вами от скромности.
Раз уж мой код приводите, то я его и поправлю.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
program sred_bal;
uses crt;
type Tstud=record
           fam:string[15];
           ocn:array[1..4]of byte;
           srb:real;
           end;
var sp:Tstud; {массив уберем, он здесь не нужен}
    i,k,j,t:byte;
    f:file of Tstud;{типизированный файл записей}
    c:char;{символ для окончания ввода}
begin
clrscr;
assign(f,'stud');{связываем переменную с файлом на диске}
rewrite(f);{открываем для записи}
writeln('Введите данные о студентах, окончание ввода Esc:');
i:=0;
repeat
i:=i+1;
writeln(' Студент',i);
write('   Фамилия: ');readln(sp.fam);
writeln('   Оценки:');
for j:=1 to 4 do
  begin
    repeat
    write('     Оценка ',j,'=');
    readln(sp.ocn[j]);
    until sp.ocn[j] in [2..5];{проверяем чтоб не было недопустимых оценок}
  end;
write(f,sp);{заносим запись в файл}
c:=readkey;{ждем нажатия клавиши, если Enter, продолжаем}
until c=#27;{если Esc, заканчиваем ввод}
clrscr;
reset(f);{открываем файл для чтения}
writeln('  Общий список студентов');
writeln;
writeln('---------------------------');
writeln('|   Фамилия | Средний балл|');
writeln('---------------------------');
while not eof(f) do
  begin
    read(f,sp);{читаем запись}
    sp.srb:=0;
    for j:=1 to 4 do
    sp.srb:=sp.srb+sp.ocn[j]/4;{вычисляем средний балл}
    write('| ',sp.fam); {заносим все в таблицу на экран}
    gotoXY(13,whereY);{устанавливаем курсор на текущей строке(whereY) в позицию 13}
    write('|     ',sp.srb:0:2);
    gotoXY(27,whereY);
    write('|');
    writeln;
  end;
writeln('---------------------------');
readln
end.
Добавлено через 2 минуты 10 секунд
№2.
В ряде содержатся слова разделённые пробелами. Создать массив из этих слов.
При чем тут записи? Куда их приделать?
1
 Аватар для newcooller
0 / 0 / 0
Регистрация: 19.03.2009
Сообщений: 23
19.03.2009, 10:32  [ТС]
Да действительно я брал код это рпограммы помоему с RusFAQ.ru....Вы уж извинете если что-то ))...Спасибо за помощь.
А насчет записей можете не обращать внимания...там в этой теме было 2-е задачи..1 я здал, а эту нет.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
19.03.2009, 11:11
№2.
Написал точно как в условии. Если условие неполное, я не виноват.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
program Mas_slov;
uses crt;
var s:string; {вводимая строка (по Вашему ряд) переменная строкового типа string}
    sp:array[1..100] of string;{массив строк или слов}
    i,j:byte;
begin
clrscr;
writeln('Введите строку ');
readln(s);{вводим и читаем строку из слов, разделенных одним пробелом, если строка будет более сложная, надо прописать в условии формат строки и тогда ее надо преобразовывать}
s:=s+' ';{добавим в конец строки пробел для удобства}
j:=1;sp[j]:='';{первый элемент массива, сначала это пустая строка}
for i:=1 to length(s) do{идем по строке]
if s[i]=' ' then j:=j+1 {если пробел, то новое слово}
else sp[j]:=sp[j]+s[i];{если нет, составляем слово из символов}
writeln;
writeln(' >>>Массив слов<<<');
for i:=1 to j do
writeln(sp[i]);{выводим полученный массив столбиком}
readln
end.
0
 Аватар для newcooller
0 / 0 / 0
Регистрация: 19.03.2009
Сообщений: 23
19.03.2009, 11:21  [ТС]
Всё правильно...и с этой задачей помогли..
Ну и если быть уже совсем наглым....насчет первой задачи её можно решить ещё таким способом? Что бы все данные уже были в текстовом файле(фамилии и оценки)....Их нужно оттуда считать обрабатывая как запсись, ну и подсчитать средний балл и вывести результат
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
19.03.2009, 12:00
А почему сразу не написать нормальное задание?

Добавлено через 14 минут 59 секунд
Если в текстовом файле фамилии будут по русски, то надо делать процедуру конвертации Win в Dos. Если латиницей, то не надо. Как будет? Мне без разницы, просто чтоб лишнее не писать.

Добавлено через 1 минуту 34 секунды
И еще, как будет запись, только фамилия, или еще и иницилы. Т.е. Фролов или Фролов И.И.

Добавлено через 8 минут 5 секунд
Вот самый простой вариант. В файле только фамилии, записанные латиницей, типа
Frolov 4 4 4 5
Orlov 3 3 4 4
Petrov 3 4 4 5
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
program sred_bal;
uses crt;
type Tstud=record
           fam:string[15];
           ocn:array[1..4]of byte;
           srb:real;
           end;
var sp:Tstud;
    s,s1:string;
    i:byte;
    t,e:integer;{переменные для перевода строки в число}
    f:text; {текстовый файл]
begin
clrscr;
assign(f,'stud.txt');
reset(f);
writeln('  Общий список студентов');
writeln;
writeln('---------------------------');
writeln('|   Фамилия | Средний балл|');
writeln('---------------------------');
while not eof(f) do
  begin
   readln(f,s);{читаем файл по строкам}
   s:=s+' ';{добавим пробел в конец}
   sp.fam:=copy(s,1,pos(' ',s)-1);{до первого пробела фамилия}
   write('| ',sp.fam);
   delete(s,1,pos(' ',s));{удаляем ее из строки}
   for i:=1 to 4 do{дальше 4 оценки}
     begin
       s1:=copy(s,1,pos(' ',s)-1);{до пробела}
       val(s1,t,e);{превращаем в число}
       sp.ocn[i]:=t;{заносим в запись}
       delete(s,1,pos(' ',s));{удаляем}
     end;
   sp.srb:=0;
   for i:=1 to 4 do
   sp.srb:=sp.srb+sp.ocn[i]/4;{считаем средний балл}
   gotoXY(13,whereY);
   write('|     ',sp.srb:0:2);
   gotoXY(27,whereY);
   write('|');
   writeln;
  end;
writeln('---------------------------');
readln
end.
0
 Аватар для newcooller
0 / 0 / 0
Регистрация: 19.03.2009
Сообщений: 23
19.03.2009, 19:31  [ТС]
Условие правильное было с самого начала..просто я забыл про то что надо ещё 1 способом решить эту задачку...Ваш вариант полностью подходит...Спасибо...выручили. А по третей задаче есть какие-то соображения ?
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
19.03.2009, 19:34
Не очень представляю что это
расходящейся от центра заданного квадратного окна прямоугольной спирали
А сильно напрягаться лень.
0
 Аватар для newcooller
0 / 0 / 0
Регистрация: 19.03.2009
Сообщений: 23
19.03.2009, 20:17  [ТС]
Ну нужно както реализовать "спираль архмеда" символами, ну и на cколько я понял она должна находится в окне...

типа такой спирали только символами и вместо Graph - CRT

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
uses Graph;
const
  n=100;
var
  x,y,z:integer;
begin
  {переходим в графический режим}
  x:=detect;
  initGraph(x,y,'');
  {центр экрана}
  x:=GetMaxX div 2;
  y:=GetMaxY div 2;
  {передвигаем указатель текущей позиции}
  MoveTo(x,y);
  {в одном цикле все рисуем}
  for z:=1 to n do
    begin
      case z mod 4 of
        0:dec(y,z);
        1:inc(x,z);
        2:inc(y,z);
        3:dec(x,z);
        end;
      LineTo(x,y);
    end;
  {все}
  readln;
  CloseGraph;
  end.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
19.03.2009, 20:20
Давай завтра посмотрю, эта спираль в графике у меня есть. Просто сегодня уже устал, да и поздновато у меня.
0
 Аватар для newcooller
0 / 0 / 0
Регистрация: 19.03.2009
Сообщений: 23
19.03.2009, 20:34  [ТС]
Цитата Сообщение от Puporev Посмотреть сообщение
Давай завтра посмотрю, эта спираль в графике у меня есть. Просто сегодня уже устал, да и поздновато у меня.
Ну это ж конечно ваше дело ))..Вы и так помогли сёдня хорошо...Да и если в России живёте то да, позновато...насколько я знаю там щяс 21:30
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
19.03.2009, 21:15
там щяс 21:30
Вообще-то Россия Москвой не кончается, кое-где и побольше.
0
 Аватар для newcooller
0 / 0 / 0
Регистрация: 19.03.2009
Сообщений: 23
19.03.2009, 21:26  [ТС]
Ну я ж не в курсе как оно там у вас...Украина маленькая...у нас всё просто ))
0
57 / 57 / 36
Регистрация: 17.03.2009
Сообщений: 105
19.03.2009, 22:17
Решение к 3 задаче:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Program Spirali;
uses crt;
const
 n=21;
var
z,i,x,oldx,oldy,y:integer;
begin
clrscr;
x:=40;
y:=12;
gotoxy(40,12); Writeln(':');
for z:=1 to n do begin
 oldx:=x;
 oldy:=y;
 case z mod 4 of
   0:inc(y,z);
   1:dec(x,z);
   2:dec(y,z);
   3:inc(x,z);
  end;
  if oldx<>x then begin
     if oldx>x then
    for i:=oldx downto x do begin gotoxy(i,y); write('_'); end
     else
    for i:=oldx to x do begin gotoxy(i,y); write('~'); end;
  end;
  if oldy<>y then begin
     if oldy>y then
    for i:=oldy downto y do begin gotoxy(x,i); write(':'); end
     else
    for i:=oldy to y do begin gotoxy(x,i); write(':');  end;
  end;
end;
readln;
end.
1
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
20.03.2009, 08:46
Вот подогнал код уважаемого NasmAPIk'a под твое условие.
Что может быть не так. Часто в Паскале стоят старые модули *tpl и задержка не соответствует миллисекундам, например delay(1000) будет не секунда, а много меньше и все будет мелькать очень быстро. В этом случае надо или переустанавливать модули, или писать не 1000, а 60000. Соответственно не 300, а 1800. Короче посмотри в работе, вроде все остальное нормально.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
uses crt;
var
  n,x,y,z,oldx,oldy,i:integer;
  c,ch:char;
begin
clrscr;
repeat
write('Введите размер окна <=25 n=');
readln(n);
until (n>=3)and(n<=25);
write('Символ c=');
readln(c);
clrscr;
textbackground(7);{цвет фона окна}
textcolor(12);{цвет символа}
window(1,1,n,n);{окно}
if odd(n) then {если размер нечетный}
  begin
   x:=Lo(windmax) div 2;{начало по х от середины -1 влево}
   y:=Hi(windmax) div 2;{начало по у от середины +1 вверх}
  end
else {если четный}
  begin
   x:=Lo(windmax) div 2-1;{начало по х от середины -1 влево}
   y:=Hi(windmax) div 2-1;{начало по у от середины +1 вверх}
  end ;
gotoXY(x,y); {}
writeln(c);{}
z:=1; {}
repeat
oldx:=x;{}
oldy:=y;
case z mod 4 of {регулятор смены строки и столбца}
0:inc(y,z); {переход вниз}
1:dec(x,z);{переход влево}
2:dec(y,z);{переход вверх}
3:inc(x,z);{переход вправо}
end;
if oldx<>x then
  begin
    if oldx>x then {если больше х }
    for i:=oldx downto x do {идем влево по строке}
      begin
        gotoxy(i,y); write(c); delay(300);{вводим символ,задержка 0,3 сек}
      end
    else {если меньше х}
    for i:=oldx to x do{идем вправо по строке}
      begin
        gotoxy(i,y); write(c); delay(300);
      end;
  end;
if oldy<>y then {тоже самое по столбцам, вниз-вверх}
  begin
    if oldy>y then
    for i:=oldy downto y do
      begin
        gotoxy(x,i); write(c); delay(300);
      end
    else
    for i:=oldy to y do
      begin
        gotoxy(x,i); write(c); delay(300);
      end;
  end;
z:=z+1;
if keypressed then
ch:=readkey; {ожидаем нажатия клавиши}
until (z=n) or(ch=#9);
{если не нажали Tab, то спираль строится до конца, если нажали(когда квадрат большой и надоело смотреть), заканчивается}
delay(2000);{задержка перед выходом 2 сек.}
end.
1
 Аватар для newcooller
0 / 0 / 0
Регистрация: 19.03.2009
Сообщений: 23
20.03.2009, 09:30  [ТС]
Всё нормально...только последний виток спирали не правильно строится, я думаю это из-за того, что у меня широкоформатный монитор.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
20.03.2009, 09:31
А как неправильно?
0
 Аватар для newcooller
0 / 0 / 0
Регистрация: 19.03.2009
Сообщений: 23
20.03.2009, 09:37  [ТС]
Ну самый последний виток сверху прижимается вниз к пердыдущиму, а последний правый смещен на 1 строчку влево
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
20.03.2009, 10:18
У меня нормально и для четных и для нечетных. Может какую неточность в коде соорудил.
0
 Аватар для newcooller
0 / 0 / 0
Регистрация: 19.03.2009
Сообщений: 23
22.03.2009, 00:46  [ТС]
Блина что то не так с третьей прогой которая спираль строит....


и спираль чёто не в окне....хотя в коде оно присутствует....
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.03.2009, 00:46
Помогаю со студенческими работами здесь

модуль CRT
не удивляйтесь вопросу, но мне очень нужно узнать ,что-то дополнительно (интересное) о модуле CRT. может ссылочку дадите.Программу...

Модуль CRT
Используя crt и так называемую псевдографику, вывести на экран таблицу со значениями функции y=f(x). В окошке снизу или сбоку вывести...

Модуль Crt
Нужно написать программу с использованием модуля CRT: Организовать перемещение буквы «Q» бирюзового цвета по коричневому экрану по...

Модуль crt
Написать программу которая двигала бы символ ( '*') по экрану по нажатию клавиш ( желательно стрелочек). (Например , звездоча перемещается...

Модуль Crt
Во всех заданиях в последней строке экрана сформируйте подсказку о «горячих» клавишах и реализуйте их в программе. Предусмотрите завершение...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru