Форум программистов, компьютерный форум, киберфорум
Наши страницы
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Jin200611
14 / 14 / 1
Регистрация: 09.01.2012
Сообщений: 253
#1

Подправьте пожалуйста в коде

09.01.2012, 15:59. Просмотров 534. Ответов 6
Метки нет (Все метки)

Помогите пожалуйста с кодом, 3 дня сижу над ним. Там скорее всего пустяк, но пока не получается. заранее спасибо.

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

файл Lab_3_A.TXT в нем данные: 17 24 27 31 38 39 41 45 49 89 117 134 158 174 189 192 197 199 200
файл Lab_3_В.TXT в нем данные: 14 25 27 32 39 40 44 45 59 91 117 135 159 175 192 193 197 198 200

у меня получается что вывод в файл Lab_3_С.TXT все числа.

вот сам код.
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
program lab3;
const
File1='C:\tr\kontr 2\Lab_3_A.txt';
File2='C:\tr\kontr 2\Lab_3_B.txt';
File3='C:\tr\kontr 2\Lab_3_C.txt';
var
F1,F2,F3: Text;
i,j,k,n: Integer;
Arr: array[1..100] of Integer;
begin
Assign(F1, File1);
Assign(F2, File2);
Assign(F3, File3);
Reset(F1);
i:=0;
while not Eof(F1) do begin
i:=i+1;
Read(F1, Arr[i]);
end;
Reset(F2);
while not Eof(F2) do begin
Read(F2, n);
j:=1;
while (j<=i) and (Arr[j]<n) do begin
j:=j+1;
end;
if j>i then begin
Arr[j]:=n;
end else begin
for k:=i downto j do begin
Arr[k+1]:=Arr[k];
end;
Arr[j]:=n;
end;
i:=i+1;
end;
Rewrite(F3);
for j:=1 to i do begin
if j>1 then Write(F3);
Write(F3,' ',Arr[kon]);
end;
Close(F1);
Close(F2);
Close(F3);
Writeln(Результаты записаны в файл:');
Writeln(File3);
Readln;
end.

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.01.2012, 15:59
Ответы с готовыми решениями:

подправьте цикл пожалуйста
{$f+} program Oo; const n=11; h=0.1; x=1; var...

найти ошибку в коде, пожалуйста
Нам дан массив с 5 елементами: нужно посортировать в порядке убывания: ...

Найдите пожалуйста ошибку в коде
program EMV_RZ_1; uses crt; var eps,x,a,b:real; function f(x:real):real;...

Пожалуйста, нужно исправить ошибку в коде
Моё задание &quot;Даны две строки. Пусть n1 - число слов в первой строке, а n2 - во...

Помогите пожалуйста исправить недоработку в коде программы.
program Hermite; var i,j,s,n,k,i1,m,j1,i2,j2: integer; b: array of real; x:...

6
Puporev
Модератор
54216 / 41849 / 28920
Регистрация: 18.05.2008
Сообщений: 98,513
09.01.2012, 16:12 #2
Цитата Сообщение от Jin200611 Посмотреть сообщение
Пусть файлы А и В, компоненты которых являются целыми числами,
Вообще-то так пишут о типизированных файлах
Pascal
1
var f:file of integer;
1
Jin200611
14 / 14 / 1
Регистрация: 09.01.2012
Сообщений: 253
09.01.2012, 16:27  [ТС] #3
спасибо.
А подскажите, где у меня ошибка, почкму выводятся все числа с повторами
0 14 17 24 25 27 27 31 32 38 39 39 40 41 44 45 45 49 59 89 91 117 117 134 135 158 159 174 175 189 192 192 193 197 197 198 199 200 200 0
А также нули в начале и конце файла.
Заранее спасибо
0
Puporev
Модератор
54216 / 41849 / 28920
Регистрация: 18.05.2008
Сообщений: 98,513
09.01.2012, 16:42 #4
Цитата Сообщение от Jin200611 Посмотреть сообщение
А подскажите, где у меня ошибка,
Да у Вас вообще пограмма непонятно как написана и по сути неверно.
В файлах числа должны быть записаны через пробелы после последнего числа ничего не должно быть, ни пробела, нм табуляции, ни пустой строки.
Считываете каждый файл в отдельный массив, сливаете их, пример есть здесь.
http://www.cyberforum.ru/post1017698.html
и здесь.
http://www.cyberforum.ru/post175170.html
После этого нужно удалить повторяющиеся элементы из слитого массива путем сдвига влево и уменьшения размера массива.
Pascal
1
2
3
4
5
6
if a[i]=a[i-1] then
 begin
  for j:=i to n-1 do
  a[j]:=a[j+1];
  n:=n-1;
 end;
Добавлено через 52 секунды
Но я все таки думаю что задание у Вас было на типизированные файлы без использования массивов и все Вы пишете зря.
1
Jin200611
14 / 14 / 1
Регистрация: 09.01.2012
Сообщений: 253
09.01.2012, 17:36  [ТС] #5
Огромное спасибо.
Задание по теме файлы и файловые переменные, ограничений на использование массивов нет, также как и на использование типизированных и нетипизированных файлов.

Выдает не правильно: 0 27 39 45 117 192 197 200
а надо: 14 17 24 25 27 31 32 38 39 40 41 44 45 49 59 89 91 117 134 135 158 159 174 175 189 192 193 197 198 199 200
Может быть я его не правильно использую. Если возможно подправьте на моем коде. Спасибо.
0
Puporev
Модератор
54216 / 41849 / 28920
Регистрация: 18.05.2008
Сообщений: 98,513
09.01.2012, 18:06 #6
С выводом на экран для проверки. Длина массивов в файлах не обязательно одинаковая.
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
program lab3;
uses crt;
const
File1='A.txt';
File2='B.txt';
File3='C.txt';
var F1,F2,F3: Text;
    na,nb,nc,i,j: Integer;
    a,b,c: array[1..1000] of Integer;
begin
clrscr;
Assign(F1, File1);
Assign(F2, File2);
Assign(F3, File3);
Reset(F1);
Reset(F2);
Rewrite(F3);
{читаем файл А}
na:=0;
while not Eof(F1) do
 begin
  na:=na+1;
  Read(F1,a[na]);
 end;
close(f1);
writeln('Файл А'); {для проверки чтения}
for i:=1 to na do
write(a[i]:4);
writeln;
{читаем файл В}
nb:=0;
while not Eof(F2) do
 begin
  nb:=nb+1;
  Read(F2,b[nb]);
 end;
close(f2);
writeln('Файл B');{для проверки чтения}
for i:=1 to nb do
write(b[i]:4);
writeln;
{сливаем массивы по возрастанию}
nc:=0;
i:=1; j:=1;{устанавливаем счётчики}
while (i<=na) or (j<=nb) do {пока не дошли до конца каждого из массивов}
  begin
   if (i<=na) and (j<=nb) then {если оба массива ещё не закончились}
     begin
       if a[i]<b[j] then {то пишем в новый массив меньший из текущих элементов}
        begin
         inc (nc); {следующий элемент конечного массива}
         c[nc]:= a[i];
         inc (i); {переходим к следующему элементу соответствующего массива}
         end
       else
        begin
         inc (nc);
         c[nc]:= b[j];
         inc (j);
        end
     end
   else if j>nb then {иначе один из массивов уже закончился}
     begin {и мы пишем из того, в котором ещё есть элементы}
       inc (nc);
       c[nc]:= a[i];
       inc (i);
     end
   else if i>na then
     begin
       inc (nc);
       c[nc]:= b[j];
       inc (j);
     end;
  end;
writeln('Отсортированный массив');
for i:=1 to nc do
write(c[i]:4);
writeln;
{удаляем повторы}
i:=2;
while i<=nc do
if c[i]=c[i-1] then
 begin
  if i=nc then dec(nc)
  else
   begin
    for j:=i to nc-1 do
    c[j]:=c[j+1];
    dec(nc);
   end;
 end
else i:=i+1;
writeln('Отсортированный массив без повторов');
for i:=1 to nc do
write(c[i]:4);
for i:=1 to nc do
write(f3,' ',c[i]);
Close(F3);
readln
end.
0
Jin200611
14 / 14 / 1
Регистрация: 09.01.2012
Сообщений: 253
09.01.2012, 18:38  [ТС] #7
Огромное спасибо. Помогли. Работает идеально, вот что значит профи. Разобрался почему выдает нули в начале и в конце выходного файла. Еще раз спасибо.
0
09.01.2012, 18:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.01.2012, 18:38

Подправьте программку
Привет всем))решал задачку,программа не запускается в чём ошибка подскажите...

Найти A встепени N(подправьте код плз)
Дано вещественное число A и целое число N (&gt; 0). Найти A в степе- ни N : AN...

Подправьте код задачи про среднее арифметическое
Дано n количество деревьев, ввести в цикле у каждого дерева диаметр и посчитать...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru