Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2014, 20:56   #1
samsandr
 
Регистрация: 26.11.2013
Сообщений: 8
По умолчанию Проблема с делением массива пополам и перестановкой его частей.

Помогите с программой: создать массив с парным количеством элементов- например 1,2,3,4,5,6. Этот массив надо поделить пополам и части поменять местами 4,5,6,1,2,3-так должно выйти. у меня получилось, что переставляется частично 4,5,6,4,5,6. Как я понял, моя ошибка в том, что переставив 4,5,6 в начало(строки 22-29), программа воспринимает их первой частью и после того как я заменяю вторую часть первой(строки 34-43) это уже не 1,2,3 , а 4,5,6 , поэтому и выглядит 4,5,6,4,5,6. Что мне сделать, чтоб работало адекватно.
Код:
#include <stdio.h>
#include <stdlib.h>

int main()
{ int n, i, partl, partr;
int *ip, *iq;
    printf("Vvedite parnoe kolichestvo elementov massiva\n");
    scanf("%d",&n);
    int a[n];
    partl=n/2;  //seredina massiva
    
    if(n%2!=0)
    printf("Vvedennoe kolichestvo neparnoe");
    else
    {
        printf("\nVvedite elementi massiva:\n");
        for(i=0;i<n;i++)
        scanf("%d", &a[i]);
        
       // int b[n];
        //b[n]=a[n];

        for(i=0;i<partl;i++)
        {
            while(partl!=n)
            {
                ip=&a[i];  //ukaz na a[i]
                *ip=a[partl]; //teper a[i]=a[partl]
                i++;
                partl++;
            }

        }

        for(i=partl;i<n;i++)
        {
            partr=0;

            while(partr!=partl)
            {
                iq=&a[i]; //ukaz na a[i] (seredina massiva)
                *iq=a[partr]; //a[i]=0-mu elementu
                i++;
                partr++;
            }
        }

        printf("\nPerestavleennie levaya i pravaya chast massiva: " );
        for(i=0;i<n;i++)
        printf("\n%d", a[i]);
    }
    return 0;
}
Изображения
Тип файла: png Безымянный.png (10.6 Кб, 70 просмотров)
samsandr вне форума Ответить с цитированием
Старый 10.03.2014, 21:31   #2
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Зачем Вам столько циклов?
Достаточно одного:
Код:
  for(i=0;i<partl;i++)
        {
             nTmp = a[i];
             a[i] = a[i+part];
             a[i+part] = nTmp;

        }
Smogg вне форума Ответить с цитированием
Старый 10.03.2014, 22:24   #3
samsandr
 
Регистрация: 26.11.2013
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Smogg Посмотреть сообщение
Зачем Вам столько циклов?
Достаточно одного:
Код:
  for(i=0;i<partl;i++)
        {
             nTmp = a[i];
             a[i] = a[i+part];
             a[i+part] = nTmp;

        }
Вы правы, но как реализовать программу с помощью указателей. Я переделал немного код, чтоб использовать указатели, но это кажется мне немного бессмысленным в данном случае. Может есть лучший вариант.
Код:
 for(i=0;i<partl;i++)
        {
             nTmp=a[i];
             ip = &a[i];
             *ip = a[i+partl];
             a[i+partl]=nTmp;


        }
samsandr вне форума Ответить с цитированием
Старый 10.03.2014, 22:52   #4
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Ну, если вам обязательно нужны указатели, то вот то же самое, но с явным использованием "принципа указателей":
Код:
int nTmp;
	for(i=0;i<partl;i++)
	{
		nTmp = *(a +i);
		*(a +i) = *(a +i+partl);
		*(a+i+partl) = nTmp;

	}
Кароч, масло масляное и корявость кода.
Массив - он сам по себе и есть не более чем указатель.
Smogg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сдвиг одномерного массива перестановкой блоков zvir Общие вопросы C/C++ 4 09.12.2011 23:34
Реверс частей массива GangstaKarapuse Помощь студентам 1 26.11.2011 17:29
Поиск делением пополам dENISVOL94 Общие вопросы C/C++ 2 26.09.2011 20:39
сортировка частей массива(паскаль) Useless Помощь студентам 1 18.11.2008 09:19
Проблема с делением 1 на 2 Bravo Общие вопросы C/C++ 4 20.10.2008 23:20