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

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

Ответить
Надя640
Сообщения: 3
Зарегистрирован: 23 май 2008, 20:11

дано 2 одномерных массива.построить третий, который содержит элементы исходных 2-х массивов, но только по одному разу
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

1. Записать все элементы 1-го массива в 3-й.
2. Перебрать все элементы 2-го массива, сравнивая каждый из них с элементыми второго. Если не равен - добавить в 3-й массив.
Ни что так не ограничивает фантазию программиста, как компилятор...
Надя640
Сообщения: 3
Зарегистрирован: 23 май 2008, 20:11

А как ЭТО изменить чтоб все получилось?

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.
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

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

при вставке кода.
Ни что так не ограничивает фантазию программиста, как компилятор...
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

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
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
BAHTY3
Сообщения: 106
Зарегистрирован: 30 авг 2005, 02:53
Откуда: Санкт-Петербург
Контактная информация:

Вообще это называеться объединением массивов
&quot писал(а):1. Записать все элементы 1-го массива в 3-й.
а если в первом есть повторения? ;)
Жизнь ― это то, что с нами происходит, пока мы строим планы.© Джон Леннон.
Надя640
Сообщения: 3
Зарегистрирован: 23 май 2008, 20:11

ну в 3-ем массве должны быть числа только по 1 разу. значит из всех повторений надо чтб было 1 число
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

По задаче не очень понятно, я думал, что повторения допускаются.
В случае, если нужно без повторений, придется делать так:
[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
Ни что так не ограничивает фантазию программиста, как компилятор...
Ответить