Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ Перевести программу на с++

Автор: Domin9es 4.01.2008 11:39

Помогите переделать программу в с++. Для меня особенно непонятно формирование файла с


Файлы а и в, компоненты которых являются целыми числами, упорядочены по неубыванию. Получить в файле с все числа файлов а и в без повторений. Файл с должен быть упорядочен по неубыванию. Файлы а и в заполняются вручную.

 
program kk;
var a,b,c:file of integer;
x,y,t:integer;
begin
clrscr;
assign(a,'a.int');
assign(b,'b.int');
assign(c,'c.int');
{ Vvod znacheniy v faylu a,b}
writeln('Vvedite chisla iz fayla A, v konce - 0');
rewrite(a);
readln(x);
while x<>0 do
begin
write(a,x);
readln(x);
end;
close(a);
writeln('Vvedite chisla iz fayla B, v konce - 0');
rewrite(b);
readln(x);
while x<>0 do
begin
write(b,x);
readln(x);
end;
close(b);
{Formirovanie fayla C};
reset(a); reset(b); rewrite©;
read(a,x); read(b,y);
if x<y then t:=x-1 else t:=y-1;
while not(eof(a)) and not(eof(b)) do
begin
while (x<=t) and not(eof(a)) do read(a,x);
while (y<=t) and not(eof(b)) do read(b,y);
if (x<y) and (x>t) then
begin
t:=x;
write(c,t);
end
else if (y>t) then
begin
t:=y;
write(c,t);
end;
end;
while not(eof(a)) do
begin
read(a,x);
if x>t then
begin
t:=x;
write(c,t);
end;
end;
close(a);
while not(eof(b)) do
begin
read(b,x);
if x>t then
begin
t:=x;
write(c,t);
end;
end;
close(b); close©;
{Vivod sodergimogo fayla C na ekran}
writeln('Itogovyj fayl:');
reset©;
while not(eof©) do
begin
read(c,x);
write(x:5);
end;
readln;
end.


Автор: volvo 4.01.2008 13:38

Программа же переводится практически дословно:

#include <stdio.h>

int main() {
FILE *a, *b, *c;
int x, y, t;

puts("Vvedite chisla iz fayla A, v konce - 0\n");
a = fopen("a.int", "wb");
scanf("%d", &x);
while(x) {
fwrite(&x, sizeof(x), 1, a);
scanf("%d", &x);
}
fclose(a);

puts("Vvedite chisla iz fayla B, v konce - 0\n");
b = fopen("b.int", "wb");
scanf("%d", &x);
while(x) {
fwrite(&x, sizeof(x), 1, b);
scanf("%d", &x);
}
fclose(b);

/* Formirovanie fayla C */
a = fopen("a.int", "rb");
b = fopen("b.int", "rb");
c = fopen("c.int", "wb");
fread(&x, sizeof(x), 1, a);
fread(&y, sizeof(y), 1, b);

t = (x < y) ? (x - 1) : (y - 1);
while( !feof(a) && !feof(b) ) {
while((x <= t) && !feof(a)) fread(&x, sizeof(x), 1, a);
while((y <= t) && !feof(b)) fread(&y, sizeof(y), 1, b);

if(x < y && x > t) {
t = x;
fwrite(&t, sizeof(t), 1, c);
}
else
if(y > t) {
t = y;
fwrite(&t, sizeof(t), 1, c);
}
}
while(!feof(a)) {
fread(&x, sizeof(x), 1, a);
if(x > t) {
t = x;
fwrite(&t, sizeof(t), 1, c);
}
}
fclose(a);

while(!feof(b)) {
fread(&x, sizeof(x), 1, b);
if(x > t) {
t = x;
fwrite(&t, sizeof(t), 1, c);
}
}
fclose(b);

fclose©;

/* Vivod sodergimogo fayla C na ekran */
puts("Itogovyj fayl:\n");
c = fopen("c.int", "rb");
while(1) {
fread(&x, sizeof(x), 1, c);
if(!feof©) printf("%5d", x);
else break;
}
fclose©;
return 0;
}

Кстати, если у тебя написано, что нужно
Цитата
Получить в файле с все числа файлов а и в без повторений
, то файл С будет упорядочен по возрастанию, одинаковых-то элементов нет...

Автор: Domin9es 4.01.2008 14:08

ДА, точно. Спасибо. Можете объяснить алгоритм формирования файла с.