Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск одинаковых значений в массивах 
:(
    Опции темы
rubaka
Дата 2.12.2010, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 2.12.2010

Репутация: нет
Всего: нет



Имеется код:

Код

#include <stdio.h>
main()
{
int dig1[106];
int dig2[106];
unsigned int i,N,M; 
FILE *in, *out;
in=fopen("input.txt","r");
out=fopen("output.txt","w");
fscanf(in,"%d",&N);
fscanf(in,"%d",&M);
for(i=0;i<N;i++)
fscanf(in,"%d",&dig1[i]);
for(i=0;i<M;i++)
fscanf(in,"%d",&dig2[i]);
for(i=0;i<106;i++)
if(dig1[i]==dig2[i]){
 
fprintf(out,"%d ",i);
}
 fclose(in);
 fclose(out);
 
}


Допустим во входном файле записано:
11 6
2 4 6 8 10 12 10 8 6 4 2
3 6 9 12 15 19
Здесь N=11; M=6. Тоесть кол-во чисел в массиве dig1[i] и dig2[i]. Числа 6 и 12 присутствуют в обоих массивах. Программа должна записать их в выходной файл. Но за место этого записывает числа 48 56. В чем я допустил ошибку? 
PM MAIL   Вверх
toxx
Дата 2.12.2010, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 653
Регистрация: 4.3.2009
Где: НН

Репутация: 4
Всего: 13



Нужно проверять на совпадениe каждый элемeнт dig1 с каждым dig2, а не 1й с 1м 2й со 2м ... 
Код

for(i=0;i<106;i++)
if(dig1[i]==dig2[i]){
 
fprintf(out,"%d ",i);
}


ну и записать наверно нужно значения, а не номер в массиве 
Код

fprintf(out,"%d ",i);


Это сообщение отредактировал(а) toxx - 2.12.2010, 11:20
PM MAIL   Вверх
rubaka
Дата 2.12.2010, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 2.12.2010

Репутация: нет
Всего: нет



Разобрался
Код

for(i=0;i<N;i++){
    for(j=0; j<M; j++){
        if(dig1[i] == dig2[j]){
            fprintf(out, "%d ",dig1[i]);
        }
    }
}


Теперь в файле вывода 6 12 6.. А как сделать, чтобы было 6 12 т.е. совпадения не повторялись?
PM MAIL   Вверх
toxx
Дата 2.12.2010, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 653
Регистрация: 4.3.2009
Где: НН

Репутация: 4
Всего: 13



rubaka
первое что приходит в голову, это добавить в отдельный массив значения которые были добавлены, и при новом добавлении смотреть был ли такой элемент.
PM MAIL   Вверх
RastaDja
Дата 2.12.2010, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 1.11.2010

Репутация: 3
Всего: 5



Цитата

Код

for(i=0;i<106;i++)
if(dig1[i]==dig2[i]){
 
fprintf(out,"%d ",i);
}



rubaka, вы сравниваете числа с одинаковыми индексами, а надо как-то та
Код

for(i=0;i<N;i++){
   for(j=0;j<M;j++){
      if(dig1[i]==dig2[j]){
          fprintf(out,"%d ",i);
      }
  }
}



--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
rubaka
Дата 2.12.2010, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 2.12.2010

Репутация: нет
Всего: нет



Цитата

rubaka
первое что приходит в голову, это добавить в отдельный массив значения которые были добавлены, и при новом добавлении смотреть был ли такой элемент.

А как это сделать?  smile 
PM MAIL   Вверх
RastaDja
Дата 2.12.2010, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 1.11.2010

Репутация: 3
Всего: 5



Цитата

Теперь в файле вывода 6 12 6.. А как сделать, чтобы было 6 12 т.е. совпадения не повторялись? 


Вам надо отсортировать массив [ 2 4 6 8 10 12 10 8 6 4 2 ] чтоб получить 
[ 2 2 4 4 6 6 8 8 10 10 12  ]

а после удалить из него повторющиеся


--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
rubaka
Дата 2.12.2010, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 2.12.2010

Репутация: нет
Всего: нет



Написал сортировку.. Теперь в файле выхода 6 6 12. Как удалить повторяющиеся числа из массива?

Добавлено через 12 минут и 17 секунд
Получилось
Код

for(i=0;i<N;i++){
    for(j=0; j<M; j++){
        if(dig1[i] == dig2[j]){
            for(j=i;j<i-1;j++){
            dig1[i]=dig1[j+1]; j--;
            fprintf(out, "%d ",dig1[i]);
            
        }
    }
  }
}

Но программа удаляет оба числа 6. И остается только 12.. Где я допустил ошибку?
PM MAIL   Вверх
RastaDja
Дата 2.12.2010, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 1.11.2010

Репутация: 3
Всего: 5



Цитата

Написал сортировку.. Теперь в файле выхода 6 6 12. Как удалить повторяющиеся числа из массива? 


Код

int numRs = 0;//
int newMass[106];

newMass[0] =  dig1[0];
numRs++;
for(i=1;i<N;i++){
  if(dig1[i-1]!=dig2[i]){
        ++numRs;
        newMass[numRs] = dig1[i-1];
  }
}

newMass - новый массив. numRs - число элементов в нём

как-то так

Добавлено через 56 секунд
Цитата

Код

newMass[numRs] = dig1[i-1];


замени на
Код

newMass[numRs] = dig1[i];



--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
rubaka
Дата 2.12.2010, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 2.12.2010

Репутация: нет
Всего: нет



RastaDja также остается число 12
PM MAIL   Вверх
RastaDja
Дата 2.12.2010, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 1.11.2010

Репутация: 3
Всего: 5



какой массив получился?

Добавлено через 1 минуту и 46 секунд
Цитата

if(dig1[i-1]!=dig2[i]){

я допустил ошибку, надо 
Код

if(dig1[i-1]!=dig1[i]){



--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
rubaka
Дата 2.12.2010, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 2.12.2010

Репутация: нет
Всего: нет



Цитата(RastaDja @ 2.12.2010,  12:44)
какой массив получился?

Добавлено @ 12:46
Цитата

if(dig1[i-1]!=dig2[i]){

я допустил ошибку, надо 
Код

if(dig1[i-1]!=dig1[i]){

Я уже исправил ошибку.. В файле выхода число 12..
PM MAIL   Вверх
RastaDja
Дата 2.12.2010, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 1.11.2010

Репутация: 3
Всего: 5



Код

arr2[0]=arr[0];
newN = 1;
for(int i=1; i<n;++i){
    if(arr[i-1] != arr[i]){
        arr2[newN] = arr[i];
        ++newN;
    }
}
for(int i=0; i<newN;++i){
    std::cout<<arr2[i]<<" ";
}


вот так все робит  


--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
rubaka
Дата 2.12.2010, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 2.12.2010

Репутация: нет
Всего: нет



Огромное спасибо за помощь ребята, вы мне сильно помогли! 
Прошу тех у кого 100+ постов, добавить репутацию "+" пользователям toxx и RastaDja.  smile 
PM MAIL   Вверх
JackYF
Дата 4.12.2010, 20:27 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 6
Всего: 162



Цитата(rubaka @  2.12.2010,  13:05 Найти цитируемый пост)
Прошу тех у кого 100+ постов, добавить репутацию "+" пользователям toxx и RastaDja.


Dov сделал.




--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0543 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.