![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Задачка заключается в следующем:
Дано 2 одномерных массива,каждый из которых не содержит повторяющихся элементов.Построить 3-ий массив,содержащий все элементы,входящие хотя бы в один из массивов.В третьем массиве так же не допускаются повторяющиеся элементы. Я работала над ней,но в итоге-что-то не так-3-ий массив просто зануляет.Как исправить ошибку в коде-не знаю ![]() .Буду очень признательна тому,кто найдет и справит мне ошибку. Код:
program LR_4;
{$APPTYPE CONSOLE}
uses
SysUtils;
const n=4;
const m=4;
type Tmas1=array[1..n] of integer;
type Tmas2=array[1..m] of integer;
type Tmas3=array[1..n+m] of integer;
procedure vvod_ma(var a:array of integer);
var i:integer;
begin
writeln('vvedite 1 massiv');
for i:=1 to n do
begin
write('a[',i,']= ');readln(a[i]);
end;
end;
procedure vvod_mb(var b:array of integer);
var i:integer;
begin
writeln('vvedite 2 massiv');
for i:=1 to m do
begin
write('b[',i,']= ');readln(b[i]);
end;
end;
function stroim_c(const a:Tmas1;const b:Tmas2;var c:Tmas3):integer;
var i,j,k,naiden:integer;
begin
for i:=1 to n do
c[i]:=a[i];
k:=n;
for i:=1 to m do
begin
naiden:=0;
for j:=1 to k do
begin
if b[i]=c[j] then
begin
naiden:=1 ;
break;
end;
end;
if naiden=0 then
begin
k:=k+1;
c[k]:=b[i];
end;
end;
result:=k;
end;
procedure print_m(const a:array of integer;const b:array of integer;const c:array of integer);
var i:integer;
begin
writeln('1 massiv');
for i:=1 to n do
writeln(a[i]:4);
writeln;
writeln('2 massiv');
for i:=1 to m do
writeln(b[i]:4);
writeln;
writeln('3 massiv');
for i:=1 to n+m do
writeln(c[i]:4);
writeln;
end;
var a:Tmas1;b:Tmas2;c:Tmas3;
k:integer;
begin
writeln('massiv');
vvod_ma(a);
vvod_mb(b);
print_m(a,b,c);
k:=stroim_c(a,b,c);
writeln('k=',k);
readln;
end.lmikle: Хде теги??? Последний раз редактировалось Makotya, 20.05.2009 в 10:32. |
|
#2
|
||||
|
||||
|
Я бы сначала отсортировал, а потом строил по возрастанию элементов.
|
|
#3
|
|||
|
|||
|
а зачем мне снова все переделывать?
мне всего лишь нужны некоторые изменения в моем коде. Может быть ошибка в принте,может-в создании 3-го массива. |
|
#4
|
||||
|
||||
|
У вас условие задачи можно двояко трактовать.
1. Собрать в 3-массиве все неповторяющиеся элементы из первых двух. 2. Скопировать в 3-массиве любой из первых двух. И уточните, условие "не допускаются повторяющиеся элементы" относится к элементам в пределах одного массива, или всех сразу. |
|
#5
|
|||
|
|||
|
мы без всяких условий уже непосредственно в вводе с клавиатуры задаем числа.в первом не повтор и во втором тоже.
напр: 1ый 1 2 3 4 2ой 2 5 7 1 и 3ий массив д б: 1 2 3 4 5 7 вот в чем идея! |
|
#6
|
||||
|
||||
|
Задача по сути на сложение множеств. Так что лучше отсортировать
![]() |
|
#7
|
|||
|
|||
я не вижу смысла для сортировки |
|
#8
|
||||
|
||||
|
Понятно, возьмите TStringList он умеет избавляться от дубликатов.
|
|
#9
|
|||
|
|||
|
раз никто не помог,я помогла сама себе.ошибка в последних строчках всего лишь-а так все работает идеально!
выкладываю-вдруг кому то понадобится. Код:
program lr_4_T;
{$APPTYPE CONSOLE}
uses
SysUtils;
const n=4;
const m=4;
type Tmas1=array[1..n] of integer;
type Tmas2=array[1..m] of integer;
type Tmas3=array[1..n+m] of integer;
procedure vvod_ma(var a:array of integer);
var i:integer;
begin
writeln('vvedite 1 massiv');
for i:=1 to n do
begin
write('a[',i,']= ');readln(a[i]);
end;
end;
procedure vvod_mb(var b:array of integer);
var i:integer;
begin
writeln('vvedite 2 massiv');
for i:=1 to m do
begin
write('b[',i,']= ');readln(b[i]);
end;
end;
function stroim_c(const a:Tmas1;const b:Tmas2;var c:Tmas3):integer;
var i,j,k,naiden:integer;
begin
for i:=1 to n do
c[i]:=a[i];
k:=n;
for i:=1 to m do
begin
naiden:=0;
for j:=1 to k do
begin
if b[i]=c[j] then
begin
naiden:=1 ;
break;
end;
end;
if naiden=0 then
begin
k:=k+1;
c[k]:=b[i];
end;
end;
result:=k;
end;
procedure print_m(const a:array of integer;const b:array of integer;const c:array of integer);
var i:integer;
begin
writeln('1 massiv');
for i:=1 to n do
writeln(a[i]:4);
writeln;
writeln('2 massiv');
for i:=1 to m do
writeln(b[i]:4);
writeln;
writeln('3 massiv');
for i:=1 to n+m do
writeln(c[i]:4);
writeln;
end;
var a:Tmas1;b:Tmas2;c:Tmas3;
k:integer;
begin
writeln('massiv');
vvod_ma(a);
vvod_mb(b);
k:=stroim_c(a,b,c);
print_m(a,b,c);
writeln('k=',k);
readln;
end.Последний раз редактировалось Admin, 21.05.2009 в 10:12. |