Другие языки программирования и технологии

Непойму почему программа не работает (Задача по информатике(Pascal))

Вот сама задача: Для оптимизации передачи по цифровому каналу связи небольших объёмов медленно меняющихся данных, представленных в виде массива байтов фиксированной длиной 10 элементов со значениями от 0 до 99, используется его сжатие (архивация) по следующему правилу. Массив исходных, медленно меняющихся данных, можно представить в следующем виде: Число 1 Число 1 Число 1 Число 2 Число 2 Число 2 Число 2 Число 3 Число 2 Число 2 Массив сжатых данных формируется за счёт удаления последовательностей повторяющихся элементов, идущих подряд, и добавления количества элементов в таких последовательностях. Если значение предыдущего элемента отлично от значения последующего элемента, то считается, что такая последовательность состоит из единственного элемента. Следовательно, в приведённом примере число 1 повторялось 3 раза, число 2 – 4 раза и 2 раза (в правой части массива), а число 3 – 1 раз. Поэтому массив сжатых данных для приведённого примера массива исходных данных может быть представлен в следующем виде: Число 1 3 Число 2 4 Число 3 1 Число 2 2 Требуется произвести восстановление массива исходных данных на основании заданного массива сжатых данных. Формат входного файла Во входном файле Input.txt находится массив сжатых данных Y (0 <= Yi <= 255). Элементы массива разделены пробелами. Длина массива всегда чётная. Количество элементов массива от 2 до 20. Формат выходного файла В выходной файл Output.txt вывести массив исходных данных. Элементы массива разделить пробелами. Пример входных и выходных данных Input.txt 1 5 5 2 7 1 3 2 Output.txt 1 1 1 1 1 5 5 7 3 3
У вас ничего не читается из файла и ничего не записывается в файл.
Во-первых вы не указываете файлы, из/в которые читать/писать в операторах read и write.
Во-вторых ваш цикл while не выполнится ни разу, так как стоит условие "если конец файла".
И можно вообще обойтись без массивов.
Вариант с одним массивом:
var a:array[1..20] of byte;
n,k,m:integer;
fin,fout:text;
begin
assign(fin,'input.txt');
reset(fin);
n:=0;
while not eof(fin) do begin
inc(n); {или n:=n+1;}
read(fin,a[ n]);
end;
close(fin);
assign(fout,'output.txt');
rewrite(fout);
for k := 1 to n div 2 do
for m := 1 to a[ k*2] do
write(fout,a[ k*2-1],' ');
close(fout);
end.
Дмитрий Кабаров
Дмитрий Кабаров
51 590
Лучший ответ
For i:=3 to 20 do a:=0; что в этом месте происходит? попытка обнулить массив? а где индекс?
Ужыс какой-то. При чтении сохраняй счетчик прочитанных элементов в k, например. Потом крути цикл k/2 раз. Бери оттуда по индексу i*2-1 и i*2 элементы и пиши результат в выходной файл. У тебя пока что выводится только Write(b,' '); т. е. одни пробелы.
не вижу что бы ставили в файл информацию. кажись там аппенд идёт или чё-то в таком роде. ты открывать открываешь то а ставить в файл нет. вот и отсюда проблема. то что выше Сашка написал, забей он не догнал что мэйл. ру кушает [ i] как ббкод