Помощь - Поиск - Пользователи - Календарь
Полная версия: Перевести программу на с++
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
Domin9es
Помогите переделать программу в с++. Для меня особенно непонятно формирование файла с


Файлы а и в, компоненты которых являются целыми числами, упорядочены по неубыванию. Получить в файле с все числа файлов а и в без повторений. Файл с должен быть упорядочен по неубыванию. Файлы а и в заполняются вручную.
 
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
Программа же переводится практически дословно:

#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
ДА, точно. Спасибо. Можете объяснить алгоритм формирования файла с.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.