Помогите напиать программку!!! СРОЧНО!!!
Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill
дано 2 одномерных массива.построить третий, который содержит элементы исходных 2-х массивов, но только по одному разу
1. Записать все элементы 1-го массива в 3-й.
2. Перебрать все элементы 2-го массива, сравнивая каждый из них с элементыми второго. Если не равен - добавить в 3-й массив.
2. Перебрать все элементы 2-го массива, сравнивая каждый из них с элементыми второго. Если не равен - добавить в 3-й массив.
Ни что так не ограничивает фантазию программиста, как компилятор...
А как ЭТО изменить чтоб все получилось?
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
const n=5;
type mas=array[1..n] of real;
mas1=array[1..n] of real;
mas2=array[1..(n+n)] of real;
procedure vvod1(var m:mas);
var i:integer;
begin
for i:=1 to n do
begin
write('m[',i,']=');
readln(m);
end;
end;
procedure vvod2(var m1:mas1);
var i:integer;
begin
for i:=1 to n do
begin
write('m1[',i,']=');
readln(m1);
end;
end;
procedure sum(const a:mas; const b:mas1; var c:mas2; var k:integer);
var i,j:integer;
t: real;
p:boolean;
begin
k:=0;
for i:=1 to n do
begin
t:= a;
p:= false;
for j:=1 to k do
if t=c[j] then
begin
p:=true;
break;
end
else
k:=k+1;
c[k]:=t;
end;
end;
procedure print(var c:mas2);
var i:integer;
begin
for i:=1 to n+n do
writeln(c);
writeln;
end;
var m:mas;
m1:mas1;
m2:mas2;
k: integer;
begin
writeln('vvedite 1 massiv');
vvod1(m);
writeln('vvedite 2 massiv');
vvod2(m1);
sum(m,m1,m2,k);
print(m2);
readln;
end.
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
const n=5;
type mas=array[1..n] of real;
mas1=array[1..n] of real;
mas2=array[1..(n+n)] of real;
procedure vvod1(var m:mas);
var i:integer;
begin
for i:=1 to n do
begin
write('m[',i,']=');
readln(m);
end;
end;
procedure vvod2(var m1:mas1);
var i:integer;
begin
for i:=1 to n do
begin
write('m1[',i,']=');
readln(m1);
end;
end;
procedure sum(const a:mas; const b:mas1; var c:mas2; var k:integer);
var i,j:integer;
t: real;
p:boolean;
begin
k:=0;
for i:=1 to n do
begin
t:= a;
p:= false;
for j:=1 to k do
if t=c[j] then
begin
p:=true;
break;
end
else
k:=k+1;
c[k]:=t;
end;
end;
procedure print(var c:mas2);
var i:integer;
begin
for i:=1 to n+n do
writeln(c);
writeln;
end;
var m:mas;
m1:mas1;
m2:mas2;
k: integer;
begin
writeln('vvedite 1 massiv');
vvod1(m);
writeln('vvedite 2 massiv');
vvod2(m1);
sum(m,m1,m2,k);
print(m2);
readln;
end.
Вообще, процедура суммирования должна выглядеть примерно так:
[syntax='Delphi']
function Sum:integer;
var
I,J,K:Integer;
B:Boolean;
begin
for i:=1 to N do
M3:=M1;
K:=N;
for i:=1 to N do
begin
B:=True;
For J:=1 to N do
if M2=M1[J] then
B:=False;
if B then
begin
Inc(K);
M3[K]:=M2;
end;
end;
Result:=K;
end;
[/syntax]
Функция возвращает число элементов в новом массиве.
P.S. Просьба, используйте теги
[noparse]
[syntax='Delphi']
//Код Delphi
[/syntax]
[/noparse]
при вставке кода.
[syntax='Delphi']
function Sum:integer;
var
I,J,K:Integer;
B:Boolean;
begin
for i:=1 to N do
M3:=M1;
K:=N;
for i:=1 to N do
begin
B:=True;
For J:=1 to N do
if M2=M1[J] then
B:=False;
if B then
begin
Inc(K);
M3[K]:=M2;
end;
end;
Result:=K;
end;
[/syntax]
Функция возвращает число элементов в новом массиве.
P.S. Просьба, используйте теги
[noparse]
[syntax='Delphi']
//Код Delphi
[/syntax]
[/noparse]
при вставке кода.
Ни что так не ограничивает фантазию программиста, как компилятор...
MOTOCoder писал(а):Код: Выделить всё
... B:=True; For J:=1 to N do if M2[I]=M1[J] then B:=False; if B then ...
Можно чуть-чуть оптимизировать
Код: Выделить всё
B:=True;
For J:=1 to N do
if M2[I]=M1[J] then
begin
B:=False;
break;
end;
if B then
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
-
- Сообщения: 106
- Зарегистрирован: 30 авг 2005, 02:53
- Откуда: Санкт-Петербург
- Контактная информация:
Вообще это называеться объединением массивов

а если в первом есть повторения?" писал(а):1. Записать все элементы 1-го массива в 3-й.

Жизнь ― это то, что с нами происходит, пока мы строим планы.© Джон Леннон.
ну в 3-ем массве должны быть числа только по 1 разу. значит из всех повторений надо чтб было 1 число
По задаче не очень понятно, я думал, что повторения допускаются.
В случае, если нужно без повторений, придется делать так:
[syntax='Delphi']
L:=0;
for I:=1 to K do
begin
B:=True;
for J:=1 to L do
if (M3=M4[J])and(I<>J) then
B:=False;
if B then
begin
Inc(L);
M4[L]:=M3;
end;
end;
Sum:=L;
[/syntax]
Это нужно добавить вместо Result:=K
Также нужно добавить массив M4 и переменную L:Integer
Результат будет находиться в массиве M4
В случае, если нужно без повторений, придется делать так:
[syntax='Delphi']
L:=0;
for I:=1 to K do
begin
B:=True;
for J:=1 to L do
if (M3=M4[J])and(I<>J) then
B:=False;
if B then
begin
Inc(L);
M4[L]:=M3;
end;
end;
Sum:=L;
[/syntax]
Это нужно добавить вместо Result:=K
Также нужно добавить массив M4 и переменную L:Integer
Результат будет находиться в массиве M4
Ни что так не ограничивает фантазию программиста, как компилятор...