Форум программистов, компьютерный форум, киберфорум
Free Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 15.02.2020
Сообщений: 7
1

Записная книга на Free Pascal

15.02.2020, 22:36. Показов 1286. Ответов 13

Доброго времени суток.
Изучаю Free Pascal.
Пишу из под консоли ubuntu минимальной версии. Для тренировки мне нужно создать собственную записную книгу.
Покурив мануалы написал следующий код.
Но дело в том, что я, видимо, что-то не понимаю и получаю ошибки на этапе компиляции. Их множество и, исправляя одни, получаю другие. Прошу описать, в чём я ошибаюсь, и, если не сложно, дать наводящие подсказки, но не решение.
Может, я что-то не так понимаю.
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
program Zapisnaya_kniga;
Uses ctr;
type 
    contact = record
        number: integer;
        name: string;
        telephone: string;
    end;
 
var 
    BookFile: file of contact;
    ArrBuffer: array of contact;
    vvod: byte;
    End_Menu: boolean;
    function FileEmptyStatus(status: boolean): boolean;
    var 
        tmp_file: file of kontct;
    begin
        assign(tmp_file, 'txt');
        reset(tmp_file);
        if ((eof(tmp_file))=true) then FileEmptyStatus:=true
        else FileEmptyStatus:=false;
        close(f);
    end;
 
 
procedure Show_all(var f: file of contact);
var 
    status: boolean = true;
    tmp: contact;
begin
    status:=FileEmptyStatus(status);
    if(status = false) then     
        begin
        assign(f, 'txt');
        reset(f);
        while not eof(f) do 
            begin
                read(f, tmp.number, tmp.name, tmp.telephone);
                write(tmp.number, tmp.name, tmp.telephone);
            end;
        close(f);
    else
        begin
        clrscr;
        writeln('Nothing to show');
        end;
end;
    
    
    
 
procedure Create_one(var f: file of contact);
var
    tmp: contact;
    
    status: boolean;
    name, telephone: string;
begin
    tmp.number:=1;
    assign(f,'txt');
    writeln(' Enter name and telephone');
    read(tmp.name, tmp.telephone);
    reset(f);
    while not eof(f) do inc(tmp.number);
    close(f);
    append(f);
    write(f, tmp.number+1, tmp.name, tmp.telephone);
    close(f);
end;
 
 
procedure Delete_one(var f: file of contact,ArrBuffer: array of contact); { This procedure works with file by array of contact}
var
    f1:file of contact;
    i,n: integer; {Number of deleting item};
    status: boolean;
    victim: integer;
    {Try to dont zaporot logic of code}
begin 
    assign(f,'txt');
    assign(f1,'txt1');
    status:=FileEmptyStatus(status);
    if (status = true) then writeln('There is nothing to delete');
    else 
        begin
        reset(f);
        i:=1;
        while not eof(f) do 
            begin
            SetLength(ArrBuffer,i);
            read(f,ArrBuffer[i].number,ArrBuffer[i].name,ArrBuffer[i].telephone);
            inc(i);
            end;
    end;
    writeln('Enter the queu number of deleting contact);
    read(victim);
    for n:=victim to (i-1) do 
        begin
        ArrBuffer[n]:=ArrBuffer[n+1];
        end;
    SetLength(ArrBuffer, i-1);
    rewrite(f1);
    for n:=1 to i do write(f1, ArrBuffer[n]);
    close(f1);
    erase(f);
    rename(f1,f);
    
end;
 
 
procedure Update_one(var f: file of contact,ArrBuffer: array of contact); { This procedure works with file by array of contact}
var 
    i,n: integer; {Number of deleting item};
    status: boolean;
    victim: integer;
    buffer_name, buffer_phone: string;
begin
    assign(f,'txt');
    assign(f1, 'txt1');
    status:=FileEmptyStatus(status);
    if (status = true) then writeln('There is nothing to update');
    else 
        begin
        reset(f);
        i:=1;
        while not eof(f) do 
            begin
            SetLength(ArrBuffer,i);
            read(f,ArrBuffer[i].number,ArrBuffer[i].name,ArrBuffer[i].telephone);
            inc(i);
            end;
        close(f);
    end;
    writeln('Enter the queu number of updating contact);
    read(victim);
    Writeln('Enter new name and phone: ');
    read(name, phone);
    ArrBuffer[victim].name:=buffer_name;
    ArrBuffer[victim].telephone:=buffer_phone;
    rewrite(f1);
    for n:=1 to i do write(f1, ArrBuffer[n]);
    close(f1);
    erase(f);
    rename(f1,f);
end;
 
ClrScr;
Append(BookFile, 'file');
End_Menu:=False;
Repeat
    Writeln('Telefonii spravochnik ');
    Writeln('Viberite pynkti ');
    Writeln('1-Show_all ');
    Writeln('2-Create_one ');
    Writeln('3-Delete_one');
    Writeln('4-Update_one');
    Writeln('0-Exit contact book');
    Write('Vash vibor ');
    Readln(vvod);
    Case vvod of
        1: Show_all(BookFile, tmp);
        2:Create_one(BookFile);
        3:Delete_one(BookFile,ArrBuffer);
        4:Update_one(BookFile,ArrBuffer);
        0:End_Menu:=True;
    end;
    Writeln('Press a key');
    Readln;
    ClrScr;
Until (End_Menu = true);
End.
Вот файл, кому так удобнее:
0
Вложения
Тип файла: 7z NewProgram.7z (1.2 Кб, 2 просмотров)
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.02.2020, 22:36
Ответы с готовыми решениями:

Turbo Pascal, Pascal ABC, Free Pascal, PascalABC.NET - в чем разница?
Всем привет, решил изучать Паскаль, но на форуме увидел 4 его версии - Turbo Pascal, Pascal ABC,...

Есть ли аналог модуля tpdate.tpu (Turbo Pascal) для Free Pascal
Внимание! Нужно срочно узнать название юнита для freepascal, который выполняет функции tpdate.tpu...

Нужен Turbo pascal или Free pascal на русском
Нужен Turbo pascal или Free pascal на русском языке, есть такой или нет? По книге обучаюсь по Turbo...

Необходимо перевести программу с Pascal ABC на free pascal
var a, factorial:longint; const c:array of char= ('0','1'); var res:string; d:0..1; k,...

13
Эксперт Pascal/Delphi
6636 / 4464 / 4746
Регистрация: 05.06.2014
Сообщений: 21,951
16.02.2020, 10:18 2
Kanatohodec,
после 100500-й синтаксической ошибки я сдался.
Не знаю, откуда вы взяли это

Добавлено через 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
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
program Zapisnaya_kniga;
 
Uses crt;
 
type
  contact = record
    number: integer;
    name: string[128];
    telephone: string[16];
  end;
 
var
  BookFile: file of contact;
  ArrBuffer: array of contact;
  vvod: byte;
  End_Menu: boolean;
 
function FileEmptyStatus(status: boolean): boolean;
var
  tmp_file: file of contact;
begin
  assign(tmp_file, 'txt');
  reset(tmp_file);
  if ((eof(tmp_file)) = true) then FileEmptyStatus := true
  else FileEmptyStatus := false;
  close(tmp_file);
end;
 
 
procedure Show_all(var f: file of contact);
var
  status: boolean = true;
  tmp: contact;
begin
  status := FileEmptyStatus(status);
  if(status = false) then     
  begin
    assign(f, 'txt');
    reset(f);
    while not eof(f) do 
    begin
      read(f, tmp);
      write(tmp.number, tmp.name, tmp.telephone);
    end;
    close(f);
  end
    else
  begin
    clrscr;
    writeln('Nothing to show');
  end;
end;
 
 
 
 
procedure Create_one(var f: file of contact);
var
  tmp: contact;
  
  status: boolean;
  name, telephone: string;
begin
  tmp.number := 1;
  assign(f, 'txt');
  writeln(' Enter name and telephone');
  read(tmp.name, tmp.telephone);
  reset(f);
  while not eof(f) do inc(tmp.number);
  close(f);
  //  append(f);
  write(f, tmp);
  close(f);
end;
 
 
procedure Delete_one(var f: file of contact; ArrBuffer: array of contact);{ This procedure works with file by array of contact}
var
  f1: file of contact;
  i, n: integer; {Number of deleting item}
  status: boolean;
  victim: integer;
    {Try to dont zaporot logic of code}
begin
  assign(f, 'txt');
  assign(f1, 'txt1');
  status := FileEmptyStatus(status);
  if (status = true) then writeln('There is nothing to delete')
    else 
  begin
    reset(f);
    i := 1;
    while not eof(f) do 
    begin
      SetLength(ArrBuffer, i);
      read(f, ArrBuffer[i]);
      inc(i);
    end;
  end;
  writeln('Enter the queu number of deleting contact');
  read(victim);
  for n := victim to (i - 1) do 
  begin
    ArrBuffer[n] := ArrBuffer[n + 1];
  end;
  SetLength(ArrBuffer, i - 1);
  rewrite(f1);
  for n := 1 to i do write(f1, ArrBuffer[n]);
  close(f1);
  erase(f);
  //rename(f1, f);
end;
 
 
procedure Update_one(var f: file of contact; ArrBuffer: array of contact);{ This procedure works with file by array of contact}
var
  i, n: integer; {Number of deleting item}
  status: boolean;
  victim: integer;
  buffer_name, buffer_phone: string;
begin
  assign(f, 'txt');
  assign(f1, 'txt1');
  status := FileEmptyStatus(status);
  if (status = true) then writeln('There is nothing to update')
    else 
  begin
    reset(f);
    i := 1;
    while not eof(f) do 
    begin
      SetLength(ArrBuffer, i);
      read(f, ArrBuffer[i].number, ArrBuffer[i].name, ArrBuffer[i].telephone);
      inc(i);
    end;
    close(f);
  end;
  writeln('Enter the queu number of updating contact');
  read(victim);
  Writeln('Enter new name and phone: ');
  read(name, phone);
  ArrBuffer[victim].name := buffer_name;
  ArrBuffer[victim].telephone := buffer_phone;
  rewrite(f1);
  for n := 1 to i do write(f1, ArrBuffer[n]);
  close(f1);
  erase(f);
  rename(f1, f);
end;
 
begin
  ClrScr;
  Append(BookFile, 'file');
  End_Menu := False;
  repeat
    Writeln('Telefonii spravochnik ');
    Writeln('Viberite pynkti ');
    Writeln('1-Show_all ');
    Writeln('2-Create_one ');
    Writeln('3-Delete_one');
    Writeln('4-Update_one');
    Writeln('0-Exit contact book');
    Write('Vash vibor ');
    Readln(vvod);
    case vvod of
      1: Show_all(BookFile, tmp);
      2: Create_one(BookFile);
      3: Delete_one(BookFile, ArrBuffer);
      4: Update_one(BookFile, ArrBuffer);
      0: End_Menu := True;
    end;
    Writeln('Press a key');
    Readln;
    ClrScr;
  until (End_Menu = true);
end.
Но работать не будет
0
0 / 0 / 0
Регистрация: 15.02.2020
Сообщений: 7
16.02.2020, 10:43  [ТС] 3
ZX Spectrum-128, а что я делаю неправильно? Как исправить?
0
Эксперт Pascal/Delphi
6636 / 4464 / 4746
Регистрация: 05.06.2014
Сообщений: 21,951
16.02.2020, 10:50 4
Большая часть переменных, используемых в программе, не описана.
Вы пытаетесь использовать append для типизированного файла.
И т.д. и т.п.
Жутко
0
2348 / 756 / 553
Регистрация: 15.01.2019
Сообщений: 2,346
16.02.2020, 13:40 5
Лучший ответ Сообщение было отмечено Kanatohodec как решение

Решение

Попробуйте исправленный код.
Операции со вторым файлом я убрал, потому что не понятно зачем он нужен.
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
program Zadanie178project1;
Uses
  crt, sysutils;
const
  filename = 'phonenote.dat';
 
type
  Tcontact = record
      number: integer;
        name: string[255];
   telephone: string[255];
                end;
  Ttypefile = file of Tcontact;
  Ttypearray = array of Tcontact;
 
 
procedure CreateFile(fn: string);
{Процедура для проверки файла на существование и создание файла}
var
  tmp_file: Ttypefile;
begin
  if not FileExists(fn) then
    begin
      assign(tmp_file, fn);
      rewrite(tmp_file);
      close(tmp_file);
    end;
end;
 
 
function FileEmptyStatus(fn: string): boolean;
{Функция для определения содержания файла}
var
  tmp_file: Ttypefile;
begin
  assign(tmp_file, fn);
  reset(tmp_file);
  if filesize(tmp_file) > 0 then
    FileEmptyStatus:= true
  else
    FileEmptyStatus:= false;
  close(tmp_file);
end;
 
 
procedure Show_all(var f: Ttypefile; fn: string);
{Процедура, которая выводит содержание файла в консоль}
var
  tmp: Tcontact;
begin
  if FileEmptyStatus(fn) then
    begin
      assign(f, fn);
      reset(f);
      clrscr;
      writeln('number':8, 'name':25, 'telephone':12);
      while not eof(f) do
        begin
          read(f, tmp);
          writeln(tmp.number:8, tmp.name:25, tmp.telephone:12);
        end;
      close(f);
    end
  else
    begin
      clrscr;
      writeln('Nothing to show');
    end;
end;
 
 
procedure Create_one(var f: Ttypefile; fn: string);
{Процедура, которая добавляет одну запись в файл}
var
  tmp: Tcontact;
begin
  tmp.number:= 1;
  assign(f, fn);
  reset(f);
  write(' Enter name: ');
  readln(tmp.name);
  write(' Enter telephone: ');
  readln(tmp.telephone);
  tmp.number:= filesize(f)+1;
  seek(f,filesize(f));
  write(f,tmp);
  close(f);
end;
 
 
procedure Delete_one(var f: Ttypefile; ArrBuffer: Ttypearray; fn: string);
{ Процедура, которая удаляет одну запись из файла}
var
  i,n: integer; {Number of deleting item}
  victim: integer;
begin
  if not FileEmptyStatus(fn) then
    writeln('There is nothing to delete')
  else
    begin
      assign(f,fn);
      reset(f);
      SetLength(ArrBuffer,Filesize(f)); {Установка размерности буферного массива записей }
      i:= 0;
      while not eof(f) do    {Чтение информации из файла в буфер}
        begin
          read(f,ArrBuffer[i]);
          inc(i);
        end;
      write('Enter the queu number of deleting contact: ');
      readln(victim);
      for n:= victim-1 to (i-1) do    {Сдвиг влево в буфере массива записей}
        begin
          ArrBuffer[n]:= ArrBuffer[n+1];
          ArrBuffer[n].number:= ArrBuffer[n].number-1;  {Переименование номеров записей}
        end;
      i:= i-1;
      SetLength(ArrBuffer, i);
      rewrite(f);
      for n:= 0 to i-1 do
        write(f, ArrBuffer[n]);   {Запись информации из буфера в файл}
      close(f);
  end;
end;
 
 
procedure Update_one(var f: Ttypefile; ArrBuffer: Ttypearray; fn: string);
{ Процедура, которая заменяет новой записью старую запись по указанному номеру}
var
  i,n: integer; {Number of deleting item}
  victim: integer;
  buffer_name, buffer_phone: string;
 
begin
  if not FileEmptyStatus(fn) then
    writeln('There is nothing to update')
  else
    begin
      assign(f, fn);
      reset(f);
      i:= 0;
      SetLength(ArrBuffer,FileSize(f));  {Установка размерности буферного массива записей }
      while not eof(f) do
        begin
          read(f,ArrBuffer[i]);  {Чтение информации из файла в буфер}
          inc(i);
        end;
      write('Enter the queu number of updating contact: ');
      readln(victim);
      Write('Enter new name: ');
      readln(buffer_name);
      Write('Enter new phone: ');
      readln(buffer_phone);
      ArrBuffer[victim-1].name:= buffer_name;  { Замена записи в буфере по указанному номеру}
      ArrBuffer[victim-1].telephone:= buffer_phone;
      rewrite(f);
      for n:= 0 to i-1 do
        write(f, ArrBuffer[n]);   {Запись информации из буфера в файл}
      close(f);
    end;
end;
 
{главный код ----------------------------------------------}
 
var
  BookFile: Ttypefile;  { Файловая переменная}
  ArrBuffer: Ttypearray; { Переменная для хранения информации в буфере}
  vvod: byte;             { Промежуточная переменная для организации выбора действий}
  End_Menu: boolean;      { Логическая переменная для организации окончания работы программы}
 
begin
  ClrScr;
  CreateFile(filename); {Проверка наличия файла и создание файла}
  End_Menu:= False;
  repeat
    Writeln('Telefonii spravochnik ');
    Writeln('Viberite pynkti ');
    Writeln('1-Show file ', filename);
    Writeln('2-Create single entry in file ', filename);
    Writeln('3-Delete single entry in file ', filename);
    Writeln('4-Update single entry in file ', filename);
    Writeln('0-Exit contact book');
    Write('Vash vibor ');
    Readln(vvod);
    case vvod of
        1: Show_all(BookFile, filename);
        2: Create_one(BookFile, filename);
        3: Delete_one(BookFile, ArrBuffer, filename);
        4: Update_one(BookFile, ArrBuffer, filename);
        0: End_Menu:= True;
    end;
    Writeln('Press a key');
    Readln;
    ClrScr;
  until End_Menu;
end.
1
0 / 0 / 0
Регистрация: 15.02.2020
Сообщений: 7
17.02.2020, 00:16  [ТС] 6
ZX Spectrum-128, Здравствуйте. Не сомневаюсь в ваших знаниях Pascal, но вот, что я получил при компиляции.
0
Миниатюры
Записная книга на Free Pascal  
0 / 0 / 0
Регистрация: 15.02.2020
Сообщений: 7
17.02.2020, 00:44  [ТС] 7
ValentinNemo, Здравствуйте. СОбирал ваш код. Мне неизвстна причина такого листа ошибок.
Как это можно исправить?
0
Миниатюры
Записная книга на Free Pascal  
Эксперт Pascal/Delphi
6636 / 4464 / 4746
Регистрация: 05.06.2014
Сообщений: 21,951
17.02.2020, 08:24 8
Kanatohodec, мои исправления можете забыть.
Код от ValentinNemo, скомпилировался и нормально работает.
fpc версия 3.0.2 (windows)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
30914 / 20228 / 7884
Регистрация: 22.10.2011
Сообщений: 35,107
Записей в блоге: 6
17.02.2020, 10:45 9
Цитата Сообщение от Kanatohodec Посмотреть сообщение
Мне неизвстна причина такого листа ошибок.
Мне тоже. Ибо код и под Linux-ом прекрасно собирается:
0
Миниатюры
Записная книга на Free Pascal  
2177 / 1024 / 412
Регистрация: 19.03.2019
Сообщений: 3,303
17.02.2020, 13:40 10
Цитата Сообщение от Kanatohodec Посмотреть сообщение
ValentinNemo, Здравствуйте. СОбирал ваш код. Мне неизвстна причина такого листа ошибок.
что значил "собирал"? Ты код менял или нет.
если не менял, а вставил код, который тебе дали один в один, то у тебя косяк какой-то с Паскалем.
но, скорее всего, ты что-то поменял в коде.
покажи код, который у тебя в program.pas (кстати, зачем переименовал, чем тебе имя Zadanie178project1 не понравилось?!)
0
0 / 0 / 0
Регистрация: 15.02.2020
Сообщений: 7
17.02.2020, 19:33  [ТС] 11
mr-Crocodile, вечер добрый. После перезапуска системы при компиляции кода от ValentinNemo, выдаёт следующую ошибку. Причём, если убрать все операторы else, то код копилируется, но программа работает, понятное дело, некорректно.
Если ставить костыль и "убирать" причину ошибки, то придирается к следующему оператору.

Переименовал, потому что так лучше вписывается среди моих файлов.
0
Миниатюры
Записная книга на Free Pascal  
2177 / 1024 / 412
Регистрация: 19.03.2019
Сообщений: 3,303
18.02.2020, 09:49 12
Цитата Сообщение от Kanatohodec Посмотреть сообщение
осле перезапуска системы при компиляции кода от ValentinNemo, выдаёт следующую ошибку.
запакуй свой файл в архив, архив приложи к соообщению.

просто то, что у тебя в ошибках - не соответствует файлу, который выложил ValentinNemo
Zadanie178project1.zip
(на скрине ошибка в строке 97 в позиции 2. но в 97 строке нет никакого else
0
2348 / 756 / 553
Регистрация: 15.01.2019
Сообщений: 2,346
18.02.2020, 11:03 13
Я предполагаю, что товарищ перед else расставил точки с запятыми.
0
0 / 0 / 0
Регистрация: 15.02.2020
Сообщений: 7
19.02.2020, 11:20  [ТС] 14
ValentinNemo, неверно предполагаете.

mr-Crocodile , код скомпилировался и заработал. Спасибо.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.02.2020, 11:20

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

В Turbo Pascal при нажатии на Run ничего не происходит, а в Free Pascal окно сразу же закрывается
Привет всем! У меня такая небольшая проблемка... Я установил Turbo Pascal и Free Pascal. Попробовал...

Не играют звуки в Turbo Pascal и Free Pascal
Uses CRT; Procedure mi; Begin sound(659); Delay(500); nosound; Delay(20); End; Procedure do1;...

Программа на Turbo Pascal не запускается на Free Pascal
В теории должен быть симулятор перекрестка, приведенный ниже код работает через Turbo Pascal, во...

Чем Turbo Pascal отличается от Free Pascal
Обьясните, пожалуйста, чем Turbo Pascal отличается от Free Pascal? Заранее благодарен.


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.