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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

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

Делаю задание, одно из подзаданий ниже. Надо отсортировать массив, что я сделал методом сортировки-пузырьком, но надо сохранить структуру, чтоб каждой отсортированной цене соответствовало её количество заказов. Я смог сделать, чтоб цена выводилась отсортированная, но количество заказов выводится начальное(для не отсортированной цены). Как это сделать не знаю, может у кого-то будут предложения.

Дан массив из 20 элементов: каждый нечетный содержит цену товаров, а каждый четный - количество заказов на этот товар: отсортировать массив по возрастанию цен, сохраняя структуру "цена - количество".

Код:
#include <stdio.h>
#include <stdlib.h>
#define N 20
 
int main()
{
    int a[N], i, max = 0, nmax, n,  k=0, b, j, l, c ,lowpr, highpr;
    float sred, sum=0;
    puts("vvedite kolichestvo elementov massiva 0<n<=20: ");
    scanf ("%d", &n);
 
    if (n > N)
    {
        printf ("Slischom bolshoe kolichestvo elementov\n");
        exit (1); 
    }
    for(i=0;i<n;i++)
    {
        printf ("Vvedite cenu zakaza: ");
        scanf("%d", &a[2*i]);           // Элемент массива первый(0), т.е. нечетный.
        printf ("Kolichestvo zakazov: ");
        scanf("%d", &a[2*i+1]);
    }
    // Получили массив из чередующихся элементов - цена, количество заказов
    // Теперь обработка и вывод массива
 
    for (i = 0; i < n; i++)
    {
        printf("|-----------------------------|");
        printf ("\n| Nomer zakaza %d              |\n", i+1);
        printf ("| Cena: %d\t: Kolichestvo%d|\n", a[2*i], a[2*i+1]);
for (i=0; i<n; i++)
      for (j=0; j<n; j++)
           if(a[2*j]>a[2*j+2])
           {
               b=a[2*j];
               a[2*j]=a[2*j+2];
               a[2*j+2]=b;
 
           }
 
      printf("\n Vivod otsortirovannogo massiava po cene");
for(i=0; i<n; i++)
 printf("\n cena: %d \t kolichestvo: %d", a[2*i], a[2*i+1]);
return 0; 
}

Последний раз редактировалось samsandr; 26.11.2013 в 23:20.
samsandr вне форума Ответить с цитированием
Старый 26.11.2013, 23:26   #2
pitlis
 
Регистрация: 15.09.2013
Сообщений: 7
По умолчанию

Код:
for (i=0; i<n; i++)
for (j=0; j<n; j++)
    if(a[2*j]>a[2*j+2])
    {
        b=a[2*j];
        a[2*j]=a[2*j+2];
        a[2*j+2]=b;

        b = a[2*j+1];
        a[2*j+1] = a[2*j+3];
        a[2*j+3] = b;
    }
pitlis вне форума Ответить с цитированием
Старый 27.11.2013, 00:17   #3
samsandr
 
Регистрация: 26.11.2013
Сообщений: 8
По умолчанию

Цитата:
Сообщение от pitlis Посмотреть сообщение
Код:
for (i=0; i<n; i++)
for (j=0; j<n; j++)
    if(a[2*j]>a[2*j+2])
    {
        b=a[2*j];
        a[2*j]=a[2*j+2];
        a[2*j+2]=b;

        b = a[2*j+1];
        a[2*j+1] = a[2*j+3];
        a[2*j+3] = b;
    }
Не работает. У вас получилось?
samsandr вне форума Ответить с цитированием
Старый 27.11.2013, 00:37   #4
samsandr
 
Регистрация: 26.11.2013
Сообщений: 8
По умолчанию

При выводе ничего не выдаёт, можно сказать- выдаёт ошибку.
samsandr вне форума Ответить с цитированием
Старый 27.11.2013, 16:42   #5
Shad0wF1rst
Форумчанин
 
Регистрация: 11.01.2013
Сообщений: 149
По умолчанию

А почему нельзя создать структуру данных типа:
Код:
struct Shop {
    int coast;
    int countZakaz;
};
Или еще лучше класс CShop где будет реализован метод:
Код:
void swap (CShop &shop, CShop &shop2)
{CShop buffer; buffer.coast = shop.coast; buffer.countZakaz = shop.countZakaz; 
shop.coast = shop2.coast; shop.countZakaz = shop2.countZakaz; 
shop2.coast = buffer.coast; shop2.countZakaz = buffer.countZakaz;}
Может это и чушь, но это моя чушь и я ее никому не отдам.
Shad0wF1rst вне форума Ответить с цитированием
Старый 27.11.2013, 19:17   #6
Shad0wF1rst
Форумчанин
 
Регистрация: 11.01.2013
Сообщений: 149
По умолчанию

И так же переопределить оператор для = для простоты присваивания:
Код:
CShop & operator= (CShop& c)
{
    countZakaz= c.countZakaz;
    coast = c.coast;
    return *this;
}
Может это и чушь, но это моя чушь и я ее никому не отдам.
Shad0wF1rst вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с одномерным массивом Carter Паскаль, Turbo Pascal, PascalABC.NET 2 04.12.2011 18:38
Работа с одномерным массивом TvYown Помощь студентам 0 23.12.2010 20:52
Работа с одномерным массивом TvYown Общие вопросы C/C++ 2 23.12.2010 17:29
Работа с одномерным массивом Roll1n Общие вопросы C/C++ 20 10.04.2010 18:35