![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
glebik |
![]() ![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: ![]() ![]() ![]() |
нужна прога - конструктор тестов на pascal
в ней используются разные типы вопросов,программа создаёт и проводит тест ![]() ![]() Сообщение отредактировано: glebik - 11.02.2007 14:13 |
glebik |
![]()
Сообщение
#2
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: ![]() ![]() ![]() |
Напишу потробней. Эта прога предназначена:1)человек может вводить в неё вопросы и варианты ответов причём вопросы могут быть
разными. с 1 прав. ответом, с несколькими. вопрос на сортировку.соответствие 2) а вторая часть проводит этот самый тест. вообще получается что программы будет две:одна для 1 части,другая для 2. ![]() |
glebik |
![]() ![]()
Сообщение
#3
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: ![]() ![]() ![]() |
Мне сказали как должна выглядеть процедура ввода.
В проге используются типы вопросов: 1) непосредственный ввод(при этом вопрос может иметь нес колько правильных ответов-синоним,например Пушкин и А.С. Пушкин оба являются правильными и тд) 2) один правильный из нескольких(причём эти несколько не постоянное а вводится) 3) несколько правильных из нескольких(опять же эти несколько не постоянное а вводится) 4)на соответствие 5)на сортировку У меня есть описание записи которую необходимо использовать для реализации процедуры: type test=record vopros: string[50] (текст вопроса) typ: [1..5] (выбор типа вопроса) kolotv: byte(кол-во ответов, вводится) otvety: array [1..100] of string;(ответы) prav: array [1..100] of string;(правильные ответы) Необходимо чтобы эта процедура была универсальной для любого вопроса. Как это сделать? ПОМОГИТЕ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ![]() |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
glebik, хотя бы по одному примеру вопросов каждого типа (с ответами, разумеется) приведи...
Это первое. Второе: та структура, которую ты привел - это строго задано, и отступать от этого никак нельзя, или могут быть другие решения? (Я бы, например, предпочел сделать запись с вариантами, если у тебя есть несколько типов вопросов, а храниться они должны в одной структуре). |
Артемий |
![]()
Сообщение
#5
|
![]() Помощник капитана ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 601 Пол: Мужской Реальное имя: Артем Репутация: ![]() ![]() ![]() |
Хотелось-бы узнать:
1. После заполнения данной записи, что с ней делается? Она записываетсяв файл, и потом прога номер 2 считывает из файла этот вопрос и варианты? Или как? 2. Пользователь может задавать несколько вопросов или только один? ![]() Добавлено через 0.00001 сек. Ой прости volvo, когда писал вопрос, твоего ответа еще не было... ![]() Сообщение отредактировано: Артемий2 - 14.02.2007 17:59 -------------------- Dum spiro spero!
|
Гость |
![]()
Сообщение
#6
|
Гость ![]() |
Ладно! 1)тип непосредственный ввод(Вопрос: кто написал "война и мир"? Ответ:Толстой. Л.Н Толстой . Толстой Л.Н - все 3 ответа верны
какой бы мы не ввели при решении) 2) один правильный из нескольких (Вопрос:кто написал "война и мир"? варианты ответов:1)Пушкин 2)Лермонтов 3)Толстой 4)Карамзин Прав.ответ: Толстой) 3) несколько правильных из нескольких (Вопрос:Столицей какой страны является Лондон? варианты ответов:1)Англия 2)Великобритания 3)Польша 4)Россия Прав.ответ:1 и 2 4)на соответствие(это помоему самый неприятный тип) Составить соответствие(страна-столица): 1)Англия 1)Москва 2)Украина 2)Киев 3)Россия 3) Лондон Прав.ответ:1-3,2-2,3-1 5)на сортировку Задание:Расположите события в хронологической последоват-ти(от самого раннего к более позднему): 1)Война с Наполеоном 2)Великая Отечественная Война 3)"Ледовое побоище" Прав.ответ:3.1.2 ----------------------------------------------------------------------------------- Что касается структуры процедуры. то это не обязательный вариант. можно и по другому. но только желательно чтобы вся вводимая информация хранилось в 1-м файле. Что касается кол-ва вопросов. то их кол-во задётся при создании теста.Прога номер 2 считывает из файла эти вопросы и варианты. P.S:Спасибо за интерес к моей проблеме! |
Артемий |
![]()
Сообщение
#7
|
![]() Помощник капитана ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 601 Пол: Мужской Реальное имя: Артем Репутация: ![]() ![]() ![]() |
По первому - надо все-таки вводить количество правильных ответов (допутим их 4 - Толстой. Л.Н Толстой . Толстой Л.Н,Карамзин) или скоко ответов просто, стоко ответов и правильных?(допутим их 3 - Толстой. Л.Н Толстой . Толстой Л.Н - все правильные, и получается скоко ответов просто - стоко и правильных)
-------------------- Dum spiro spero!
|
Артемий |
![]()
Сообщение
#8
|
![]() Помощник капитана ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 601 Пол: Мужской Реальное имя: Артем Репутация: ![]() ![]() ![]() |
Вот,смотри я дам наброски, если что-то не так, то пиши! Данные записываются в ban.dat.
(тут только по первым трем вариантам) type
Test = record
Vopros: String[50];
Typ: Integer;
Kolotv: byte;
KolotvCor: byte;
Otvety: array [1..100] of string[40];
Prav: array [1..100] of string[40];
end;
var
count,i,i1,i2,countall,i3: Integer;
pravil: byte;
s: string[40];
T: Test;
F: file of Test;
Ban: array [1..1] of Test;
begin
writeln('Vvedite dannue: ');
writeln('Skoko voprosov budet?');
readln(countall);
for i3:=1 to countall do begin
writeln('Vopros: ',i3);
readln(T.Vopros);
writeln('Typ:');
writeln('1 - Neposredstvenny,2 - OneInMany,3 - ManyInMany,4 - Conformable,5 - Sortirovka');
readln(T.Typ);
writeln('Kolychestvo:');
readln(T.Kolotv);
for i1:= 1 to T.Kolotv do
begin
writeln('Otvet nomer ',i1);
readln(T.Otvety[i1]);
end;
case T.Typ of
1: begin writeln('Skoko prav otvetov?'); readln(pravil); for i2:=1 to pravil do begin writeln('Pravel otvet nomer ',i2);
readln(T.Prav[i2]); end; end;
2: begin writeln('Prav otvet: '); readln(T.Prav[1]); end;
3: begin writeln('Skoko prav otvetov?'); readln(pravil); for i2:=1 to pravil do begin writeln('Pravel otvet nomer ',i2);
readln(T.Prav[i2]); end; end;
end;
Assign(F,'ban.dat');
Rewrite(F);
for i:= 1 to 1 do
Write(F,Ban[i]);
end;
-------------------- Dum spiro spero!
|
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Я бы делал так (если тебя заинтересует ТАКОЙ вариант - пиши, будем развивать дальше, это не так сложно, как кажется на первый взгляд, если сделать парочку маленьких дополнительных процедур, объем приведенного фрагмента сократится вдвое):
{ максимально возможное количество ответов на вопрос ... }
const
max_answers = 10;
type
{ здесь описываем 5 типов ответов, каждый из них будет обраратываться по-своему }
QuestType = (ans1, ans2, ans3, ans4, ans5);
{ промежуточная структура, для хранения соответствий между двумя вариантами - для 4-го типа }
TS = record
first, second: integer;
end;
{ это - запись с вариантами... то, о чем я говорил выше }
TTest = record
quest: string[50];
ans_count: 1 .. max_answers;
answers: array[1 .. max_answers] of string[50];
case qType: QuestType of
ans1: (
good_ans1: string[50];
);
ans2: (
good_ans2: integer;
);
ans3: (
good_count3: 1 .. max_answers;
good_ans3: array[1 .. max_answers] of integer;
);
ans4: (
good_count4: 1 .. max_answers;
good_ans4: array[1 .. max_answers] of TS;
);
ans5: (
good_ans5: array[1 .. max_answers] of integer;
);
end;
{ заодно описываем и тип файла }
TestFile = file of TTest;
{ вот процедура ввода данных для каждого вопроса/ответа (результат вернется через R)}
procedure get_quest(var R: TTest);
var
i, X: integer;
begin
{ для начала - вводим сам вопрос }
write('Вопрос: '); readln(R.quest);
{ теперь - тип, к которому он относится (1 .. 5) ... }
write('type [1 .. 5]: ');
repeat
readln(X);
until (X >= 1) and (X <= 5);
{ ... и заносим этот тип сразу в структуру }
R.qType := QuestType(X - 1);
{
теперь в зависимости от типа, делаем соответствующие
запросы для ввода необходимых данных
}
case R.qType of
ans1:
begin { вопрос на непосредственный ввод ответа: }
R.ans_count := 0;
{ запросим только примерный ответ }
write('Ответ: '); readln(R.good_ans1);
end;
ans2 .. ans5:
begin
{ во всех остальных случаях надо знать количество вариантов ответов }
write('Сколько будет вариантов ответов [1 .. ', max_answers, '] ? :');
repeat
readln(X);
until (X >= 1) and (X <= max_answers);
R.ans_count := X; { заносим его в структуру }
{ и запрашиваем, собственно, сами варианты }
for i := 1 to R.ans_count do begin
write('Ответ №', i); readln(R.answers[i]);
end;
end;
end;
{ теперь переходим к заполнению всех необходимых полей }
writeln('good answers:');
case R.qType of
ans2: { Тип 2: вопрос с одним правильным ответом }
begin
write('Тип #2 - Введите номер правильного ответа:');
repeat
readln(X);
until (X >= 1) and (X <= R.ans_count);
R.good_ans2 := X; { сохраняем в структуре }
end;
ans3: { Тип 3: несколько правильных ответов }
begin
i := 1; { здесь у нас будет цикл }
repeat
write('Тип #3 - Введите очередной номер правильного ответа (0 для выхода)');
repeat
readln(X);
until (X >= 0) and (X <= R.ans_count);
if X <> 0 then begin { что-то было введено, кроме 0 - дописать это в список ответов }
R.good_ans3[i] := X;
inc(i);
end;
until X = 0; { ввели 0 - надо выходить из цикла }
end;
ans4: { Тип 4 - соответствия }
begin
write('Тип #4 - введите пары (первый - второй)');
for i := 1 to R.ans_count do begin
write('первый:');
repeat
readln(X);
until (X >= 1) and (X <= R.ans_count);
R.good_ans4[i].first := X;
write('второй:');
repeat
readln(X);
until (X >= 1) and (X <= R.ans_count);
R.good_ans4[i].second := X;
end;
end;
ans5: { Тип 5 - сортировка }
begin
write('Тип #5 - введите правильно отсортированные номера ответов:');
for i := 1 to R.ans_count do begin
write('должен быть №', i);
repeat
readln(X);
until (X >= 1) and (X <= R.ans_count);
R.good_ans5[i] := X;
end;
end;
end;
end;
var
Rec: TTest;
F: TestFile;
begin
get_quest(Rec);
{ собственно, здесь - запись структуры в файл, все это делать в цикле }
end.
Как видишь, никаких обработок ошибок (кроме контроля границ номеров) не производится, что дает мне, например, возможность, ввести все 3 одинаковых индекса для вопроса 5-го типа... Это все будет добавлено в дальнейшем, если ты вообще захочешь эту программу продолжить...Цитата По первому - надо все-таки вводить количество правильных ответов Я бы не стал этого делать (и как видишь, не сделал)... Поступаем проще - часть программы, ПРИНИМАЮЩАЯ ответ тестируемого, проверяет, допустим, схожесть строк (например, по Левинштейну) и по проценту похожести делает вывод: принимать или не принимать ответ как правильный... |
Гость |
![]()
Сообщение
#10
|
Гость ![]() |
Прежде всего спасибо за помощь!
Посмотрел твой набросок, очень даже неплохо, но у меня появились вопросы: 1)Что такое Ban: array [1..1] of Test и почему 1..1? 2)И в конце for i:= 1 to 1 do Write(F,Ban[i]); Непонятное для меня место. Ответь , если не сложно. ------------------------------------------------------------------------------- Volvo пока писал ответ Артемию2.появился твой. я обязательно проанализирую твою процедуру и напишу вопросы или своё мнение. Спасибо огромное! |
Артемий |
![]()
Сообщение
#11
|
![]() Помощник капитана ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 601 Пол: Мужской Реальное имя: Артем Репутация: ![]() ![]() ![]() |
Прости, вот поправка:
Ban[1]:=T; {И дальше по старому...}
Добавь это между end; и Assign(F,'ban.dat'); Добавлено через 4 мин. Цитата 1)Что такое Ban: array [1..1] of Test и почему 1..1? Массив с одной записью нашего Test=record. 1..1 потому что делаем в цикле, и я не вижу смысла делать несколько записей, хватит одной.. Цитата 2)И в конце for i:= 1 to 1 doWrite(F,Ban[i]);Непонятное для меня место. Сдесь мы записываем в ban.dat все наши данные, которые мы заполнили, то есть всю запись с введенными данными... ![]() Добавлено через 59 сек. Прости нет времени доделать пункт 4 и 5, но volvo дал хороший код, попробуй им.... Сообщение отредактировано: Артемий2 - 14.02.2007 20:40 -------------------- Dum spiro spero!
|
Гость |
![]() ![]()
Сообщение
#12
|
Гость ![]() |
Спасибо за прогу Volvo
![]() но внимательно посмотрев увидел, что она довольно понятная. Но каким образом её можно упростить? ![]() |
volvo |
![]()
Сообщение
#13
|
Гость ![]() |
Цитата каким образом её можно упростить? Я знал, что ты это спросишь... ![]()
![]() |
Артемий |
![]()
Сообщение
#14
|
![]() Помощник капитана ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 601 Пол: Мужской Реальное имя: Артем Репутация: ![]() ![]() ![]() |
Если никто не возражает, покажу свой способ..
(тут как и раньше в dat файл, а из него потом можно считать данные...) type
Test = record
Vopros: String[50];
Typ: Integer;
Kolotv: byte;
KolotvCor: byte;
Variants: array [1..100] of string[40];
Kolonky1: array [1..100] of string[40];
Kolonky2: array [1..100] of string[40];
Otvety: array [1..100] of string[40];
Prav: array [1..100] of string[40];
end;
label 10;
var
count,i,i1,i2,countall,i3,i4,i5,i6,i7,i8: Integer;
pravil,koll,variantsByte: byte;
s: string[40];
T: Test;
F: file of Test;
Ban: array [1..10] of Test;
begin
i4:=0;
Assign(F,'ban.dat');
Rewrite(F);
writeln('Vvedite dannue: ');
writeln('Skoko voprosov budet?');
readln(countall);
for i3:=1 to countall do begin
writeln('Vopros: ',i3);
readln(T.Vopros);
writeln('Typ:');
writeln('1 - Neposredstvenny,2 - OneInMany,3 - ManyInMany,4 - Conformable,5 - Sortirovka');
readln(T.Typ);
if T.Typ = 4 or 5 then goto 10;
writeln('Kolychestvo otvetov:');
readln(T.Kolotv);
for i1:= 1 to T.Kolotv do
begin
writeln('Otvet nomer ',i1);
readln(T.Otvety[i1]);
end;
10: case T.Typ of
1: begin writeln('Skoko prav otvetov?'); readln(pravil); for i2:=1 to pravil do begin writeln('Pravel otvet nomer ',i2);
readln(T.Prav[i2]); end; end;
2: begin writeln('Prav otvet: '); readln(T.Prav[1]); end;
3: begin writeln('Skoko prav otvetov?'); readln(pravil); for i2:=1 to pravil do begin writeln('Pravel otvet nomer ',i2);
readln(T.Prav[i2]); end; end;
4: begin writeln('Skoko kolonok?'); readln(koll); for i5:=1 to koll do begin writeln('Kolonka 1 variant ',i5);
readln(T.kolonky1[i5]); end; for i6:=1 to koll do begin writeln('Kolonka 2 variant ',i6);
readln(T.kolonky2[i6]); end; for i7:=1 to koll do begin writeln('Prav otvet ',i7,'?'); readln(T.Prav[i7]); end; end;
5: begin writeln('Skoko variantov?'); readln(variantsByte); for i8:=1 to variantsByte do begin writeln('Variant №',i8);
readln(T.Variants[i8]); end; writeln('Prav otvet?'); readln(T.prav[1]); end;
end;
i4:=i4+1;
Ban[i4]:=T;
Write(F,Ban[i4]);
end;
Сообщение отредактировано: Артемий2 - 15.02.2007 19:17 -------------------- Dum spiro spero!
|
glebik |
![]() ![]()
Сообщение
#15
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: ![]() ![]() ![]() |
Volvo и Артемий2
![]() прозьбу. А тут такая большая помощь с вашей стороны , побольше бы таких отзывчивых людей... ![]() Теперь я займусь 2-ой прогой и уж простите меня за назойливость, но наверняка у меня будут трудности и вопросы, поэтому я расчитываю на вашу помощь. Если вы не будете мне помогать то я не обижусь, ведь вы итак много зделали для меня. СПАСИБО!!!!!! ![]() |
glebik |
![]() ![]()
Сообщение
#16
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: ![]() ![]() ![]() |
Начал писать прогу исрузу столкнулся с проблемами:
![]() 1) Volvo ты что-то писал об обработке 1-го типа по Левинштейну, впервые слышу, как это реализовать? 2)Ёще не знаю как обработать 4 и 5 типы вопрсов. Подскажите, что делать, пожалуйста! ![]() |
volvo |
![]()
Сообщение
#17
|
Гость ![]() |
Цитата об обработке 1-го типа по Левинштейну Нет, я уже посмотрел - это не совсем подойдет... Дело в том, что функция похожести двух строк, например, для "L.N. Tolstoy" и "Tolstoy L.N." выдаст, что строки похожи на 14%, а этого очень мало... Надо искать другой путь... Например, задавать список слов, котовые должны быть в ответе, и потом каждое слово из введенного пользователем ответа проверять на присутствие в шаблоне... Например, для твоего варианта, подойдет так:Шаблонный ответ: "Толстой Лев Л. Н." тогда, если отвечающий введет, например, "Лев Толстой" - то проверяем: отдельно Лев есть в шаблонной строке? Есть. Отдельно Толстой есть? Есть... Все, значит, правильно ответил... Точно так же будет, если введут "Л. Толстой" и если "Л. Н. Толстой" - все эти варианты будут признаны правильными, посколько из 2-х или 3-х слов ответа нет ни одного НЕсовпадения с шаблоном... Идея понятна? Для большей гарантии я бы еще перед сравнением строк переводил их ОБЕ в верхний или нижний регистр (функция для этого есть здесь: Строки - называется StrLower или StrUpper)... С обработкой четвертого и пятого типов вопросов вообще нет проблем: в четвертом ты точно так же, как я показывал, просишь пользователя ввести R.ans_count пар чисел, а в пятом - столько же целых чисел, и потом просто сравниваешь введенные пары/числа с тем, что хранится соответственно в R.good_ans4 или R.good_ans5... Если есть ПОЛНОЕ совпадение - ответ правильный, иначе - неверно... |
Артемий |
![]()
Сообщение
#18
|
![]() Помощник капитана ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 601 Пол: Мужской Реальное имя: Артем Репутация: ![]() ![]() ![]() |
glebik, вот если надо, я набросал тестер, который на основе первого моего варианта считывает инфу из ban.bat и преобразут в тест, где пользователь сможет выполнять его....смотри...
type
Test = record
Vopros: String[50];
Typ: Integer;
Kolotv: byte;
KolotvCor: byte;
Variants: array [1..100] of string[40];
Kolonky1: array [1..100] of string[40];
Kolonky2: array [1..100] of string[40];
Otvety: array [1..100] of string[40];
Prav: array [1..100] of string[40];
end;
var
i,i2,i3,i4,i5,int,int2: integer;
labell: byte;
s,s2,s3,otvet: string;
ArrStrPrav: array [1..100] of string;
Ban: array [1..10] of Test;
F: file of Test;
T: Test;
begin
i:=0;
i3:=0;
i4:=0;
i5:=0;
writeln('Reading...');
assign(F,'ban.dat');
Reset(F);
while not Eof(F) do begin
i:=i+1;
Read(F,Ban[i]);
end;
for i2:=1 to i do begin
writeln('Vopros ',i2);
T:=Ban[i2];
writeln(T.Vopros);
case T.Typ of
1: begin repeat i3:=i3+1; s:=T.Prav[i3]; ArrStrPrav[i3]:=s; until s='';
readln(otvet);
for int:=1 to i3-1 do begin if otvet=ArrStrPrav[int] then begin
writeln('Otvet pravelen!'); labell:=0; end else labell:=labell+10; Continue; end;
if labell=10*(i3-1) then writeln('Otvet neveren!!'); end;
2: begin readln(otvet); if otvet=T.Prav[1] then writeln('Otvet veren!') else
writeln('Otvet neveren!'); end;
3: begin repeat i3:=i3+1; s:=T.Prav[i3]; ArrStrPrav[i3]:=s; until s='';
readln(otvet);
for int:=1 to i3-1 do begin if otvet=ArrStrPrav[int] then begin
writeln('Otvet pravelen!'); labell:=0; end else labell:=labell+10; Continue; end;
if labell=10*(i3-1) then writeln('Otvet neveren!!'); end;
4: begin writeln; writeln('Kolonka 1'); repeat i3:=i3+1; s:=T.kolonky1[i3]; writeln(s);
until s=''; writeln('Kolonka 2'); repeat i4:=i4+1; s2:=T.kolonky2[i4]; writeln(s2);
until s2=''; repeat i5:=i5+1; readln(otvet); ArrStrPrav[i5]:=otvet; s3:=T.Prav[i5];
until s3=''; for int2:=1 to i5-1 do begin if ArrStrPrav[int2]=T.Prav[int2] then begin
labell:=0; end else labell:=10; if labell=0 then begin writeln('Verno!!!');break; end
else writeln('Neverno!'); break; end; end;
5: begin repeat i3:=i3+1; s:=T.Variants[i3]; writeln(s); until s=''; readln(otvet);
if otvet=T.Prav[1] then writeln('Pravilno!') else writeln('Nepravilno!'); end;
end;
end;
readln
-------------------- Dum spiro spero!
|
glebik |
![]() ![]()
Сообщение
#19
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: ![]() ![]() ![]() |
Артемий2
![]() комп выдаёт ошибку:Structure too large. И вообще за что Ban: array [1..10] of Test отвечает? И что такое label 10? ![]() |
volvo |
![]()
Сообщение
#20
|
Гость ![]() |
Цитата в твоей 1-й проге , при запуске в строчке Ban: array [1..10] of Test А дело все в том, что Артемий2 никак не хочет понять, что для проверки работы программ из этого раздела НЕЛЬЗЯ пользоваться Дельфи... Турбо Паскаль не позволит выделить во-первых, одну структуру размером больше 65520 байт (а Ban имеет размер 80540 байт), а во-вторых, сумма всех размеров статических переменных не должна превышать те же самые 65520 байт...комп выдаёт ошибку:Structure too large. |
![]() ![]() |
![]() |
Текстовая версия | 28.07.2025 3:46 |