Страница 1 из 1

Помогите напиать программку!!! СРОЧНО!!!

Добавлено: 01 июн 2008, 17:54
Надя640
дано 2 одномерных массива.построить третий, который содержит элементы исходных 2-х массивов, но только по одному разу

Re: Помогите напиать программку!!! СРОЧНО!!!

Добавлено: 01 июн 2008, 18:13
MOTOCoder
1. Записать все элементы 1-го массива в 3-й.
2. Перебрать все элементы 2-го массива, сравнивая каждый из них с элементыми второго. Если не равен - добавить в 3-й массив.

Re: Помогите напиать программку!!! СРОЧНО!!!

Добавлено: 01 июн 2008, 18:29
Надя640
А как ЭТО изменить чтоб все получилось?

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.

Re: Помогите напиать программку!!! СРОЧНО!!!

Добавлено: 01 июн 2008, 20:40
MOTOCoder
Вообще, процедура суммирования должна выглядеть примерно так:
[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]

при вставке кода.

Re: Помогите напиать программку!!! СРОЧНО!!!

Добавлено: 03 июн 2008, 11:52
Хыиуду
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

Re: Помогите напиать программку!!! СРОЧНО!!!

Добавлено: 03 июн 2008, 19:35
BAHTY3
Вообще это называеться объединением массивов
&quot писал(а):1. Записать все элементы 1-го массива в 3-й.
а если в первом есть повторения? ;)

Re: Помогите напиать программку!!! СРОЧНО!!!

Добавлено: 03 июн 2008, 21:05
Надя640
ну в 3-ем массве должны быть числа только по 1 разу. значит из всех повторений надо чтб было 1 число

Re: Помогите напиать программку!!! СРОЧНО!!!

Добавлено: 03 июн 2008, 21:10
MOTOCoder
По задаче не очень понятно, я думал, что повторения допускаются.
В случае, если нужно без повторений, придется делать так:
[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