0

пишу программную реализацию кода AMI на языке Си. Кодирование происходит про принципу: на вход поступает последовательность символов, состоящая из нулей и единиц. Нуль всегда остаётся нулём, а единица меняется на единицу или на -единицу, взависимости от предыдущего уровня.

Необходимо написать кодер и декодер. Я использую 3 файла input.txt -исходная последовательность, output.txt - закодированная последовательность, decoded.txt - раскодированная последовательность.

Однако, в decoded появляется один лишний нуль в конце, предполагаю, что это связано с некорректной работой feof() в данной ситуации.

#include <stdio.h>
#include <conio.h>

int main(){

int srs; int prev_unit_level = 1;

FILE inp, out;

inp = fopen("input.txt","r"); out = fopen("output.txt","w");

while(!feof(inp)){

fscanf(inp,&quot;%d&quot;,&amp;srs);

if(srs == 0){
fprintf(out,&quot;%d &quot;,srs);
}

if(srs == 1){

    fprintf(out,&quot;%d &quot;,prev_unit_level);
    prev_unit_level = - prev_unit_level;  

}

}

fclose(inp); fclose(out);

prev_unit_level = 1;

inp = fopen("output.txt","r"); out = fopen("decoded.txt","w");

while(!feof(inp)){

fscanf(inp,&quot;%d&quot;,&amp;srs);

if(srs == 0){
fprintf(out,&quot;%d &quot;,srs);
}

else{

    fprintf(out,&quot;%d &quot;,prev_unit_level);


}

}

return 0;

}

Dmitry
  • 7,859
Viner
  • 1

0 Answers0