С Новым годом! Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 01.07.2011
Сообщений: 24

Доработка программы

01.07.2011, 10:19. Показов 976. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Прошу, помогите пожалуйста дописать программу. Задание такое:
a) Создать типизированный файл заданной структуры, заполнить его информацией, вывести данные в виде таблицы на экран. (Файлы, создаваемые в задании, должны содержать не менее 5-ти строк).
b) Разработать подпрограмму обработки данного файла.
Вариант 4
a) Создать файл, содержащий сведения о телефонах абонентов: фамилия абонента, год установки телефона, номер телефона.
b) Написать программу, выдающую информацию следующего вида: по вводимой фамилии абонента выдается номер телефона; определяется количество установленных телефонов с **** года. Год вводится с клавиатуры.
Все почти сделал, только не могу доделать количество телефонов, установленных с **** года.
Помогите пожалуйста. Вот текст программы:
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
Program Zadanie2v4;
uses crt;
type spr=record
     fam:string[20];
     year:string[4];
     num:string[6];
end;
const n=3;
var f:file of spr;
    fa:spr;
    i,k,r,sum:longint;
    code:integer;
    ff:string;
    god:string;
    p:boolean;
begin
    clrscr;
    assign(f,'abonent.dat');
    rewrite(f);
    writeln('Введите фамилию абонента, год установки телефона и номер');
     for i:=1 to n do
      begin
       writeln('Фамилия:'); readln(fa.fam);
       writeln('Год установки'); readln(fa.year);
       writeln('Номер телефона*'); readln(fa.num);
       write(f,fa);
      end;
    clrscr;
    reset(f);
    writeln('Список абонентов:');
    writeln;
    writeln('-----------------------------------');
    writeln('| *Фамилия | Год установки|  Номер  |');
    writeln('-----------------------------------');
    while not EOF(f) do
     begin
      read(f,fa);
       with fa do
        begin
         gotoXY(1,whereY); write('|',fa.fam);
         gotoXY(11,whereY); write('|     ',fa.year);
         gotoXY(26,whereY); write('|  ',fa.num,' |');
        end;
      writeln;
      writeln('-----------------------------------');
     end;
    close(f);
  writeln('‚ўҐ¤ЁвҐ д*¬Ё«Ёо');
  readln(ff);
  p:=false;
  reset(f);
    while (not EOF(f)) and (not p) do
      begin
       read(f,fa);
         if fa.fam=ff then
           begin
             writeln('Телефон*:',fa.num:6);
             p:=true;
           end;
       end;
    if not p then
     writeln('Такой абонент не зарегестрирован**');
  writeln('Введите год');
  readln(god);
  k:=0;
  sum:=0;
  read(f,fa);
    while (not EOF(f)) do
      begin
        val(fa.year,r,code);
          if fa.year>=god then
            inc(k);
      end;
    writeln(r);
    sum:=sum+k;
    writeln('С ',god:4,'года установлено',sum:2,' телефонов');
    close(f);
   end.
Либо в 67-й строке пишет "Ошибка чтения с диска" либо не считает количество установленных телефонов.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.07.2011, 10:19
Ответы с готовыми решениями:

Доработка программы
Вот дана программа: Uses crt; Var t:text; i,n,a:integer; s:string; begin clrscr; assign(t,'lab7.in'); ...

Доработка программы Turbo Pascal
Заполнить левую половину экрана синим цветом, правую - зеленым. Ввести строку с клавиатуры. Если в ней больше букв "А", чем букв...

Доработка программы с текстовым файлом
Уважаемые профессионалы программирования! Очень прошу вас о помощи. Есть задание: а). Создать текстовый файл, заполнить его...

17
 Аватар для rubisgt
55 / 35 / 14
Регистрация: 28.02.2011
Сообщений: 184
01.07.2011, 11:03
writeln('‚ўҐ¤ЁвҐ д*¬Ё«Ёо');
что в 48 строке?
0
0 / 0 / 0
Регистрация: 01.07.2011
Сообщений: 24
01.07.2011, 16:49  [ТС]
В 48 строке "Введите фамилию"
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
01.07.2011, 17:28
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
Program Zadanie2v4;
uses crt;
type spr=record
     fam:string[20];
     year:string[4];
     num:string[6];
end;
const n=3;
var f:file of spr;
    fa:spr;
    i,k,r:longint;
    code:integer;
    ff:string;
    god:longint;
    p:boolean;
begin
    clrscr;
    assign(f,'abonent.dat');
    rewrite(f);
    writeln('Введите фамилию абонента, год установки телефона и номер');
     for i:=1 to n do
      begin
       writeln('Фамилия:'); readln(fa.fam);
       writeln('Год установки'); readln(fa.year);
       writeln('Номер телефона'); readln(fa.num);
       write(f,fa);
      end;
    clrscr;
    reset(f);
    writeln('Список абонентов:');
    writeln;
    writeln('-----------------------------------');
    writeln('| Фамилия | Год установки|  Номер  |');
    writeln('-----------------------------------');
    while not EOF(f) do
     begin
      read(f,fa);
       with fa do
        begin
         gotoXY(1,whereY); write('|',fa.fam);
         gotoXY(11,whereY); write('|     ',fa.year);
         gotoXY(26,whereY); write('|  ',fa.num,' |');
        end;
      writeln;
      writeln('-----------------------------------');
     end;
    close(f);
  writeln('Введите фамилию');
  readln(ff);
  p:=false;
  reset(f);
    while (not EOF(f)) and not p do
      begin
       read(f,fa);
         if fa.fam=ff then
           begin
             writeln('Телефон:',fa.num:6);
             p:=true;
           end;
       end;
   if not p then writeln('Такой абонент не зарегестрирован');
  writeln('Введите год');
  readln(god);
  seek(f,0); //прочитал файл, вернись в начало, или закрой
  k:=0;
  while not EOF(f) do
   begin
    read(f,fa);
    val(fa.year,r,code);
     if r>=god then inc(k);
   end;
  writeln('С ',god,' года установлено ',k,' телефонов');
  close(f);
 end.
Добавлено через 8 минут
Я внес еще исправления
1
0 / 0 / 0
Регистрация: 01.07.2011
Сообщений: 24
01.07.2011, 17:35  [ТС]
Огромное спасибо!!! Два дня голову ломал что же там не так - вроде бы все правильно делал. А дело то оказалось в малом.
0
0 / 0 / 0
Регистрация: 01.07.2011
Сообщений: 24
05.07.2011, 13:51  [ТС]
Уважаемый Puporev!
Не могли бы Вы мне помочь по тому же вопросу, но только с текстовым файлом.
Вот листинг программы, который пишу я:
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
Program Z3V4;
uses crt;
const
 n=5;
var
 f:text;
 fam:string[20];
 year:string[4];
 num:string[6];
 st,ff:string;
 i:integer;
 p:boolean;
begin
clrscr;
assign(f,'L:\abonent.txt');
rewrite(f);
writeln('Введите фамилию абонента, год установки и номер:');
  for i:=1 to n do
   begin
    writeln('Фамилия:');readln(fam);
    writeln('Год:');readln(year);
    writeln('Номер:');readln(num);
    st:=concat('  ',fam,'       ',year,'        ',num);
    writeln(f,st);
   end;
  close(f);
clrscr;
append(f);
writeln('Список абонентов:');
writeln;
writeln('----------------------------------');
writeln('| Фамилия | Год установки | Номер |');
writeln('----------------------------------');
close(f);
reset(f);
while not EOF(f) do
  begin
   readln(f,st);
   writeln(st);
  end;
writeln;
writeln('----------------------------------');
close(f);
writeln('Введите фамилию:'); readln(ff);
p:=false;
reset(f);
 for i:=1 to n do
     begin
 while (not EOF(f)) and not p do
   begin
     read(f,st[i]);
     if pos(ff,st[i])<>0 then
      begin
        writeln('Телефон: ',num:6);
        p:=true;
      end;
   end;
 end;
 if not p then writeln('Такой абонент не зарегестрирован');
close(f);
{Дальше про год вообще никак составить не получается}
end.
Не получается выводить номер телефона по введенной фамилии. А по вводимому году вообще мрак. Помогите пожалуйста
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
05.07.2011, 13:53
Цитата Сообщение от Денис16 Посмотреть сообщение
но только с текстовым файлом.
Базы данных с текстовым файлом не делают, а заниматься извращениями нет никакого желания. Обращайтесь к тому, кто это придумал.
0
0 / 0 / 0
Регистрация: 01.07.2011
Сообщений: 24
05.07.2011, 14:04  [ТС]
Но может все-таки есть какой-либо альтернативный вариант как можно с этим заданием справиться? Очень прошу, помогите.
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
05.07.2011, 14:08
Цитата Сообщение от Денис16 Посмотреть сообщение
как можно с этим заданием справиться?
С каким заданием, где оно? Я пока вижу только это

Цитата Сообщение от Денис16 Посмотреть сообщение
a) Создать типизированный файл заданной структуры, заполнить его информацией, вывести данные в виде таблицы на экран. (Файлы, создаваемые в задании, должны содержать не менее 5-ти строк).
0
0 / 0 / 0
Регистрация: 01.07.2011
Сообщений: 24
05.07.2011, 18:41  [ТС]
Задание такое: Выполнить ЗАДАНИЕ 2 с использованием текстового файла. Данные в текстовый файл вывести в виде таблицы.
ЗАДАНИЕ 2 - это с типизированным файлом, которое мы с Вами уже сделали.

Добавлено через 4 часа 29 минут
Уважаемый Puporev. Извините, что донимаю Вас вопросами. Не могли бы Вы посмотреть. Я помучился и все-таки составил эту программу, но у меня почему-то в двух моментах она не выдает результат. Вот код программы:
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
Program Z3V4;
uses crt;
const
 n=2;
var
 f:text;
 fam:string[20];
 year:string[4];
 num:string[6];
 st,ff,g:string;
 i,k,r,god:integer;
 code:integer;
 p:boolean;
 a,b,c:array[1..n] of string;
begin
clrscr;
assign(f,'L:\abonent.txt');
rewrite(f);
writeln('Vvedite familiyu abonenta, god ustanovki i nomer:');
  for i:=1 to n do
   begin
    writeln('Familiya:');readln(fam);
    a[i]:=fam;
    writeln('God:');readln(year);
    b[i]:=year;
    writeln('Nomer:');readln(num);
    c[i]:=num;
    st:=concat('  ',fam,'       ',year,'        ',num);
    writeln(f,st);
   end;
  close(f);
clrscr;
append(f);
writeln('Spisok abonentov:');
writeln;
writeln('----------------------------------');
writeln('| Familiya | God ustanovki | Nomer |');
writeln('----------------------------------');
close(f);
reset(f);
while not EOF(f) do
  begin
   readln(f,st);
   writeln(st);
  end;
writeln;
writeln('----------------------------------');
close(f);
writeln('Vvedite familiyu:');
readln(ff);
p:=false;
reset(f);
 while (not EOF(f)) and not p do
   begin
     read(f,st);
        if a[i]=ff then
          begin
           writeln('Telephon: ',c[i]:6);
           p:=true;
          end;
   end;
if EOF(f) or not p then writeln('Takoy abonent ne zaregestrirovan');
close(f);
writeln('Vvedite god');
readln(god);
k:=0;
reset(f);
 while not EOF(f) do
  begin
   read(f,st);
   for i:=1 to n do begin
   g:=b[i];
   val(g,r,code);
    if r>=god then inc(k);
  end;
 end;
 writeln('S ',god,' goda ustanovleno ',k,' telefonov');
close(f);
end.
Программа становится в ступор, если вводишь неправильную фамилию и на моменте if r>=god...(шестая строка снизу). Помогите пожалуйста.
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
05.07.2011, 18:50
Денис16, А вы напишите процедуру, которая из текстового файла переводит в массив вашего типа, и будет вам прямой доступ
далее редактируете, и переписываете в текстовый файл обратно (с нуля)
0
0 / 0 / 0
Регистрация: 01.07.2011
Сообщений: 24
05.07.2011, 18:57  [ТС]
Добрый вечер go. Дело в том, что в теле программы уже есть перевод из элементов массива текстового типа в число через стандартную процедуру val(), но почему-то не работает
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
05.07.2011, 19:04
Цитата Сообщение от Денис16 Посмотреть сообщение
Дело в том, что в теле программы уже есть перевод из элементов массива текстового типа в число через стандартную процедуру val(), но почему-то не работает
Код Ваш не смотрел, но, чтобы перевести число из текстового типа (в файле) в переменную типа число, нужно его просто считывать в переменную нужного типа (в val нет необходимости)
Т.е.
Pascal
1
2
3
4
5
6
7
8
var f:text;
i:integer;
begin
assign (f,'text.txt');
reset (f);
read (f,i);
write (i)
end.
0
0 / 0 / 0
Регистрация: 01.07.2011
Сообщений: 24
05.07.2011, 19:12  [ТС]
Пишет Uncnown identifier
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
05.07.2011, 19:21
А может Error 3: Unknown identifier
Неизвестный идентификатор. То есть переменная не задана
0
0 / 0 / 0
Регистрация: 01.07.2011
Сообщений: 24
05.07.2011, 19:34  [ТС]
Да, просто не так записал

Добавлено через 7 минут
А теперь выдает Error 106: Invalid numeric format
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
05.07.2011, 19:54
Цитата Сообщение от Денис16 Посмотреть сообщение
А теперь выдает Error 106: Invalid numeric format
http://bpascal.ru/doc/error.php?p=3&number=186

Добавлено через 20 секунд
Описание ошибки 106
Генерируется процедурами READ или READLN в случае, если числовое значение, считанное из текстового файла, не соответствует правильному числовому формату.
0
0 / 0 / 0
Регистрация: 01.07.2011
Сообщений: 24
05.07.2011, 20:21  [ТС]
Извините, но предложенный Вами метод почему-то не работает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.07.2011, 20:21
Помогаю со студенческими работами здесь

Доработка программы по определению возраста
program Vozzrast; {$APPTYPE CONSOLE} uses SysUtils; var y, m, d, yy, mm, dd, god, month, day, vozrast: integer; var ...

Графы. Машинное представление. Доработка программы
Есть код программы: const nmax=30; type ref = ^ Elem; Elem = record num: integer; ves:real; ...

Доработка программы
Я написал программу, но она никак не хочет работать. Суть такая. Дана целочисленная прямоугольная матрица. Определите номер первого из...

Доработка программы на С++
Я не могу сообразить, пожалуйстааа помогите(( Есть программа &quot;система учета заявок&quot; Программа имеет открытый исходный код, и...

Доработка программы с++
Доброй ночи! обращаюсь к вам еще раз. Указания к программе: Вместо линейного связного списка использовать динамический массив записей...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
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 считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru