1. Вы находитесь в архивной версии форума xaker.name. Здесь собраны темы с 2007 по 2012 год, большинство инструкций и мануалов уже неактуальны.

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

  1. Эта программа выводит объединение массивов, введённых пользователем:
    Код:
    #include <stdio.h>
    const int N=100;
    void inMas1(int &n, int a[N])
    {
    	printf ("Vvedite razmernost pervogo massiva n=");
    	scanf ("%d", &n);
    	//ввод размерности массива
    	for (int i=0; i<n; i++)
    	{
    		//ввод a[i]
    		printf ("a[%d]=", i);
    		scanf ("%d", &a[i]);
    	}
    }
    void outMas1(int k, int c[N])
    	{
    		for (int i=0; i<k; i++)
    		printf ("%d", c[i]);
    	}
    
    void Obedin(int n, int a[N], int m, int b[N], int &k, int c[N])
    {
    	//начальное присвоение
    	k=n;
    	for (int i=0; i<n; i++)
    	{
    		c[i]=a[i];
    	}
    	//добавить недостающий элемент из b, просмотр элементов из b,
    	for (int i=0; i<m; i++)
    		{
    		//обработка b[i], цикл просмотра массива a[i]
    		int j=0;
    		bool flagNo=true;
    		while ((flagNo)&&(j<n))
    		{
    			if (a[i]==b[i])
    			{
    				flagNo=false;
    			}
    		j++;
    		}
    		if (flagNo)
    		{
    			//добавление b[i] в c
    			c[k]=b[i];
    			k++;
    		}
    	}
    }
    void main()
    {
    	//определение переменных
    	int n, m, k, a[N], b[N], c[N];
    	//ввод исходных данных
    	inMas1(n, a);
    	inMas1(m, b);
    	//вычисление с
    	Obedin(n, a, m, b, k, c);
    	//вывод результата
    	outMas1(k, c);
    }
    Проблема в том, что:
    1) В массивах присутствуют повторяющиеся элементы
    2) Массивы выводятся одной строчкой

    Я решил написать программу, в которую пользователь вбивает массив, в котором могут присутствовать повторяющиеся элементы, а прога выдаёт массив без повторяющихся элементов:
    Код:
    #include <stdio.h>
    const int N=100;
    void inMas1(int &n, int a[N])
    {
    	printf ("Vvedite razmernost pervogo massiva n=");
    	scanf ("%d", &n);
    	//ввод размерности массива
    	for (int i=0; i<n; i++)
    	{
    		//ввод a[i]
    		printf ("a[%d]=", i);
    		scanf ("%d", &a[i]);
    	}
    }
    void MasNoPovtor(int n, int a[], int &k, int b[])
    {
    	k=0;
    	for (int i=0; i<n; i++)
    	{
    		bool flagNo=true;
    		int j=0;
    		while ((flagNo)&&(j<n))
    		{
    			if (a[i]==b[j])
    			{
    				flagNo=false;
    			}
    			j++;
    		}
    		if (flagNo)
    		{
    			//добавление a[i] в b[k]
    			b[k]=a[i];
    			k++;
    		}
    	}
    }
    void outMas1(int k, int b[N])
    	{
    		for (int i=0; i<k; i++)
    		printf ("%d", b[i]);
    	}
    void main()
    {
    	//определение переменных
    	int n, m, k, a[N], b[N];
    	//ввод исходных данных
    	inMas1(n, a);
    	//вычисление b
    	MasNoPovtor(n, a, k, b);
    	//вывод результата
    	outMas1(k, b);
    }
    Собсно, мои вопросы:
    1) Как в первой программе реализовать алгоритм, который обрабатывал бы и удалял повторяющиеся элементы?
    2) Как сделать так, чтобы в ней выводились 2 массива в 2 строчки? Пробовал в printf из OutMas добавить \n, но тогда у меня выводится массив столбцом...
    Буду благодарен за любые советы
     
  2. PHP:
    void outMas1(int kint c[N])
        {
            for (
    int i=0i<ki++)
            {
                    
    printf ("%d"c[i]);
            if(
    i-1==kprintf ("\n");
                    } 
    ////// Как только кончилися массив переводим каретку на начало следующей строки / с проверкой конца строки
        
    }
     
  3. de3zor
    Нам пока что запрещают использовать int*, к тому же, я не знаю, как работает этот указатель. Пробовал заменить функции на твои, но компилятор выдаёт много ошибок... В любом случае, благодарю за старания
     
  4. У себя откомпилил - вроде все работает ) Проверяй и пробуй у себя =)
    PHP:
    void outMas1(int kint c[N])
        {
            for (
    int i=0i<ki++)
            {
                    
    printf ("%d"c[i]);
            }
        
    printf ("\n"); // Вывод закончился - переводим каретку
        
    }  
    void ArrProcess(int Arr[],int Arr_b[]) // Обработка массива  на повторяющиеся элементы
    {
        
    int c=0// Сохраняем количество элементов в обработанном массиве Arr_b для вывода
        
    Arr_b[0]=Arr[0]; // Первый элемент не может повториться = записываем
        
    for(int i=0;i<N;i++,c++) // Пробегаем по исходному массиву
        

            for(
    int k=0;k<i;k++) // Пробегаем по всем элементам,стоящим раньше чем i-ый элемент исходного массива
                

                    if(
    Arr[i]==Arr[k]) { c--; break; } //Если найден повтор - уменьшаем с на единицу и выходим из цикла сравнения
                    
    if(k+1==iArr_b[c]=Arr[i]; // Если цикл дошел до конца - повторов нет - записываем элемент во второй массив
                

        }     
        
    outMas1(c,Arr_b); // Выводим обработанный массив через функцию
    }
     
  5. Отпишись хоть,работает у тебя али нет )
     
    1 человеку нравится это.
  6. Приношу извинения за несвоевременный ответ
    Нам пока что запрещают использовать условный выход из цикла break
     
  7. Тогда вот так
    PHP:
    void outMas1(int kint c[N])
        {
            for (
    int i=0i<ki++)
            {
                    
    printf ("%d"c[i]);
            }
        
    printf ("\n"); // Вывод закончился - переводим каретку
        
    }  
    void ArrProcess(int a,int Arr[],int Arr_b[]) // Обработка массива  на повторяющиеся элементы
    {
        
    int c=0// Сохраняем количество элементов в обработанном массиве Arr_b для вывода
        
    Arr_b[0]=Arr[0]; // Первый элемент не может повториться = записываем
        
    for(int i=0;i<a;i++,c++) // Пробегаем по исходному массиву
        

            for(
    int k=0;k<i;k++) // Пробегаем по всем элементам,стоящим раньше чем i-ый элемент исходного массива
                

                    if(
    Arr[i]==Arr[k]) { c--;k=i-1; } //Если найден повтор - уменьшаем с на единицу и выходим из цикла сравнения(счетчик цикла устанавливаем на значение,которое будет говорить о конце цикла )
                    
    if(k+1==iArr_b[c]=Arr[i]; // Если цикл дошел до конца - повторов нет - записываем элемент во второй массив
                

        }     
        
    outMas1(c,Arr_b); // Выводим обработанный массив через функцию
    }  
     
  8. Заменил OutMas1 и функцию обработки массива на твою - 13 ошибок при компиляции

    Добавлено через 1 минуту
    Что нужно объявить в void main? Что изменить в InMas1?
     
  9. скинь полностью файл *.CPP ,чтобы можно было смотреть конкретно.
    Для чего ?
    ** Main делай int всегда )
     
  10. Код:
    #include <stdio.h>
    const int N=100;
    void inMas1(int &n, int a[N])
    {
    	printf ("Vvedite razmernost pervogo massiva n=");
    	scanf ("%d", &n);
    	//ввод размерности массива
    	for (int i=0; i<n; i++)
    	{
    		//ввод a[i]
    		printf ("a[%d]=", i);
    		scanf ("%d", &a[i]);
    	}
    }
    void outMas1(int k, int c[N])
        {
            for (int i=0; i<k; i++)
            {
                    printf ("%d", c[i]);
            }
        printf ("\n"); // Вывод закончился - переводим каретку
        }  
    void ArrProcess(int Arr[],int Arr_b[]) // Обработка массива  на повторяющиеся элементы
    {
        int c=0; // Сохраняем количество элементов в обработанном массиве Arr_b для вывода
        Arr_b[0]=Arr[0]; // Первый элемент не может повториться = записываем
        for(int i=0;i<N;i++,c++) // Пробегаем по исходному массиву
        { 
            for(int k=0;k<i;k++) // Пробегаем по всем элементам,стоящим раньше чем i-ый элемент исходного массива
                { 
                    if(Arr[i]==Arr[k]) { c--;k=i-1; } //Если найден повтор - уменьшаем с на единицу и выходим из цикла сравнения(счетчик цикла устанавливаем на значение,которое будет говорить о конце цикла )
                    if(k+1==i) Arr_b[c]=Arr[i]; // Если цикл дошел до конца - повторов нет - записываем элемент во второй массив
                } 
        }     
        outMas1(c,Arr_b); // Выводим обработанный массив через функцию
    }  
    void main()
    {
    	//определение переменных
    	int n, m, k, a[N], b[N], c[N];
    	//ввод исходных данных
    	inMas1(n, a);
    	inMas1(m, b);
    	//вычисление с
    	ArrProcess(a, b);
    	//вывод результата
    	outMas1(k, c);
    }
    Программа компилится, но выдаёт неверный результат
     
  11. Видимо,я неправильно понял суть задачи.
    Тебе нужно,чтобы проверялись одинаковые элементы в разных массивах ? Или чтобы в одном массиве находились и удалялись одинаковые элементы,а в другом они,соответственно,хранились ?
    Вот.Вместе с main и прочим
    PHP:
    #include <cstdio>
    const int N=100;
    int inMas1(int a[])
    {
        
    int n=0;
        
    printf ("Vvedite razmer pervogo massiva n=");
        
    scanf ("%d", &n);

        for (
    int i=0i<ni++)
        {

            
    printf ("a[%d]="i);
            
    scanf ("%d", &a[i]);
            
    printf (" ");
        }
        return 
    n;
    }
    void outMas1(int kint c[])
        {
            for (
    int i=0i<ki++)
            {
                    
    printf ("%d "c[i]);
            }
        
    printf ("\n"); 
        }  
    void ArrProcess(int n,int Arr[],int Arr_b[]) 
    {
        
    int c=0
        
    Arr_b[0]=Arr[0]; 
        for(
    int i=0;i<n;i++,c++) 
        { 
            for(
    int k=0;k<i;k++) 
                { 
                    if(
    Arr[i]==Arr[k]) { c--;k=i; } 
                    if(
    k+1==iArr_b[c]=Arr[i]; 
                } 
        }
        
    outMas1(c,Arr_b);
     
         
    }  
    int main()
    {

        
    int mk=0a[N]={0}, b[N]={0}, c[N];

        
    int n=inMas1(a);

        
    ArrProcess(n,ab);

        
    scanf ("%d",&k);
        return 
    0;
    }
     
  12. Задача была такой:
    Вводятся 2 массива. Вывести массив, который будет содержать элементы введённых массивов по одному элементу (не повторяясь)
    Т.е. если введится массив a={1, 2, 3, 4, 5) и b={4, 5, 6, 7}, то программа должна выдавать массив "1234567".
    Ещё, нам задали вывести не только объединение, но и пересечение причём также, без повторяющихся элементов