Форум программистов, компьютерный форум, киберфорум
Наши страницы

C для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
lerenia
3 / 3 / 0
Регистрация: 16.10.2012
Сообщений: 192
#1

Вывести повторяющиеся элементы - C (СИ)

12.04.2013, 17:46. Просмотров 1358. Ответов 27
Метки нет (Все метки)

Задан целочисленный массив Х из 20 элементов, среди которых есть повторяющиеся. Записать в массив Y по одному элементу из каждой группы одинаковых значений исходного массива.

Знаю что задача элементарная, но я не знаю с чего начать (после описания директорий).

Добавлено через 43 минуты
я вот остановилась на вводе данных и дальше застряла, какой цикл организовать что бы он сравнивал елементы между собой?
C
1
2
for i:=1, x[i] = x[i+1], i++
y[i]=x[i]
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.04.2013, 17:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывести повторяющиеся элементы (C (СИ)):

Вывести упорядоченные по убыванию повторяющиеся элементы массива и число повторений - C (СИ)
Выдает ошибку в коде: Нужно: Вывести упорядочены по убыванию повторяющиеся элементы произвольного одномерного массива целых чисел и число...

Вывести упорядоченные по убыванию повторяющиеся элементы произвольного одномерного массива - C (СИ)
Вывести упорядочены по убыванию повторяющиеся элементы произвольного одномерного массива целых чисел и число этих повторений.(СИ)

Найти повторяющиеся элементы массива - C (СИ)
Есть одномерный массив надо выяснить сколько раз встречается пара таких же элементов. Например аа, вв, пп,аа, результат должен быть аа - 2...

Удалить повторяющиеся элементы из массива - C (СИ)
Требуется: Удалить из 2-мерного массива повторяющиеся элементы, оставив только первое вхождение каждого элемента. Количество...

Удалить повторяющиеся элементы из односвязного списка - C (СИ)
Я написал программу, которая удаляет дубликаты в списки, оставляя только его первое вхождение. Но программу написал с помощью оператора...

Удалить повторяющиеся элементы из массива символов - C (СИ)
Как удалить повторяющиеся элементы из массива символов? char str={"abcdea"};

27
kotleta
42 / 42 / 11
Регистрация: 13.09.2012
Сообщений: 196
13.04.2013, 14:12 #16
какой компилятор???
visual studio

Добавлено через 1 минуту
у меня ваша програаммаработает

Добавлено через 1 минуту
не знаю, я ума не приложу, почему у вас не работает, может кто поможет, мне самому будет интересно решение

Добавлено через 2 минуты
http://codepad.org/u5k7tU6L
смотрите

Добавлено через 3 минуты
попробуйте такой код

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <stdio.h>
 
void stupid_sort(int * arr, int arr_size)
{
 int i,j,tmp;
 for(i=0; i < arr_size; i++)
 {
  for(j=i+1; j < arr_size; j++)
  {
   if(arr[i] > arr[j])
   {
    tmp=arr[i];
    arr[i]=arr[j];
    arr[j]=tmp;
   }
  }
 }
 
}
 
void main()
{
 int X[20]={1,2,3,4,5,6,7,8,9,0,0,0,0,0,0,1,2,3,4,5};
 int Y[20];
 int i,j,y_counter;
 
 
 for(i=0; i < 20; i++)
 {
  printf("%d ",*(X+i));
 }
 
 stupid_sort(X,20);
 putchar('\n');
 
 y_counter = 0;
 
 for(i=0; i < 20; i++)
 {
  printf("%d ",*(X+i));
 }
 
 
 
 for(i=0; i < 20; i++)
 {
  Y[y_counter]=X[i];
  j = i + 1;
  while(j < 20 && X[i] == X[j])
  {
   j++;
  }
  i = j-1;
  y_counter++;
 }
 
 putchar('\n');
 
 for(i=0; i < y_counter; i++)
 {
  printf("%d ",Y[i]);
 }
 
}
0
lerenia
3 / 3 / 0
Регистрация: 16.10.2012
Сообщений: 192
13.04.2013, 14:13  [ТС] #17
kotleta, не знаю, возможно мое предложение покажется глупым, а если набрать в ручную? Ну мало ли вдруг компилятор "передумает"
0
lerenia
3 / 3 / 0
Регистрация: 16.10.2012
Сообщений: 192
13.04.2013, 14:17  [ТС] #18
второй код, вообще не позволяет вводить символы((( сразу закрывается, а при запуске там уже есть символы.Мне идея с указателем очень понравилась...так хочется разобраться с ними наконец( а то вечно путаюсь
0
Миниатюры
Вывести повторяющиеся элементы  
anmartex
...
1708 / 1201 / 496
Регистрация: 12.02.2013
Сообщений: 1,978
13.04.2013, 19:03 #19
lerenia, прошу прощения за столь долгое молчание. Сразу хотел бы извиниться, что предложил вам не верный код, ибо только сейчас сообразил, что вам нужны были повторяющиеся элементы, а не уникальные.

Цитата Сообщение от lerenia Посмотреть сообщение
Вы не могли бы проверить то что я наваяла?))
Посмотрел я ваш код и должен вам сказать, что он верный. Лично у меня, если и есть претензии, то только к форматированию кода.
0
lerenia
3 / 3 / 0
Регистрация: 16.10.2012
Сообщений: 192
13.04.2013, 19:25  [ТС] #20
Цитата Сообщение от anmartex Посмотреть сообщение
Посмотрел я ваш код и должен вам сказать, что он верный.
а как его переделать с указателем? а то не как не могу с ним разобраться, вечно путаюсь(
0
anmartex
...
1708 / 1201 / 496
Регистрация: 12.02.2013
Сообщений: 1,978
13.04.2013, 19:49 #21
Цитата Сообщение от lerenia Посмотреть сообщение
а как его переделать с указателем?
С каким указателем? И для каких целей?
0
lerenia
3 / 3 / 0
Регистрация: 16.10.2012
Сообщений: 192
13.04.2013, 19:54  [ТС] #22
Цитата Сообщение от anmartex Посмотреть сообщение
С каким указателем?
Цитата Сообщение от kotleta Посмотреть сообщение
#include <stdio.h> void stupid_sort(int * arr, int arr_size) { int i,j,tmp; for(i=0; i < arr_size; i++) { for(j=i+1; j < arr_size; j++) { if(arr[i] > arr[j]) { tmp=arr[i]; arr[i]=arr[j]; arr[j]=tmp; } } }
Цитата Сообщение от anmartex Посмотреть сообщение
И для каких целей?
научится разыменовывать и понять как вообще эти указатели работают
0
anmartex
...
1708 / 1201 / 496
Регистрация: 12.02.2013
Сообщений: 1,978
13.04.2013, 20:25 #23
Цитата Сообщение от lerenia Посмотреть сообщение
научится разыменовывать и понять как вообще эти указатели работают
Что ж, удачи!:
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <locale.h>
 
#include <stdlib.h>
#include <time.h>
 
#define n 20
 
int main()
{
   srand(time(NULL));
   setlocale(LC_CTYPE, "");
   int x[n], y[n], i, k, t;
 
   int* ptrX;
   int* curX;
   int* endX = x + n;
 
   int* ptrY;
   int* endY = y;
   /***************************************/
   printf("Введите 5 элементов массива:\n");
   for (i = 0; i < n; i++)
   {
      //printf("%d-й элемент:\n", i);
      //scanf("%d", &x[i]);
      x[i] = rand() % 10;
   }
   /***************************************/
 
   k = 0;
   for (ptrX = x; ptrX < endX - 1; ++ptrX)
   {
      for (curX = ptrX + 1; (curX < endX) && (*curX != *ptrX); ++curX) { ; }
 
      if (*curX == *ptrX)
      {
         for (ptrY = y; (ptrY < endY) && (*ptrY != *ptrX); ++ptrY) { ; }
 
         if (*ptrY != *ptrX)
         {
            *(endY++) = *ptrX;
         }
      }
   }
 
   k = endY - y;
 
   /***************************************/
   printf("Исходный массив:\n");
   for (i = 0; i < n; i++)
   {
      printf("%5d", x[i]);
      if (((i + 1) % 5) == 0)
      {
         printf("\n");
      }
   }
   printf("\n Повторяющиеся элементы:\n");
   for (t = 0; t < k; t++)
   {
      printf("%5d", y[t]);
      if (((t + 1) % 5) == 0)
      {
         printf("\n");
      }
   }
   getch();
 
   return 0;
}
1
lerenia
3 / 3 / 0
Регистрация: 16.10.2012
Сообщений: 192
14.04.2013, 15:50  [ТС] #24
Цитата Сообщение от anmartex Посмотреть сообщение
#include <time.h>
простите а зачем эта функция? я думала она возвращает время в секундах с компьютера.
0
anmartex
...
1708 / 1201 / 496
Регистрация: 12.02.2013
Сообщений: 1,978
14.04.2013, 16:01 #25
Цитата Сообщение от lerenia Посмотреть сообщение
простите а зачем эта функция?
Для функции time, а она в свою очередь для функции srand.


Кстати, я в последнем коде потенциальный баг занёс. Строки 38 и 42, так что спешу исправиться:
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <locale.h>
 
#include <stdlib.h>
#include <time.h>
 
#define n 20
 
int main()
{
   srand(time(NULL));
   setlocale(LC_CTYPE, "");
   int x[n], y[n], i, k, t;
 
   int* ptrX;
   int* curX;
   int* endX = x + n;
 
   int* ptrY;
   int* endY = y;
   /***************************************/
   printf("Введите 5 элементов массива:\n");
   for (i = 0; i < n; i++)
   {
      //printf("%d-й элемент:\n", i);
      //scanf("%d", &x[i]);
      x[i] = rand() % 10;
   }
   /***************************************/
 
   k = 0;
   for (ptrX = x; ptrX < endX - 1; ++ptrX)
   {
      for (curX = ptrX + 1; (curX < endX) && (*curX != *ptrX); ++curX) { ; }
 
      if (curX != endX)
      {
         for (ptrY = y; (ptrY < endY) && (*ptrY != *ptrX); ++ptrY) { ; }
 
         if (ptrY == endY)
         {
            *(endY++) = *ptrX;
         }
      }
   }
 
   k = endY - y;
 
   /***************************************/
   printf("Исходный массив:\n");
   for (i = 0; i < n; i++)
   {
      printf("%5d", x[i]);
      if (((i + 1) % 5) == 0)
      {
         printf("\n");
      }
   }
   printf("\n Повторяющиеся элементы:\n");
   for (t = 0; t < k; t++)
   {
      printf("%5d", y[t]);
      if (((t + 1) % 5) == 0)
      {
         printf("\n");
      }
   }
   getch();
 
   return 0;
}
1
lerenia
3 / 3 / 0
Регистрация: 16.10.2012
Сообщений: 192
14.04.2013, 16:44  [ТС] #26
anmartex, спасибо огромное)
Цитата Сообщение от anmartex Посмотреть сообщение
for (i = 0; i < n; i++) { //printf("%d-й элемент:\n", i); //scanf("%d", &x[i]); x[i] = rand() % 10; }
последний вопрос)))) а почему здесь считывание вводимых элементов комментарий?
0
anmartex
...
1708 / 1201 / 496
Регистрация: 12.02.2013
Сообщений: 1,978
14.04.2013, 16:49 #27
lerenia, для тестирования очень муторно вводить постоянно числа, поэтому я просто задал генерацию случайных чисел в диапазоне от 0 до 9 (строка 29), а вот ваш код я просто закомментировал.
0
lerenia
3 / 3 / 0
Регистрация: 16.10.2012
Сообщений: 192
14.04.2013, 16:50  [ТС] #28
ааа) ясно) спасибо)
0
14.04.2013, 16:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.04.2013, 16:50
Привет! Вот еще темы с ответами:

Заменить повторяющиеся в матрице элементы нулями - C (СИ)
Известно, что в матрице A(n×m) нет нулей. Заменить повторяющиеся в матрице элементы нулями. Помогите пожалуйста. Спасибо.

Вывести повторяющиеся идентификаторы - C (СИ)
#include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; #include &lt;ctype.h&gt; #include &lt;string.h&gt; #define N 15 void schet(char *STR1,char *STR2) ...

Сравнить два массива, из большего вытащить не повторяющиеся элементы в новый - C (СИ)
Есть задача Даны два целочисленных массива. Если размер первого массива больше размера второго, то создать новый массив, который будет их...

Сортировка элементов массива так, что сначала идут все повторяющиеся элементы - C (СИ)
Привет всем, может кто-то уже сталкивался с такой задачей, вводим элементы массива, на выходе получаем сначала повторяющиеся элементы, а...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.