С Новым годом! Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 03.12.2018
Сообщений: 196

Ошибка в програме

19.04.2019, 16:34. Показов 3172. Ответов 39
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
При неправильном вводе данных и нажатии Enter для ввода новой записи, запись начинается вводиться сразу с количества часов, а не с названия предмета как надо



Вот код:


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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
uses crt; 
 
type 
predmet = record
nomer: integer; 
kolchasov: integer; 
nazvanie: string[20]; 
fio: string[29];
kafedra: string[20]; 
kolzachetov: integer;
kolekzamenov: integer;
 
end; 
pr = predmet; 
 
var 
key: char; 
mas: array [1..100] of pr; 
f: file of pr; 
i, j: integer; 
 
begin 
assign(f, 'predmet.dat'); 
 
repeat 
try 
if not fileexists('predmet.dat') then 
begin 
rewrite(f); 
close(f); 
end; 
reset(f); 
 
j := 0; 
while not eof(f) do 
begin 
inc(j); 
read(f, mas[j]); 
end; 
close(f); 
inc(j); 
clrscr; 
Writeln('Введите название предмета '); 
readln(mas[j].nazvanie); 
 
clrscr; 
Writeln('Введите количество часов '); 
readln(mas[j].kolchasov); 
 
clrscr; 
Writeln('Введите ФИО преподователя '); 
readln(mas[j].fio);
 
clrscr; 
Writeln('Введите номер кафедры '); 
readln(mas[j].kafedra);
 
clrscr; 
Writeln('Введите количество зачетов '); 
readln(mas[j].kolzachetov);
 
clrscr; 
Writeln('Введите количество экзаменов '); 
readln(mas[j].kolekzamenov); 
 
rewrite(f); 
for i := 1 to j do 
begin 
mas[i].nomer := i; 
write(f, mas[i]); 
end; 
close(f); 
clrscr; 
writeln('Добавлена запись ', mas[i]); 
except 
clrscr; 
writeln('Ошибка при введении данных !!! '); 
end; 
repeat 
writeln('Для внесения следующей записи нажмите Enter; для выхода ESC '); 
key := readkey; 
if (key <> #27) and (key <> #13) then begin 
clrscr; 
writeln('Некоректно !!! '); 
end; 
until (key = #27) or (key = #13); 
until (key = #27); 
end.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.04.2019, 16:34
Ответы с готовыми решениями:

Нужна блок-схема к програме
uses crt; var a:array of integer;{матрица} m,n,i,j,k,tmp:integer; {размеры матрицы,счетчики циклов, буфер для обмена} begin ...

нужно задать тангенс в програме
procedure TForm1.Button1Click(Sender: TObject); var A,B,C,D:Integer; X0,Y0:Integer; X,Y:Real; begin // Î÷èñòèòü ðèñóíîê ...

Ошибка в програме
#include&lt;iostream&gt; #include&lt;conio.h&gt; using namespace std; int main() { int a; cout&lt;&lt;&quot;Vvedite vawy cymy...

39
257 / 149 / 70
Регистрация: 29.07.2018
Сообщений: 1,249
19.04.2019, 18:03
Saulq, напишите,что вводите,и какую ошибку выводит?
0
1 / 1 / 0
Регистрация: 03.12.2018
Сообщений: 196
19.04.2019, 21:10  [ТС]
Пс, Ошибки по сути нету, но программа работает не верно. Например: если в окне ввода "кол-во часов" ввести букву, выйдет окно 'Ошибка при введении данных !!! ' а после 'Для внесения следующей записи нажмите Enter; для выхода ESC '. После нажатия Enter ты можешь ввести новую запись но начиная не с "названия предмета" а сразу с "кол-во часов", то-есть ты не можешь указать названия предмета
0
257 / 149 / 70
Регистрация: 29.07.2018
Сообщений: 1,249
19.04.2019, 21:24
Saulq, можете задание сказать?
0
1 / 1 / 0
Регистрация: 03.12.2018
Сообщений: 196
19.04.2019, 21:26  [ТС]
Пс,
Кафедра
Структура элемента массива предмет: название, количество часов, преподаватель, кафедра, форма отчетности – количество зачетов, количество экзаменов. Определить:
─ найти среднюю нагрузку по данной кафедре;
─ список предметов, по которым есть только экзамены; зачетов больше, чем экзаменов;
─ список предметов, читаемых данной кафедрой.
0
257 / 149 / 70
Регистрация: 29.07.2018
Сообщений: 1,249
19.04.2019, 21:39
у вас вот тут ошибка:
Цитата Сообщение от Saulq Посмотреть сообщение
Pascal
1
until (key = #27) or (key = #13);
при нажатии "Enter" пользователь должен еще раз вводить данные,так?
а у вас в условии выхода стоит,что или "Esc" или "Enter" то есть,какая бы из этих клавиш не были нажаты,программа все равно прекратит работу.
в строке 86 сделайте вот так:
Pascal
1
until (key = #27);
Добавлено через 56 секунд
простите,ошибся.

Добавлено через 3 минуты
Saulq, поставьте после 44 строки :
Pascal
1
repeat
а после 86 строки поставьте:
Pascal
1
until key=#27;
0
1 / 1 / 0
Регистрация: 03.12.2018
Сообщений: 196
19.04.2019, 21:46  [ТС]
Пс, После использования repeat, появляется ошибка: Встречено 'except'(в 76 строке), а ожидалось ';'. Кстати в програме после 86 строки уже стоит строчка until (key = #27);
0
257 / 149 / 70
Регистрация: 29.07.2018
Сообщений: 1,249
19.04.2019, 21:53
Saulq, попробуйте убрать строку 25 и ту,где я вам сказал поставить
Pascal
1
 until key=#27;
0
1 / 1 / 0
Регистрация: 03.12.2018
Сообщений: 196
19.04.2019, 21:57  [ТС]
Пс, та же ошибка, возможно нельзя использовать repeat внутри оператора try--except?
0
257 / 149 / 70
Регистрация: 29.07.2018
Сообщений: 1,249
19.04.2019, 21:59
Saulq, можете скинуть код,с изменениями,которые я вам сказал?
0
1 / 1 / 0
Регистрация: 03.12.2018
Сообщений: 196
19.04.2019, 22:00  [ТС]
Насчет того что куда бы я ни нажал программа закроется, вы не правы. Программа начнет новую запись если я нажму Ентер или закроется если я нажму Ескейп
0
257 / 149 / 70
Регистрация: 29.07.2018
Сообщений: 1,249
19.04.2019, 22:02
Saulq, я понял это,и извинился
0
1 / 1 / 0
Регистрация: 03.12.2018
Сообщений: 196
19.04.2019, 22:06  [ТС]
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
uses crt; 
 
type 
predmet = record
nomer: integer; 
kolchasov: integer; 
nazvanie: string[20]; 
fio: string[29];
kafedra: string[20]; 
kolzachetov: integer;
kolekzamenov: integer;
 
end; 
pr = predmet; 
 
var 
key: char; 
mas: array [1..100] of pr; 
f: file of pr; 
i, j: integer; 
 
begin 
assign(f, 'predmet.dat'); 
 
 
try 
if not fileexists('predmet.dat') then 
begin 
rewrite(f); 
close(f); 
end; 
reset(f); 
 
j := 0; 
while not eof(f) do 
begin 
inc(j); 
read(f, mas[j]); 
end; 
close(f); 
inc(j);
 
clrscr; 
Writeln('Введите название предмета '); 
readln(mas[j].nazvanie); 
repeat
clrscr; 
Writeln('Введите количество часов '); 
readln(mas[j].kolchasov); 
 
clrscr; 
Writeln('Введите ФИО преподователя '); 
readln(mas[j].fio);
 
clrscr; 
Writeln('Введите номер кафедры '); 
readln(mas[j].kafedra);
 
clrscr; 
Writeln('Введите количество зачетов '); 
readln(mas[j].kolzachetov);
 
clrscr; 
Writeln('Введите количество экзаменов '); 
readln(mas[j].kolekzamenov); 
 
rewrite(f); 
for i := 1 to j do 
begin 
mas[i].nomer := i; 
write(f, mas[i]); 
end; 
close(f); 
clrscr; 
writeln('Добавлена запись ', mas[i]);
except
clrscr; 
writeln('Ошибка при введении данных !!! '); 
end; 
repeat 
writeln('Для внесения следующей записи нажмите Enter; для выхода ESC '); 
key := readkey; 
if (key <> #27) and (key <> #13) then begin 
clrscr; 
writeln('Некоректно !!! '); 
end; 
until (key = #27) or (key = #13);   
end.
0
1 / 1 / 0
Регистрация: 03.12.2018
Сообщений: 196
20.04.2019, 12:16  [ТС]
Пс, какой тэг использовать при вводе кода?
0
257 / 149 / 70
Регистрация: 29.07.2018
Сообщений: 1,249
20.04.2019, 12:32
Saulq, всм? На форуме?

Добавлено через 2 минуты
Saulq, [Pasсal] Ваш код [/pascаl]

Добавлено через 39 секунд
Эти теги есть в меню,где вы сообщение вбиваете

Добавлено через 12 минут
Saulq, а по поводу программы,зачем вам "try-except"
лучше после каждого ввода ставить условие,если не верно то повторять это действие
0
1 / 1 / 0
Регистрация: 03.12.2018
Сообщений: 196
20.04.2019, 13:22  [ТС]
Пс, можно поподробней, как это сделать?
0
257 / 149 / 70
Регистрация: 29.07.2018
Сообщений: 1,249
20.04.2019, 15:41
Saulq, сейчас попробуй сделать

Добавлено через 4 минуты
Saulq, откомпилируйте эту программу,и скажите,это что вам надо,или нет?
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
uses crt;
 
type
  predmet = record
    nomer: integer; 
    kolchasov: integer; 
    nazvanie: string[20]; 
    fio: string[29];
    kafedra: string[20]; 
    kolzachetov: integer;
    kolekzamenov: integer;
  
  end;
  pr = predmet;
 
var
  key: char; 
  mas: array [1..100] of pr; 
  f: file of pr; 
  i, j: integer;
 
begin
  assign(f, 'predmet.dat'); 
  if not fileexists('predmet.dat') then 
  begin
    rewrite(f); 
    close(f); 
  end; 
  reset(f); 
  
  j := 0; 
  while not eof(f) do 
  begin
    inc(j); 
    read(f, mas[j]); 
  end; 
  close(f); 
  inc(j); 
  clrscr; 
  try
    Writeln('Введите название предмета '); 
    readln(mas[j].nazvanie);
  except
    clrscr; 
    writeln('Ошибка при введении данных !!! '); 
  end;
  repeat
    try
      clrscr; 
      Writeln('Введите количество часов '); 
      readln(mas[j].kolchasov); 
      
      clrscr; 
      Writeln('Введите ФИО преподователя '); 
      readln(mas[j].fio);
      
      clrscr; 
      Writeln('Введите номер кафедры '); 
      readln(mas[j].kafedra);
      
      clrscr; 
      Writeln('Введите количество зачетов '); 
      readln(mas[j].kolzachetov);
      
      clrscr; 
      Writeln('Введите количество экзаменов '); 
      readln(mas[j].kolekzamenov); 
      
      rewrite(f); 
      for i := 1 to j do 
      begin
        mas[i].nomer := i; 
        write(f, mas[i]); 
      end; 
      close(f); 
      clrscr; 
      writeln('Добавлена запись ', mas[i]);
    except
      clrscr; 
      writeln('Ошибка при введении данных !!! '); 
    end; 
    repeat
      writeln('Для внесения следующей записи нажмите Enter; для выхода ESC '); 
      key := readkey; 
      if (key <> #27) and (key <> #13) then begin
        clrscr; 
        writeln('Некоректно !!! '); 
      end; 
    until (key = #27) or (key = #13); 
  until (key = #27); 
end.
0
1 / 1 / 0
Регистрация: 03.12.2018
Сообщений: 196
20.04.2019, 16:12  [ТС]
Пс, стало хуже, ну если решить эту проблему не возможно, думаю можно и так оставить
0
257 / 149 / 70
Регистрация: 29.07.2018
Сообщений: 1,249
20.04.2019, 16:20
Saulq, а что именно стало хуже?
0
1 / 1 / 0
Регистрация: 03.12.2018
Сообщений: 196
20.04.2019, 16:23  [ТС]
Пс, Название предмету можно задать только один раз, также в таблицу вводится только одна запись

Добавлено через 43 секунды
Под таблицей я подразумеваю второе задание которое выводит данные в таблицу
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.04.2019, 16:23
Помогаю со студенческими работами здесь

Ошибка в програме
добрый день. у меня возникла проблема не значительная. вот фотография ошибки и сам текст программы. ...

Ошибка в програме (Асемблер)
Задание: Определить количество елементов значения которых больше чем 100 Помогите пожалуйста. Написал програму.Вискакивает ошибка...

Ошибка в програме Крестики-нолики
main.cpp #include &quot;KR.h&quot; using namespace std; int main() { RandomPlayer *r = new RandomPlayer('o'); ...

Ошибка в програме, помогите исправить
вот текст програми, #include &lt;windows.h&gt; #include &lt;stdio.h&gt; #define BUF_SIZE 512 int CatFile(HANDLE, HANDLE); int main() ...

Что означает ошибка в главное програме при обращении к функцие инфо
#pragma argsused #include &lt;stdlib.h&gt; #include &lt;iostream.h&gt; #include &lt;conio.h&gt; struct KI {char Imya; char Familiya; char...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru