Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.05.2009, 20:41
Makotya Makotya вне форума
Прохожий
 
Регистрация: 19.05.2009
Сообщения: 6
Репутация: 10
По умолчанию задача с массивами 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  
Старый 19.05.2009, 20:50
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Я бы сначала отсортировал, а потом строил по возрастанию элементов.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #3  
Старый 19.05.2009, 20:55
Makotya Makotya вне форума
Прохожий
 
Регистрация: 19.05.2009
Сообщения: 6
Репутация: 10
По умолчанию

а зачем мне снова все переделывать?
мне всего лишь нужны некоторые изменения в моем коде.
Может быть ошибка в принте,может-в создании 3-го массива.
Ответить с цитированием
  #4  
Старый 19.05.2009, 21:13
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

У вас условие задачи можно двояко трактовать.
1. Собрать в 3-массиве все неповторяющиеся элементы из первых двух.
2. Скопировать в 3-массиве любой из первых двух.
И уточните, условие "не допускаются повторяющиеся элементы" относится к элементам в пределах одного массива, или всех сразу.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 19.05.2009, 21:18
Makotya Makotya вне форума
Прохожий
 
Регистрация: 19.05.2009
Сообщения: 6
Репутация: 10
По умолчанию

мы без всяких условий уже непосредственно в вводе с клавиатуры задаем числа.в первом не повтор и во втором тоже.
напр:
1ый
1 2 3 4

2ой
2 5 7 1

и 3ий массив д б:
1 2 3 4 5 7


вот в чем идея!
Ответить с цитированием
  #6  
Старый 20.05.2009, 04:34
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Задача по сути на сложение множеств. Так что лучше отсортировать
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #7  
Старый 20.05.2009, 10:35
Makotya Makotya вне форума
Прохожий
 
Регистрация: 19.05.2009
Сообщения: 6
Репутация: 10
По умолчанию



я не вижу смысла для сортировки
Ответить с цитированием
  #8  
Старый 20.05.2009, 11:11
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Понятно, возьмите TStringList он умеет избавляться от дубликатов.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #9  
Старый 20.05.2009, 22:06
Makotya Makotya вне форума
Прохожий
 
Регистрация: 19.05.2009
Сообщения: 6
Репутация: 10
По умолчанию

раз никто не помог,я помогла сама себе.ошибка в последних строчках всего лишь-а так все работает идеально!
выкладываю-вдруг кому то понадобится.

Код:
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.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:19.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter