2 / 2 / 2
Регистрация: 24.09.2012
Сообщений: 45
1

Сформировать из двух файлов третий

19.11.2012, 07:41. Показов 1090. Ответов 7
Метки нет (Все метки)

Даны два целочисленных файла, упорядоченных по возрастанию. Сформировать из данных файлов третий файл, который будет также упорядочен по следующему принципу: объединение (содержит числа, принадлежащие хотя бы одному из файлов)

Заранее спасибо !!!

Добавлено через 7 часов 32 минуты
Помогите пожалуйста )
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.11.2012, 07:41
Ответы с готовыми решениями:

Из двух массивов сформировать третий
по двум заданным одновременным формируется третий, содержащий попарно максимальные элементы.

Из двух векторов сформировать третий
Люди,помогите!!!У меня не получается=(.. Заранее спасибо!!!!! Составить схему алгоритма и...

Из двух одномерных массивов сформировать третий
Из двух одномерных массивов сформировать третий, элементами которого являются разность...

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

7
Почетный модератор
64272 / 47571 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
19.11.2012, 11:17 2
Если Вам нужно слияние двух отсортированных файлов без повторов, то вот пример.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
uses crt;
var f1,f2,f3:file of integer;
    n,i,j,a,b,c:integer;
begin
clrscr;
randomize;
assign(f1,'Name1');
rewrite(f1);
assign(f2,'Name2');
rewrite(f2);
assign(f3,'Name3');
rewrite(f3);
{создадим 2 исходных файла с числами по возрастанию}
write('Сколько чисел ввести в первый файл n=');
readln(n);
writeln('Содержание файла Name1:');
a:=1;
for i:=1 to n do
 begin
  a:=a+random(5);
  write(f1,a);
  write(a:4);
 end;
writeln;
writeln;
write('Сколько чисел ввести во второй файл n=');
readln(n);
writeln('Содержание файла Name2:');
a:=1;
for i:=1 to n do
 begin
  a:=a+random(5);
  write(f2,a);
  write(a:4);
 end;
writeln;
writeln;
reset(f1);
reset(f2);
i:=0;j:=0;
{выберем первый элемент и запишем меньший в 3 файл}
seek(f1,0);
read(f1,a);
seek(f2,0);
read(f2,b);
if a<b then write(f3,a) else write(f3,b);
{выберем остальные}
reset(f3);
while(i<filesize(f1))or(j<filesize(f2)) do{пока не конец обоих файлов}
 begin
  if (i<filesize(f1))and(j<filesize(f2)) then{если оба файла не закончились}
   begin
    seek(f1,i);{читаем в обоих файлах}
    read(f1,a);
    seek(f2,j);
    read(f2,b);
    if a<b then {выбираем меньшее}
     begin
      seek(f3,filesize(f3)-1);{смотрим последний в 3 файле}
      read(f3,c);
      if a<>c then{если не такой же}
       begin
        seek(f3,filesize(f3)); {пишем число в конец}
        write(f3,a);
       end;
      inc(i); {к следующему в 1 файле}
     end
    else {тоже если второе меньше}
     begin
      seek(f3,filesize(f3)-1);
      read(f3,c);
      if b<>c then
       begin
        seek(f3,filesize(f3));
        write(f3,b);
       end;
      inc(j);
     end;
   end
  else if j>filesize(f2)-1 then{если второй кончился}
   begin
    seek(f1,i);
    read(f1,a);
    seek(f3,filesize(f3)-1);
    read(f3,c);
    if a<>c then
     begin
      seek(f3,filesize(f3));
      write(f3,a);
     end;
    inc(i);
   end
  else if i>filesize(f1)-1 then{если первый кончился}
   begin
    seek(f2,j);
    read(f2,b);
    seek(f3,filesize(f3)-1);
    read(f3,c);
    if b<>c then
     begin
      seek(f3,filesize(f3));
      write(f3,b);
     end;
    inc(j);
   end;
 end;
close(f1);
close(f2);
reset(f3);
writeln('Слияние файлов:');
while not eof(f3) do
 begin
  read(f3,a);
  write(a:4);
 end;
close(f3);
readln
end.
1
2 / 2 / 2
Регистрация: 24.09.2012
Сообщений: 45
30.11.2012, 08:32  [ТС] 3
Ребята, подскажите пожалуйста, как можно упростить данный код задачи? Преподаватель сказала что здесь написано много лишнего, к примеру код с 40 строки по 46 можно заменить одной строчкой: while not EOF(f1) and not EOF(f2);
сказала что много кода повторяется, и эти повторения тоже нужно убрать (59, 63, 70, 74, 84, 88, 97 и 101 строки).
Помогите, ребята, пожалуйста, упростить это решение) Заранее спасибо)
0
Почетный модератор
64272 / 47571 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
30.11.2012, 09:16 4
Цитата Сообщение от Puporev Посмотреть сообщение
то вот пример.
А программу Вы должны сами писать.
0
2 / 2 / 2
Регистрация: 24.09.2012
Сообщений: 45
30.11.2012, 17:05  [ТС] 5
ПОмогите пожалуйста упростить данный код

Добавлено через 22 минуты
.....
0
509 / 387 / 210
Регистрация: 28.07.2011
Сообщений: 2,163
30.11.2012, 18:26 6
ага я сдал эту лабу как раз
там надо C определять после первого begin в цикле перебора файлов
дальше
seek убрать и просто написать write(f3,a)

а еще мне сказали для первых assign и rewrite и вывода начальных файлов сделать минипроцедурку
0
2 / 2 / 2
Регистрация: 24.09.2012
Сообщений: 45
30.11.2012, 23:38  [ТС] 7
Fakeoke, можешь скинуть полностью код сюда этой задачки ? =) Буду благодарна тебе ))
0
2 / 2 / 2
Регистрация: 24.09.2012
Сообщений: 45
03.12.2012, 12:32  [ТС] 8
.....

Добавлено через 12 часов 42 минуты
.....
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.12.2012, 12:32
Помогаю со студенческими работами здесь

Сформировать третий массив на основе двух исходных
Даны два массива А и В одинаковой размерности. Сформировать третий массив С, образованный из двух...

Сформировать третий список из элементов двух исходных
Добрый день! Подскажите пожалуйста с решением задачи. Сама задача: В общем, что у меня...

Сформировать третий массив из элементов двух исходных по правилу
Массив А и массив B - целых чисел массив C = A*B+k к- константа равная 15. нужно вывести массив...

Из двух файлов получить третий
Из двух файлов получить третий, элементами которого будут являться те, порядковый номер который...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru