Форум программистов, компьютерный форум CyberForum.ru

Сравнение 2х числовых массивов и генерация 3го - C++

Восстановить пароль Регистрация
 
deepLulz
 Аватар для deepLulz
4 / 4 / 0
Регистрация: 12.02.2012
Сообщений: 46
22.04.2012, 17:50     Сравнение 2х числовых массивов и генерация 3го #1
Собственно задание таково: создать два числовых массива, сравнить их и элементы массива m2, которые отсутствуют в массиве m1 записать в массив m3. Вот что написал я:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
#include <conio.h>
#define MAX 50
 
main(){
    int m1[MAX], m2[MAX], m3[MAX], n, i, j;
    printf("Elementov massiva = ");
    scanf("%i",&n);
    printf("M1:\n");
    for(i=0; i<=n-1; i++){
        printf("M1[%i] = ",i); scanf("%i",&m1[i]);
        if(m1[i]==0) break;
    }
    printf("M2:\n");
    for(i=0; i<=n-1; i++){
        printf("M2[%i] = ",i); scanf("%i",&m2[i]);
        if(m2[i]==0) break;
    }
    printf("Massiv m3 sozdan:\n");
    for(i=0;i<=n;i++){
        for(j=0;j<=n;j++){
            if(m2[i] != m1[j]){
                m3[j] = m2[i];
                printf("m3[%i] = %i\n",i,m3[j]);
            }
        }
    }
    getch();
    return 0;
}
Вот так называемый мой "алгоритм" сравнения:
C++
1
2
3
4
5
6
7
8
for(i=0;i<=n;i++){
        for(j=0;j<=n;j++){
            if(m2[i] != m1[j]){
                m3[j] = m2[i];
                printf("m3[%i] = %i\n",i,m3[j]);
            }
        }
    }
После запуска "этого" на экран вылазят все цифры подряд, да в конце еще и 100я других. Может кто помочь?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dota
3 / 3 / 0
Регистрация: 20.09.2010
Сообщений: 100
22.04.2012, 18:59     Сравнение 2х числовых массивов и генерация 3го #2
ну конечно работает неправильно :
1) алгоритм проверки неверный . Вы проверяете , если какой-то элемент из m2 неравен некоторому элементу из m1 , то Вы его добавляете в m3 , хотя в принципе этот элемент может встретиться в m1 , а Вы его уже добавили в m3 , как элемент , который отсутствует в m1 . В результате в m3 "запихивается" практически всё .
2) Вы выходите за границы массивов в строчках :
C++
1
2
for(i=0;i<=n;i++){
        for(j=0;j<=n;j++) ...
Можно попробовать так (опять же не гарантирую 100%-ый успех) :
C++
1
2
3
4
5
6
7
8
9
10
11
int s = 0; // счетчик  элементов для m3
for(i=0;i<=n-1;i++){
        int k=0;
        for(j=0;j<=n-1;j++){
            if(m2[i]==m1[j]) k++; // счетчик совпадений
         }
         if (k==0) {                //если совпадений не было
             m3[s] = m2[i]; s++;
             printf("m3[%i] = %i\n",s,m3[s]);
          }            
  }
deepLulz
 Аватар для deepLulz
4 / 4 / 0
Регистрация: 12.02.2012
Сообщений: 46
23.04.2012, 00:28  [ТС]     Сравнение 2х числовых массивов и генерация 3го #3
dota, спасибо, но с твоим вариантом вообще ничего не записывается
dota
3 / 3 / 0
Регистрация: 20.09.2010
Сообщений: 100
23.04.2012, 17:17     Сравнение 2х числовых массивов и генерация 3го #4
извиняюсь . это уже моя ошибка , протупил )ошибка совсем банальная :
C++
1
2
m3[s] = m2[i]; s++;
             printf("m3[%i] = %i\n",s,m3[s]);
дело в том , что 0-ому элементу m3 присваивается значение m2 , а затем увеличивается счетчик , за счет чего в следующем операторе печатается уже 1-ый элемент m3 , в котором либо еще ничего не хранится , либо по умолчанию хранится "мусор" .
решение проблемы : поменять операторы инкремента и печати местами
C++
1
2
3
m3[s] = m2[i]; 
             printf("m3[%i] = %i\n",s,m3[s]);
             s++;
Yandex
Объявления
23.04.2012, 17:17     Сравнение 2х числовых массивов и генерация 3го
Ответ Создать тему
Опции темы

Текущее время: 09:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru