Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Devil40rus
0 / 0 / 2
Регистрация: 29.09.2014
Сообщений: 112
1

Сформировать новые последовательности, состоящие из четных и нечетных элементов исходной последовательности

08.10.2015, 11:46. Просмотров 506. Ответов 13
Метки нет (Все метки)

Дана последовательность из n целых элементов. Сформировать две новых последовательности, состоящих соответственно из четных и нечетных (по индексу) элементов исходной последовательности. Элементы в результирующих последовательностях должны быть отсортированы по убыванию. Все последовательности: исходную и полученные вывести на экран.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.10.2015, 11:46
Ответы с готовыми решениями:

Сформировать две последовательности, состоящих из четных и нечетных элементов исходной
Дана последовательность из n целых элементов. Сформировать две новых последовательности, состоящих...

Сформировать две последовательности, из положительных и отрицательных элементов исходной последовательности
Дана последовательность из n целых элементов . Сформировать две новых последовательности, состоящих...

Сформировать две новые последовательности x и y в соответствии с правилом
Препод сказала, что молодец, написал, но надо теперь сделать ввод/обработку массива через функцию....

Сформировать новые числовые последовательности в соответствии с заданным правилом
Столкнулся с проблемой на лабах. Объяснять особо никто не спешит, а ждать не особо хочется, потому...

Найти сумму нечетных элементов последовательности
1. Дана последовательность из n целых чисел. Найти сумму нечетных элементов этой...

13
Kuzia domovenok
2780 / 2409 / 618
Регистрация: 25.03.2012
Сообщений: 8,607
Записей в блоге: 1
Завершенные тесты: 1
08.10.2015, 14:50 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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
 
int main() {
    int a[]={5, 2, 9, 1, 7, 6, 3, 8, 1, 4};
    const int size=sizeof(a)/sizeof(int)/2;
    int b[size], c[size];
    int cnt=0;
    for (int i=0; i<size; i++){
        int j;
        //put_num(a[cnt], b, i);
        j=i;
        while(j>0 && b[j-1]>a[cnt]){ 
            b[j]=b[j-1];
            j--;
        }
        b[j]=a[cnt];
        cnt++;
        //put_num(a[cnt], c, i);
        j=i;
        while(j>0 && c[j-1]>a[cnt]){ 
            c[j]=c[j-1];
            j--;
        }
        c[j]=a[cnt];
        cnt++;
    }
    for (int i=0; i<cnt; i++)
        cout<<a[i]<<" ";
    cout<<endl;
    for (int i=0; i<size; i++)
        cout<<b[i]<<" ";
    cout<<endl;
    for (int i=0; i<size; i++)
        cout<<c[i]<<" ";
    cout<<endl;
    getch();
    return 0;
}
0
Vtulhu
425 / 379 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
09.10.2015, 13:39 3
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
const int size=sizeof(a)/sizeof(int)/2;
А теперь подумайте, что будет, если исходный массив имеет нечетное количество элементов.
0
Kuzia domovenok
2780 / 2409 / 618
Регистрация: 25.03.2012
Сообщений: 8,607
Записей в блоге: 1
Завершенные тесты: 1
09.10.2015, 17:07 4
Vtulhu, массив жёстко задаётся в программе. Запрещаю изменять не только количество элементов, но и сами значения 5, 2, 9, 1, 7, 6, 3, 8, 1, 4
0
09.10.2015, 17:07
Vtulhu
425 / 379 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
09.10.2015, 19:20 5
А, ну тогда совсем просто, конечно. У Вас, кстати, программа вообще не на C. Нет в этом языке cin/cout.

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
#include <stdio.h>
#include <stdlib.h>
 
int compare(const void* pa, const void* pb) {
    int a = *(int*)pa;
    int b = *(int*)pb;
    return a > b ? -1 : a != b;
}
 
void print_array(int* arr, size_t siz) {
    while (siz--) {
        printf("%d ", *arr++);
    }
    putchar('\n');
}
 
int main(void) {
    int arr[] = { 5, 2, 9, 1, 7, 6, 3, 8, 1, 4 };
    const size_t siz = sizeof(arr) / sizeof(int) / 2;
    print_array(arr, 2 * siz);
    int evens[siz];
    int odds[siz];
    for (size_t i = 0; i < siz; i++) {
        evens[i] = arr[2 * i];
        odds[i] = arr[2 * i + 1];
    }
    qsort(evens, siz, sizeof(int), compare);
    print_array(evens, siz);
    qsort(odds, siz, sizeof(int), compare);
    print_array(odds, siz);
    return 0;
}
0
Kuzia domovenok
2780 / 2409 / 618
Регистрация: 25.03.2012
Сообщений: 8,607
Записей в блоге: 1
Завершенные тесты: 1
11.10.2015, 23:07 6
Vtulhu, ну а ты вообще смухлевал и сортировку из библиотеки позаимствовал
0
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10537 / 6239 / 1567
Регистрация: 25.07.2009
Сообщений: 11,879
12.10.2015, 00:26 7
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Vtulhu, ну а ты вообще смухлевал и сортировку из библиотеки позаимствовал
Во-первых Вам справедливо сделали замечание - С и С++ разные языки, а во-вторых в чём именно мухлёж заключается?

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
#include <stdio.h>
#include <glib.h>
 
int desc_cmp(const void * a, const void * b) {
    return *(int*)b - *(int*)a;
}
 
int main(void) {
    int n, i;
    GArray * array = g_array_new(FALSE, FALSE, sizeof(int));
    GList * evensodds[] = { NULL, NULL }, * iter;
    
    printf("Enter sequence of integers and any letter when done...\n> ");
    while ( scanf("%d", &n) == 1 )
        g_array_append_val(array, n);
    
    for ( i = 0; i < array->len; ++i )
        evensodds[i & 1] = g_list_prepend(evensodds[i & 1], &g_array_index(array, int, i));
    
    for ( i = 0; i < 2; ++i )
        evensodds[i] = g_list_sort(evensodds[i], (GCompareFunc)desc_cmp);
    
    printf("Original sequence:\n");
    for ( i = 0; i < array->len; ++i )
        printf("%d ", g_array_index(array, int, i));
    
    printf("\nDescendant sorted evens:\n");
    for ( iter = g_list_first(evensodds[0]); iter; iter = g_list_next(iter) )
        printf("%d ", *(int*)(iter->data));
    printf("\nDescendant sorted odds:\n");
    for ( iter = g_list_first(evensodds[1]); iter; iter = g_list_next(iter) )
        printf("%d ", *(int*)(iter->data));
    printf("\n");
    
    for ( i = 0; i < 2; ++i )
        g_list_free(evensodds[i]);
    g_array_free(array, TRUE);
    
    return 0;
}
Код
$ gcc sorted_odds_and_evens.c \
> `pkg-config glib-2.0 --cflags --libs`
$ ./a.out 
Enter sequence of integers and any letter when done...
> 0 1 2 3 4 5 6 7 q
Original sequence:
0 1 2 3 4 5 6 7 
Descendant sorted evens:
6 4 2 0 
Descendant sorted odds:
7 5 3 1 
$
0
Kuzia domovenok
2780 / 2409 / 618
Регистрация: 25.03.2012
Сообщений: 8,607
Записей в блоге: 1
Завершенные тесты: 1
12.10.2015, 13:19 8
easybudda, мухлёж в использовании библиотеки qsort.lib . Он нечестно отсортировал.

Этот косяк гораздо серьёзнее моего! Я вообще либо не заметил раздела Си и виновен, либо тему перенесли из С++.
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
#include <stdio.h>
#include <conio.h>
#define SIZE 5 
int main() {
   int a[]={5, 2, 9, 1, 7, 6, 3, 8, 1, 4};
    int b[SIZE], c[SIZE];
    int cnt=0, i;
    for (i=0; i<SIZE; i++){
        int j;
        //put_num(a[cnt], b, i);
        j=i;
        while(j>0 && b[j-1]>a[cnt]){ 
            b[j]=b[j-1];
            j--;
        }
        b[j]=a[cnt];
        cnt++;
        //put_num(a[cnt], c, i);
        j=i;
        while(j>0 && c[j-1]>a[cnt]){ 
            c[j]=c[j-1];
            j--;
        }
        c[j]=a[cnt];
        cnt++;
    }
    for (i=0; i<cnt; i++)
        printf("%d ", a[i]);
    printf("\n");
    for (i=0; i<SIZE; i++)
       printf("%d ", b[i]);
    printf("\n");
    for (i=0; i<SIZE; i++)
       printf("%d ", c[i]);
    printf("\n");
   getchar();
   return 0;
}
0
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10537 / 6239 / 1567
Регистрация: 25.07.2009
Сообщений: 11,879
12.10.2015, 15:31 9
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
мухлёж в использовании библиотеки qsort.lib
Это что за библиотека такая? qsort() - функция из стандартной библиотеки С, объявленная в заголовке stdlib.h
1
Vtulhu
425 / 379 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
12.10.2015, 16:56 10
Про всякие сортировки я слышал, но чтоб "нечестная"...
2
Kuzia domovenok
2780 / 2409 / 618
Регистрация: 25.03.2012
Сообщений: 8,607
Записей в блоге: 1
Завершенные тесты: 1
12.10.2015, 17:46 11
Vtulhu, Именно! ты проделываешь двойную работу - проходишься циклом по массиву, разбивая его на 2 части. И затем ещё дополнительно сортируешь! У меня всё это делается в одном цикле.
Что уж говорить про то, что использование кусорт без знания этого алгоритма никому пользы не принесёт!

Добавлено через 2 минуты
Цитата Сообщение от easybudda Посмотреть сообщение
Это что за библиотека такая? qsort() - функция из стандартной библиотеки С, объявленная в заголовке stdlib.h
говори как хочешь, это всё слова. В её использовании и мухлёжь. Он её что ли изобретал? У нас тут Ч.Хоар на форуме?
0
Eva Rosalene
Ladybug
4123 / 1597 / 304
Регистрация: 06.01.2013
Сообщений: 4,191
Завершенные тесты: 2
12.10.2015, 23:57 12
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
В её использовании и мухлёжь. Он её что ли изобретал?
Выкиньте компьютер. Вы его что ли изобретали?
3
Kuzia domovenok
2780 / 2409 / 618
Регистрация: 25.03.2012
Сообщений: 8,607
Записей в блоге: 1
Завершенные тесты: 1
13.10.2015, 01:06 13
Цитата Сообщение от FraidZZ Посмотреть сообщение
Выкиньте компьютер. Вы его что ли изобретали?
я так понимаю, на претензии по двойной работе ответить нечего?
0
Eva Rosalene
Ladybug
4123 / 1597 / 304
Регистрация: 06.01.2013
Сообщений: 4,191
Завершенные тесты: 2
13.10.2015, 01:30 14
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
на претензии по двойной работе ответить нечего?
Каким боком я к этому отношусь?

Суть моего поста была в том, что использование существующих решений вместо горожения велосипедов - не мухлёж, а вполне приемлемый вариант.
0
13.10.2015, 01:30
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2015, 01:30

Найти количество четных чисел в первой последовательности и количество нечетных во второй
Даны две последовательности целых чисел: а1, а2…an, и b1, b2, … bn. Найти количество четных чисел...

Сумма четных элементов в возрастающих участках последовательности
Прошу помочь с логикой задачи, условие которой заключается в нахождении суммы четных элементов во...

Даны три числовые последовательности a, b и c. Сформировать две новые последовательности x и y в соответствии со следующим правилом
Даны три числовые последовательности a, b и c. Сформировать две новые последовательности x и y в ...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru