Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
 Аватар для PresAlexandr
43 / 43 / 16
Регистрация: 16.05.2009
Сообщений: 372

Ошибка последовательного выполнения операторов

16.05.2010, 21:44. Показов 1723. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Собственно, работаю с типизированным файлом. Произвожу поиск заданной записи, и если она найдена,редактирую её.
Ошибка в следующем: программа почему-то игнорирует оператор ввода переменной, продолжая работать по коду,
и поэтому алгоритм работает неправильно.
Код программы (место ошибки):
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
while not EOF(f) do
                  begin
                  Read(f, my_f);
                  if my_f.name=name then
                     begin
                     WriteLn;
                     Write(my_f.name);
                     Write('  ',my_f.firm);
                     Write('  ',my_f.colour);
                     WriteLn('  ',my_f.price);
                     {Ошибка здесь}
                     Write('   Otkorrektirovat'' zapis'' (y/n): ');
                     ReadLn;
                     Read(st1);
                    {Ошибка}
                     if st1='y' then
                        begin
                        n:=filepos(f);
                        Write('     Enter name: '); readln; readln(my_f.name);
                        Write('     Enter firm: '); readln(my_f.firm);
                        Write('     Enter colour: '); readln(my_f.colour);
                        Write('     Enter price: '); readln(my_f.price);
                        seek(f, FilePos(f)-1);
                        Write(f, my_f);
                        WriteLn('     Zapis'' otkorrektirovana!');
                        ReadLn;
                        end;
                     end;
                  end;
Что интересно: Если мы введем st1='y' - программа выполняется, но только как st1='n' - сначала выполняется, но при следующем проходе - происходит игнорирование.
Кто сталкивался, помогите советом!))
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.05.2010, 21:44
Ответы с готовыми решениями:

Найдите значение S после выполнения операторов
1) S:=18; s:=8; s:=113; write(s);

Определите значения переменных р и d после выполнения операторов
если кто сможет,решите пожалуйста! Задача №1 Замените вложенный условный оператор оператором варианта: if Ch = 'i' then N := 1 else ...

Найдите значение S после выполнения следующих операторов :
2) s:=27; s:=s+19; s:=76; write(s);

4
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
16.05.2010, 21:49
Думаю это нужно в скобки
Pascal
1
2
3
4
5
6
7
8
if my_f.name=name then
                     begin
                     WriteLn;
                     Write(my_f.name);
                     Write('  ',my_f.firm);
                     Write('  ',my_f.colour);
                     WriteLn('  ',my_f.price);
                    end;
Добавлено через 1 минуту
естественно здесь
Pascal
1
2
3
4
ReadLn;
                        end;
                     end;
                  end;
1 end; убрать.
1
 Аватар для PresAlexandr
43 / 43 / 16
Регистрация: 16.05.2009
Сообщений: 372
16.05.2010, 21:55  [ТС]
Puporev, спасибо!
Хотя я и нахожу это странным, но работает!))
Теперь возник вопрос: почему так работает? Ведь по сути, логика не меняется, последовательность операторов та же...
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
16.05.2010, 22:15
Как раз меняется, скобки, они и в Африке скобки, например
2*2+2=6 а 2*(2+2)=8
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
while not EOF(f) do//внешний цикл чтения файла
 begin
  Read(f, my_f);
  if my_f.name=name then//первый вложенный оператор
    begin
     WriteLn;
     Write(my_f.name);
     Write('  ',my_f.firm);
     Write('  ',my_f.colour);
     WriteLn('  ',my_f.price);
    end;//закончили вывод, возвращаемся во внешний цикл
   Write('   Otkorrektirovat'' zapis'' (y/n): ');
   ReadLn;
   Read(st1);
   if st1='y' then//второй вложенный оператор
    begin
      n:=filepos(f);
      Write('     Enter name: '); readln; readln(my_f.name);
      Write('     Enter firm: '); readln(my_f.firm);
      Write('     Enter colour: '); readln(my_f.colour);
      Write('     Enter price: '); readln(my_f.price);
      seek(f, FilePos(f)-1);
      Write(f, my_f);
      WriteLn('     Zapis'' otkorrektirovana!');
      ReadLn;
    end;//закончили, во внешний цикл
  end;
0
 Аватар для PresAlexandr
43 / 43 / 16
Регистрация: 16.05.2009
Сообщений: 372
16.05.2010, 22:28  [ТС]
Puporev, наши оба варианты верны.
Тут суть вот в чём: если запись найдена, то мы её можем редактировать, а можем и нет. Поэтому такие скобки у меня и вышли.
Я пробовал выполнять программу посредством F7, вот тут то наглядно и происходило моё чудо - пропуск оператора ввода!
Но Ваш способ помог, поэтому как будет свободное время попробую поэкспериментировать с этой ошибкой. О результатах отпишу.
Ещё раз, спасибо за помощь!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.05.2010, 22:28
Помогаю со студенческими работами здесь

Определить значение переменной после выполнения операторов
Определить значение переменной s после выполнения следующих операторов s:=1; i:=4; repeat i:=i-2; s:=s+i; Writeln (i,'...

Какими будут значения переменных a и b после выполнения операторов
Решение задач 1. Дана последовательность операторов: a := 1; b := 1; while a + b < 8 do Begin a :=a + 1; b := b + 2 End; s := a + b...

Определить содержимое файла f, после выполнения следующих операторов:
Var f: file of integer; i: integer; Определить содержимое файла f, после выполнения следующих операторов: а) rewrite(f); if eof(f)...

Определите, какими будут значения переменных p и d после выполнения операторов
Определите, какими будут значения переменных p и d после выполнения операторов: p:=true; d:=1; k:=71; case k mod 10 of 3, 2, 7, 5:...

Что будет выдано на печать в результате выполнения следующих операторов?
type ref = ^integer; var p, q: ref; Пусть p^=5 и q^=3. Что будет выдано на печать в результате выполнения следующих операторов? ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru