Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++]Массивы 
:(
    Опции темы
rolex
Дата 26.1.2007, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 25.1.2007

Репутация: нет
Всего: нет



Ввести не более 20 десятичных чисел от -100 до 100. Положительные записать в один массив, отрицательные - в другой массив. Затем отсортировать оба массива: один по возрастанию, другой по убыванию. Для каждого массива подсчитать сумму и для каждого массива найти максимум и минимум.

Кто-нибудь сделайте пожалуйста эту программу, буду очень благодарен.
PM MAIL   Вверх
Oleg_Ci
Дата 26.1.2007, 07:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



PM MAIL   Вверх
V.A.KeRneL
Дата 26.1.2007, 07:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vadim A. Kazantsev
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 3.12.2006
Где: Moscow, Russia

Репутация: 7
Всего: 14



Было настроение по[ш]кодить => Вот, наваял это чудо: 
Код

/* ======================================================================== */
/* =============================   Includes   ============================= */
/* ======================================================================== */

#include <stdio.h>      /* for scanf(), printf(), puts(), putchar() */
#include <stdlib.h>     /* for qsort() */
#include <malloc.h>     /* for [m/c]alloc() */
#include <sys/types.h>  /* for size_t and ssize_t */

/* ======================================================================== */
/* ==========================   User data types   ========================= */
/* ======================================================================== */

/* 
   Boolean data type.
 */
#define TRUE    1
#define FALSE   0
typedef   int   bool;

/* ======================================================================== */
/* =============================   Constants   ============================ */
/* ======================================================================== */

#define MINN   (-100)  /* minimally admissible value for array elements */
#define MAXN   (+100)  /* maximally admissible value for array elements */

#define MAX_NUMBERS   20  /* maximum number of numbers */

/* ======================================================================== */
/* ===========================   Mode settings   ========================== */
/* ======================================================================== */

#define INTERACTIVE_MODE    0  /* set to 1 for interactive mode, 
                                  0 -- otherwise (default) */
#define DYNAMIC_MEM_ALLOC   0  /* set to 1 for dynamic memory allocating, 
                                  0 -- static (default) */
#define USE_QSORT           0  /* set to 1 for usage of standard qsort() 
                                  function, 
                                  0 -- for usage of my bubble_sort() 
                                  function (default) */

/* ======================================================================== */
/* ==============================   Macros   ============================== */
/* ======================================================================== */

#define SWAP(a, b) { \
    int t;           \
    (t) = (a);       \
    (a) = (b);       \
    (b) = (t);       \
}

/* ======================================================================== */
/* ============================   Prototypes   ============================ */
/* ======================================================================== */

bool ge(const void *a, const void *b);
bool le(const void *a, const void *b);
int min(int *arr, size_t nelem);
int max(int *arr, size_t nelem);
int sum(int *arr, size_t nelem);
void bubble_sort(int *arr, ssize_t nelem, 
          bool (*compar)(const void *a, const void *b));
void print_array(const int *arr, size_t nelem);

/* ======================================================================== */
/* ==================   User procedures and functions   =================== */
/* ======================================================================== */

/* ======================   Comparisons functions   ======================= */

/* 
   ``ge(&a, &b)'' is similar to ``a >= b''.
 */
bool 
ge(const void *a, const void *b) 
{ 
    return ( *((int*) a) - *((int*) b) );
}

/* 
   ``le(&a, &b)'' is similar to ``a <= b''.
 */
bool 
le(const void *a, const void *b) 
{ 
    return ( *((int*) b) - *((int*) a) );
}

/* ============================   Min & Max   ============================= */

/* 
   Minimum element of array.
 */
int 
min(int *arr, size_t nelem) 
{ 
    int min;
    int i;  /* index, counter */
    
    if (nelem == 0) 
        return (0);
    
    min = arr[0];
    for (i = 1; i < nelem; ++i) 
        if (arr[i] < min) 
            min = arr[i];
    
    return (min);
}

/* 
   Maximum element of array.
 */
int 
max(int *arr, size_t nelem) 
{ 
    int max;
    int i;  /* index, counter */
    
    if (nelem == 0) 
        return (0);
    
    max = arr[0];
    for (i = 1; i < nelem; ++i) 
        if (arr[i] > max) 
            max = arr[i];
    
    return (max);
}

/* ===============================   Sum   ================================ */

/* 
   Amount of elements of array.
 */
int 
sum(int *arr, size_t nelem) 
{ 
    int sum;
    int i;  /* index, counter */
    
    sum = 0;
    for (i = 0; i < nelem; ++i) 
        sum += arr[i];
    
    return (sum);
}

/* ========================   Sorting of arrays   ========================= */

/* 
   Bubble sort.
 */
void 
bubble_sort(int *arr, ssize_t nelem, 
     bool (*compar)(const void *a, const void *b)) 
{ 
    int i, j;  /* indexes, counters */
    
    for (i = 0; i < nelem - 1; ++i) 
        for (j = 0; j < nelem - 1 - i; ++j) 
            if ((*compar)(&arr[j], &arr[j + 1]) > 0) 
                SWAP(arr[j], arr[j + 1]);
}

/* ========================   Printing of arrays   ======================== */

/* 
   Prints an array.
 */
void 
print_array(const int *arr, size_t nelem) 
{ 
    int i;  /* index, counter */
    
    putchar('[');
    if (nelem > 0) 
        printf("%d", arr[0]);
    for (i = 1; i < nelem; ++i) 
        printf(", %d", arr[i]);
    putchar(']');
    putchar('\n');
}

/* ======================================================================== */
/* ===============================   Main   =============================== */
/* ======================================================================== */

/* 
   Main.
 */
int 
main(void) 
{ 
#if (DYNAMIC_MEM_ALLOC)  /* dynamic memory allocating */
    int *positives;  /* array with positive integers */
    int *negatives;  /* array with negative integers */
#else  /* static memory allocating */
    int positives[MAX_NUMBERS];  /* array with positive integers */
    int negatives[MAX_NUMBERS];  /* array with negative integers */
#endif
    int cnt = 0;  /* counter for entered numbers */
    int pc  = 0;  /* counter for positive integers */
    int nc  = 0;  /* counter for negative integers */
    int n;
    
#if (DYNAMIC_MEM_ALLOC)
    positives = (int*) calloc(MAX_NUMBERS, sizeof(int));
    negatives = (int*) calloc(MAX_NUMBERS, sizeof(int));
#endif
    
#if (INTERACTIVE_MODE)
    printf("Please, enter up to 20 nonzero integers from range "
           "[%d, %d].\n", 
           MINN, MAXN);
#endif
    
    while (TRUE) { 
#if (INTERACTIVE_MODE)
        printf("number[%d] := ", cnt);
#endif
        if (!((scanf("%d", &n) == 1) && (cnt < MAX_NUMBERS))) 
            break;
        
        if (MINN <= n && n <= MAXN && n != 0) { 
            if (n > 0) 
                positives[pc++] = n;
            else if (n < 0) 
                negatives[nc++] = n;
            
            ++cnt;
        } 
#if (INTERACTIVE_MODE)
        else 
            printf("Please, enter nonzero integers from range "
                   "[%d, %d].\n", 
                   MINN, MAXN);
#endif
    }
    
#if (INTERACTIVE_MODE)
    putchar('\n');
#endif
    
    puts("Before sorting: ");
    printf("positives == "); print_array(positives, pc);
    printf("negatives == "); print_array(negatives, nc);
    
#if (USE_QSORT)
    qsort(positives, pc, sizeof(int), (*ge));
    qsort(negatives, nc, sizeof(int), (*le));
#else
    bubble_sort(positives, pc, (*ge));
    bubble_sort(negatives, nc, (*le));
#endif
    
    puts("After sorting: ");
    printf("positives == "); print_array(positives, pc);
    printf("minimum element of positives = %d\n", min(positives, pc));
    printf("maximum element of positives = %d\n", max(positives, pc));
    printf("sum of elements of positives = %d\n", sum(positives, pc));
    printf("negatives == "); print_array(negatives, nc);
    printf("minimum element of negatives = %d\n", min(negatives, nc));
    printf("maximum element of negatives = %d\n", max(negatives, nc));
    printf("sum of elements of negatives = %d\n", sum(negatives, nc));
    
#if (INTERACTIVE_MODE)
    putchar('\n');
#endif
    
#if (DYNAMIC_MEM_ALLOC)
    free(positives);
    free(negatives);
#endif
    
    return (0);
}


Тестировать прогу удобнее всего в неинтерактивном режиме, подав ей на вход текстовый файлик с чиселками.
Код

bash-2.05b$ cat input0.txt
bash-2.05b$ ./a.out < input0.txt > output0.txt
bash-2.05b$ cat output0.txt
Before sorting: 
positives == []
negatives == []
After sorting: 
positives == []
minimum element of positives = 0
maximum element of positives = 2009247405
sum of elements of positives = 0
negatives == []
minimum element of negatives = 0
maximum element of negatives = 0
sum of elements of negatives = 0
bash-2.05b$ 
bash-2.05b$ cat input1.txt
7
-7
8
-12
-19
64
0
101
16
-100
100
99
-101
13
-14
bash-2.05b$ ./a.out < input1.txt > output1.txt
bash-2.05b$ cat output1.txt
Before sorting: 
positives == [7, 8, 64, 16, 100, 99, 13]
negatives == [-7, -12, -19, -100, -14]
After sorting: 
positives == [7, 8, 13, 16, 64, 99, 100]
minimum element of positives = 7
maximum element of positives = 100
sum of elements of positives = 307
negatives == [-7, -12, -14, -19, -100]
minimum element of negatives = -100
maximum element of negatives = -7
sum of elements of negatives = -152
bash-2.05b$ 
bash-2.05b$ cat input2.txt
4
-16
-3
1
12
7
-101
78
-90
-19
30
7
-100
36
-6
0
55
100
5
-5
101
18
0
78
2
34
-81
-8
1
74
-71
3
67
8
-12
bash-2.05b$ ./a.out < input2.txt > output2.txt
bash-2.05b$ cat output2.txt
Before sorting: 
positives == [4, 1, 12, 7, 78, 30, 7, 36, 55, 100, 5, 18, 78]
negatives == [-16, -3, -90, -19, -100, -6, -5]
After sorting: 
positives == [1, 4, 5, 7, 7, 12, 18, 30, 36, 55, 78, 78, 100]
minimum element of positives = 1
maximum element of positives = 100
sum of elements of positives = 431
negatives == [-3, -5, -6, -16, -19, -90, -100]
minimum element of negatives = -100
maximum element of negatives = -3
sum of elements of negatives = -239
bash-2.05b$ 


==========================================================================================
P.S. Всегда следуйте правилам форма! В частности: 
Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или флажком при ответе smile
==========================================================================================


Это сообщение отредактировал(а) V.A.KeRneL - 5.3.2007, 21:43


--------------------
«C'est un pense-creux d'ici. C'est le meilleur et le plus irascible homme du monde...» © Ф.М. Достоевский, «Бесы»
---/)/)---(\.../)---(\(\
--(':'=)---(=';'=)---(=':')
(")(")..)-(").--.(")-(..(")(")

PM MAIL IM ICQ AOL YIM MSN   Вверх
Pete
Дата 26.1.2007, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 318
Регистрация: 5.1.2006
Где: Москва

Репутация: 7
Всего: 12



V.A.KeRneL, ну, да. После этого точно вопросов не возникнет...
 smile 


--------------------
Совет учиться на ошибках других бесполезен; научиться чему-либо можно только на собственных ошибках. (Бернард Шоу)
Не откладывай на завтра то, что можешь сделать сегодня. (Пословица)
А теперь выпишем точное значение числа пи... (Препод)
Жахни, Пендальф! © Гоблин
PM   Вверх
Xenon
Дата 26.1.2007, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 19
Всего: 50



И мои 5 копеек
Код

#include <iostream>
#include <vector>

using std::cout;
using std::cin;
using std::endl;
using std::vector;

enum Sort_Type { Up, Down };    

template <class T>
void divide_arr (T* dist_arr,T** neg_arr,T** pos_arr,int& pos_size,int& neg_size,int size);
template <class T>
void display (T* arr,int size);
template <class T>
void sort (T* arr,int size,Sort_Type Type);
template <class T>
T sum (T* arr,int size);
template <class T>
T find_min(T* arr,int size);
template <class T>
T find_max(T* arr,int size);

const int SIZE=5;

int main(int argc, char* argv[])
{
    double* pos_arr; //Собственно указатель на массив с положительными числами
    double* neg_arr; //Указатель на массив с отрицательными числами
    int pos_size; //Размер массива с положительными числами
    int neg_size; //Размер массива с отрицательными числами
    double arr[SIZE];
    //Ввод данных
    for (int i=0;i<SIZE;i++)
    {
        cout << "Enter num " << i << ": ";
        cin >> arr[i];
    }
    //Разделение массива на массивы положительных и отрицательных чисел
    divide_arr(arr,&neg_arr,&pos_arr,pos_size,neg_size,SIZE);
    //Сортивка массивов по условию
    sort(pos_arr,pos_size,Sort_Type::Down);
    sort(neg_arr,neg_size,Sort_Type::Up);
    //Отображение массивов
    cout << "Positives: ";
    display(pos_arr,pos_size);
    cout << "\nNegatives: ";
    display(neg_arr,neg_size);
    //Отображение максимальных и минимальных чисел для массивов
    if (pos_arr!=NULL && pos_size>0)
    {
        cout << "\nMax among positives: " << find_max(pos_arr,pos_size);
        cout << "\nMin among positeves: " << find_min(pos_arr,pos_size);
        cout << "\nSum: " << sum(pos_arr,pos_size);
    }
    else { cout << "Sorry, pos array is empty"; }
    
    if (neg_arr!=NULL && neg_size>0)
    {
        cout << "\nMax among negatives: " << find_max(neg_arr,neg_size);
        cout << "\nMin among negative: " << find_min(neg_arr,neg_size);
        cout << "\nSum: " << sum(neg_arr,neg_size);
    }
    else { cout << "\nSorry, neg array is empty"; }
    cin.sync();
    cin.get();
    //Чистка памяти
    delete [] pos_arr;
    delete [] neg_arr;
    return 0;
}
//Разделение массива на массивы положительных и отрицательных чисел
template <class T>
void divide_arr (T* dist_arr,T** neg_arr,T** pos_arr,int& pos_size,int& neg_size,int size)
{
    vector<T> neg,pos;
    pos_size=0;
    neg_size=0;
    for (int i=0;i<size;i++)
    {
        if (dist_arr[i]<0)
        {
            neg.push_back(dist_arr[i]);
            ++neg_size;
        }
        else
        {
            pos.push_back(dist_arr[i]);
            ++pos_size;
        }
    }
    if (neg_size>0)
    {
        *neg_arr=new T[neg_size];
        std::copy(neg.begin(),neg.end(),*neg_arr);
    }
    else { *neg_arr=NULL; }
    if (pos_size>0)
    {
        *pos_arr=new T[pos_size];
        std::copy(pos.begin(),pos.end(),*pos_arr);
    }
    else { *pos_arr=NULL; }
}
//Вывод массив на экран
template <class T>
void display (T* arr,int size)
{
    if (arr!=NULL && size>0) //Если массив не пуст ...
    {
        for (int i=0;i<size;i++)
        {
            cout << arr[i] << " ";
        }
    }
    else
    {
        cout << "\nSorry, array is empty";
    }
}
//Сортировка массив по условию
template <class T>
void sort (T* arr,int size,Sort_Type Type)
{
    switch (Type)
    {
    case Up:
        for (int j=1,i=0;j<size;j++)
        {
            T temp=arr[j];
            for (i=j-1;i>=0 && arr[i]>temp;i--)
            {
                arr[i+1]=arr[i];
            }
            arr[i+1]=temp;
        }
    break;
    case Down:
        for (int j=1,i=0;j<size;j++)
        {
            T temp=arr[j];
            for (i=j-1;i>=0 && arr[i]<temp;i--)
            {
                arr[i+1]=arr[i];
            }
            arr[i+1]=temp;
        }
        break;
    }
}
//Подсчет суммы
template <class T>
T sum (T* arr,int size)
{
    T sum=0;
    for (int i=0;i<size;i++)
    {
        sum+=arr[i];
    }
    return sum;
}
//Поиск максимального числа
template <class T>
T find_max(T* arr,int size)
{
    T max=arr[0];
    for (int i=1;i<size;i++)
    {
        if (arr[i]>max) { max=arr[i]; }
    }
    return max;
}
//Поиск наименьшего числа
template <class T>
T find_min(T* arr,int size)
{
    T min=arr[0];
    for (int i=1;i<size;i++)
    {
        if (arr[i]<min) { min=arr[i];}
    }
    return min;
}


Это сообщение отредактировал(а) Xenon - 27.1.2007, 00:44


--------------------
user posted image  
PM MAIL   Вверх
rolex
Дата 26.1.2007, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 25.1.2007

Репутация: нет
Всего: нет



Спасибо всем большое!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0481 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.