С Новым годом! Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
3 / 3 / 3
Регистрация: 16.10.2012
Сообщений: 192
1

Вывести повторяющиеся элементы

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

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

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

Добавлено через 43 минуты
я вот остановилась на вводе данных и дальше застряла, какой цикл организовать что бы он сравнивал елементы между собой?
C
1
2
for i:=1, x[i] = x[i+1], i++
y[i]=x[i]
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.04.2013, 17:46
Ответы с готовыми решениями:

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

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

Вывести не повторяющиеся элементы массива
Как сравнить введенные элементы массива и вывести те, что не повторяются? #include <iostream>...

Вывести повторяющиеся элементы последовательности
нужно выполнить первое и второе задание, желательно "по проще" ,чтобы можно было объяснить учителю.

27
...
1910 / 1329 / 966
Регистрация: 12.02.2013
Сообщений: 2,172
12.04.2013, 19:57 2
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define N 20
 
int main()
{
   int X[N], Y[N];
   size_t nY = 0;
   size_t i, j;
   int find;
 
   srand(time(NULL));
 
   for (i = 0; i < N; ++i)
   {
      X[i] = rand() % 10;
   }
 
   for (i = 0; i < N; ++i)
   {
      printf("%d ", X[i]);
   }
   printf("\n");
 
   for (i = 0; i < N; ++i)
   {
      find = 0;
      for (j = 0; (j < N) && (find == 0); ++j)
      {
         find = (i != j) && (X[i] == X[j]);
      }
 
      if (find == 0)
      {
         Y[nY++] = X[i];
      }
   }
 
   for (i = 0; i < nY; ++i)
   {
      printf("%d ", Y[i]);
   }
   printf("\n");
 
   return 0;
}
Результат выполнения на codepad.org
1
3 / 3 / 3
Регистрация: 16.10.2012
Сообщений: 192
12.04.2013, 20:14  [ТС] 3
Цитата Сообщение от anmartex Посмотреть сообщение
size_t nY = 0; size_t i, j;
простите, вы не подскажете а это стандартные функции из библиотеки? я просто недавно начала изучать си у ас первые занятия, и еще Вы не могли бы проверить то что я наваяла?))
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <locale.h>
#define n 20
void main()
{
    setlocale(LC_CTYPE, "");
    int x[n],y[n],i,j,m,k,l,t,f,r;
    /***************************************/
    printf("Введите 5 элементов массива:\n");
        for (i=0; i<n; i++)
    {
        printf("%d-й элемент:\n",i);
        scanf("%d", &x[i]);
    }
    /***************************************/
        k=0;
        for (i=0; i<n-1;i++)
    {
        m=x[i];
        for (j=i+1;j<n;j++)
        {
            if (x[j]==m)
            {
                l=1;
                for (t=0;t<k;t++)
                    if (y[t]==x[i]) l=0;
                if (l) y[k++]=x[i];
            }
        }
    }
    /***************************************/
    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();
}
может можно что-то где-то упростить)
0
...
1910 / 1329 / 966
Регистрация: 12.02.2013
Сообщений: 2,172
12.04.2013, 20:51 4
Цитата Сообщение от lerenia Посмотреть сообщение
простите, вы не подскажете а это стандартные функции из библиотеки?
Тут нет функции, а объявлено 3 переменных. Как я понимаю, вас смутил тип данных size_t. Я его уже автоматом ставлю. Замените на int (чтобы не смущал), ну или на unisgned.

Цитата Сообщение от lerenia Посмотреть сообщение
Вы не могли бы проверить то что я наваяла?
А конкретно что проверять? Потенциальные ошибки в алгоритме, правильности написания или ещё что? Если алгоритм, то я даже задания не знаю.
0
3 / 3 / 3
Регистрация: 16.10.2012
Сообщений: 192
13.04.2013, 00:30  [ТС] 5
Цитата Сообщение от anmartex Посмотреть сообщение
Если алгоритм, то я даже задания не знаю
Задание вот Задан целочисленный массив Х из 20 элементов, среди которых есть повторяющиеся. Записать в массив Y по одному элементу из каждой группы одинаковых значений исходного массива.
А проверить: сама логика выполнения верная?
0
44 / 44 / 17
Регистрация: 13.09.2012
Сообщений: 196
13.04.2013, 11:41 6
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
#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-1; j++)
  {
   if(arr[i] > arr[j])
   {
    tmp=arr[i];
    arr[i]=arr[j];
    arr[j]=tmp;
   }
  }
 }
 
}
 
int main()
{
 int X[20];
 int Y[20];
 int i,j,y_counter;
 
 for(i=0; i < 20; i++)
 {
  scanf("%d",X+i);
 }
 
 for(i=0; i < 20; i++)
 {
  printf("%d ",*(X+i));
 }
 
 stupid_sort(X,20);
 
 y_counter = 0;
 
 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]);
 }
 
 return 0;
}
1
3 / 3 / 3
Регистрация: 16.10.2012
Сообщений: 192
13.04.2013, 12:57  [ТС] 7
Цитата Сообщение от kotleta Посмотреть сообщение
stupid_sort(int * arr, int arr_size)
а вы не могли бы пояснить что здесь? а именно вот эту часть
Цитата Сообщение от kotleta Посмотреть сообщение
int * arr, int arr_size
0
44 / 44 / 17
Регистрация: 13.09.2012
Сообщений: 196
13.04.2013, 13:25 8
stupid_sort совершенно вспомогательная процедура, с помощью нее сортируется массив.
Для того, чтобы в цикле (строка 41) мы могли за один раз из массива извлечь уникальные элементы
к примеру, abcbabc, сортируем, получаем: aabbbcc, элементы упорядочены, поэтому легче понять, что уникальные элементы abc. И это ускоряет поиск уникальных элементов
int * arr - указатель на массив. Нельзя передавать массив целиком, но можно перед адрес начало. Такая политика была введена в язык си, для экономии памяти.
int arr_size - размер массива, который находится по указателю arr
0
3 / 3 / 3
Регистрация: 16.10.2012
Сообщений: 192
13.04.2013, 13:32  [ТС] 9
kotleta, что то у меня не работает) ввожу элементы, но результат не выдается, окно сразу закрывается добавила getch и #include<conio.h> но все равно после ввода последнего элемента и нажатия енер окно закрывается
0
44 / 44 / 17
Регистрация: 13.09.2012
Сообщений: 196
13.04.2013, 13:42 10
ВВодите значения аккуратнее..

Добавлено через 3 минуты
все работает, такие программы можно писать не компилируя я абсолютно уверен, что она работает...

вероятно, вы очень много нажимали enter'ов, когда вводили числа

Попробуйте так:
1 enter
2 enter
3 enter
3 enter
3 enter
...

после каждого числа нажимайте enter, аккуратно вводите числа
0
3 / 3 / 3
Регистрация: 16.10.2012
Сообщений: 192
13.04.2013, 13:43  [ТС] 11
kotleta, он ничего не выдает(я уже и через пробел в строку, и через ентер - он просто закрывается и все(

я так и набирала, но все равно закрывается
0
44 / 44 / 17
Регистрация: 13.09.2012
Сообщений: 196
13.04.2013, 13:51 12
тогда я не в состоянии решить вашу проблему, у меня и не только у меня все работает

Добавлено через 2 минуты
хорошо, сделайте скриншот того, как вы вводили числа
Миниатюры
Вывести повторяющиеся элементы  
0
3 / 3 / 3
Регистрация: 16.10.2012
Сообщений: 192
13.04.2013, 13:54  [ТС] 13
вот как ввожу и что происходит после того как я нажимаю ентер после 20 элемента
Миниатюры
Вывести повторяющиеся элементы   Вывести повторяющиеся элементы  
0
44 / 44 / 17
Регистрация: 13.09.2012
Сообщений: 196
13.04.2013, 13:56 14
не знаю..... ээээ........
А вообще у вас программы работают другие???
0
3 / 3 / 3
Регистрация: 16.10.2012
Сообщений: 192
13.04.2013, 14:00  [ТС] 15
да
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <locale.h>
#define n 20
void main()
{
    setlocale(LC_CTYPE, "");
    int x[n],y[n],i,j,m,k,l,t,f,r;
    /***************************************/
    printf("Введите 20 элементов массива:\n");
        for (i=0; i<n; i++)
    {
        printf("%d-й элемент:\n",i);
        scanf("%d", &x[i]);
    }
    /***************************************/
        k=0;
        for (i=0; i<n-1;i++)
    {
        m=x[i];
        for (j=i+1;j<n;j++)
        {
            if (x[j]==m)
            {
                l=1;
                for (t=0;t<k;t++)
                    if (y[t]==x[i]) l=0;
                if (l) y[k++]=x[i];
            }
        }
    }
    /***************************************/
    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();
}
0
44 / 44 / 17
Регистрация: 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
3 / 3 / 3
Регистрация: 16.10.2012
Сообщений: 192
13.04.2013, 14:13  [ТС] 17
kotleta, не знаю, возможно мое предложение покажется глупым, а если набрать в ручную? Ну мало ли вдруг компилятор "передумает"
0
3 / 3 / 3
Регистрация: 16.10.2012
Сообщений: 192
13.04.2013, 14:17  [ТС] 18
второй код, вообще не позволяет вводить символы((( сразу закрывается, а при запуске там уже есть символы.Мне идея с указателем очень понравилась...так хочется разобраться с ними наконец( а то вечно путаюсь
Миниатюры
Вывести повторяющиеся элементы  
0
...
1910 / 1329 / 966
Регистрация: 12.02.2013
Сообщений: 2,172
13.04.2013, 19:03 19
lerenia, прошу прощения за столь долгое молчание. Сразу хотел бы извиниться, что предложил вам не верный код, ибо только сейчас сообразил, что вам нужны были повторяющиеся элементы, а не уникальные.

Цитата Сообщение от lerenia Посмотреть сообщение
Вы не могли бы проверить то что я наваяла?))
Посмотрел я ваш код и должен вам сказать, что он верный. Лично у меня, если и есть претензии, то только к форматированию кода.
0
3 / 3 / 3
Регистрация: 16.10.2012
Сообщений: 192
13.04.2013, 19:25  [ТС] 20
Цитата Сообщение от anmartex Посмотреть сообщение
Посмотрел я ваш код и должен вам сказать, что он верный.
а как его переделать с указателем? а то не как не могу с ним разобраться, вечно путаюсь(
0
13.04.2013, 19:25
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.04.2013, 19:25
Помогаю со студенческими работами здесь

Вывести элементы матрицы, повторяющиеся 1 и более раз
Дан двумерный массив, нужно вывести элементы, повторяющиеся 1 и более раз. Вот мой код: #include...

Вывести повторяющиеся отрицательные элементы массива (по 1 разу)
Дан массив A(N).Вывести повторяющиеся отрицательные элементы массива(1 разу).Пожалуйста у кого есть...

Как удалить повторяющиеся элементы с массива и вывести их на экран
Массив не сортированный, вбивается с клавиатуры. Вписываются только положительные числа, когда...

Найти и вывести повторяющиеся элементы матрицы, указав их кратность.
Дана матрица целых чисел. Найти и вывести повторяющиеся элементы указав их кратность. program z1;...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru