|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
задача с массивами Delphi, код прилагается
Задачка заключается в следующем:
Дано 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. |