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

Удалить отрицательные элементы

06.10.2015, 00:13. Просмотров 297. Ответов 3
Метки нет (Все метки)

Дана последовательность из n целых элементов. Удалить из нее все отрицательные элементы , затем отсортировать ее по возрастанию. Вывести на экран исходную последовательность до удаления, после удаления и после сортировки.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.10.2015, 00:13
Ответы с готовыми решениями:

Удалить из файла отрицательные элементы
Дан файл целых чисел.Удалить из него отрицательные элементы собственно делаю 2мя...

Удалить отрицательные элементы массива
Дан массив, найти максимальный, минимальный элементы и их индексы. Удалить отрицательные элементы...

Удалить из массива отрицательные элементы
Помогите пожалуйста, сломал голову, надо удалить из массива все отрицательные элементы,...

Удалить из однонаправленного списка отрицательные элементы
Создать список из случайных положительных и отрицательных целых чисел (от –10 до 10) и удалить из...

Удалить отрицательные элементы массива. Программа почему-то только частично работает
Надо удалить все отрицательные элементы, расположенные до первого минимального. У меня почему-то...

3
smartpointer
70 / 64 / 39
Регистрация: 17.02.2014
Сообщений: 265
06.10.2015, 04:24 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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <time.h>
#include <string.h>
 
#define N 20
 
void rnd(int* init_seq)
{
    srand(time(0));
    for(unsigned i = 0; i < N;++i)
        init_seq[i] = rand()%21+(-10);
}
 
void print(int* seq,unsigned count)
{
    for(unsigned i = 0; i < count;++i)
    {
        if(i && !(i%5))
            printf("\n");
        printf("array[%u]:%d\t",i,seq[i]);
    }
    printf("\n");
}
 
int* del_negative(int* seq,unsigned* del_count)
{
    int temp_seq[N];
    int* del_seq;
    for(unsigned i = 0; i < N;++i)
    {
        if(seq[i] < 0)
        {
            ++*del_count;
            continue;
        }
        temp_seq[i-*del_count] = seq[i];
    }
    unsigned byte_count = (N-*del_count)*sizeof(int);
    del_seq = (int*)malloc(byte_count);
    memcpy(del_seq,temp_seq,byte_count);
    return del_seq;
}
 
void bubblesort(int* seq,unsigned size)
{
    for(unsigned right = size - 1;right; --right)
        for(unsigned i = 0;i < right; i++)
            if(seq[i+1] < seq[i])
            {
                int temp = seq[i];
                seq[i] = seq[i+1];
                seq[i+1] = temp;
            }
}
 
int main()
{
    setlocale(LC_ALL,"Russian");
    int init_seq[N];
    rnd(init_seq);
    unsigned del_count = 0;
    int* del_seq = del_negative(init_seq,&del_count);
    printf("Исходная последовательность:\n");
    print(init_seq,N);
    printf("Последовательность до сортировки:\n");
    print(del_seq,N-del_count);
    bubblesort(del_seq,N-del_count);
    printf("Последовательность после сортировки:\n");
    print(del_seq,N-del_count);
    free(del_seq);
    return 0;
}
1
Геомеханик
798 / 602 / 939
Регистрация: 26.06.2015
Сообщений: 1,409
06.10.2015, 06:31 3
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <stdio.h>
int* array_remove(int* fa, int* la, int (*pfun)(int));
void array_sort(int* fa, int* la, int (*pfun)(int, int));
void array_println(FILE* _out, const int* fa, const int* la);
 
int compare_d(int n)        { return (n < 0); }
int compare_s(int a, int b) { return (a < b); }
 
int main(void){
    int* e;
    int  a[] = { 9, -1, 5, 8, -2, -3, 7, -5, -9, -3, -2, 1, -5 };
    size_t n = sizeof(a)/sizeof(a[0]);
 
    array_println(stdout, a, a + n);
 
    e = array_remove(a, a + n, &compare_d);
    array_println(stdout, a, e);
 
    array_sort(a, e, &compare_s);
    array_println(stdout, a, e);
    return 0;
}
 
//удаление
int* array_remove(int* fa, int* la, int (*pfun)(int)){
    int* p;
    while((fa != la) && !(*pfun)(*fa))
        ++fa;
    
    for(p = fa; fa != la; *fa = *p){
        if((*pfun)(*p))
            --la;
        else
            ++fa;
        ++p;
    }
    return la;
}
 
//сортировка вставками
void array_sort(int* fa, int* la, int (*pfun)(int, int)){
    int* p, k, *o = fa;
    for(++fa; fa < la; ++fa){
        k = *fa;
        for(p = fa - 1; (p >= o) && (*pfun)(k, *p); --p)
            *(p + 1) = *p;
        *(p + 1) = k;
    }
}
 
//печать
void array_println(FILE* _out, const int* fa, const int* la){
    while(fa != la)
        fprintf(_out, "%d ", *fa++);
    fputc('\n', _out);
}
Пример работы кода
1
Vtulhu
425 / 379 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
06.10.2015, 12:35 4
Небольшое читерство. Условию задачи, конечно, не соответствует, просто информация к размышлению...

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdlib.h>
#include <stdio.h>
 
int compare_positives(const void* pa, const void* pb) {
    int a = *(int*)pa;
    int b = *(int*)pb;
    if (a < 0) { return b >= 0; }
    if (b < 0 || a < b) { return -1; }
    return a != b;
}
 
int main(void) {
    int  arr[] = { 9, -1, 5, 8, -2, -3, 7, -5, -9, -3, -2, 1, -5 };
    size_t siz = sizeof(arr) / sizeof(arr[0]);
    qsort(arr, siz, sizeof(int), compare_positives);
    for (int i = 0; i < n; i++) {
        if (arr[i] < 0) { break; }
        printf("%d ", arr[i]);
    }
    putchar('\n');
    return 0;
}
0
06.10.2015, 12:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.10.2015, 12:35

Создать список из случайных целых чисел и удалить из него отрицательные элементы
Всем привет! Ребята помогите! Нужна ваша помощь! &quot;Написать программу по созданию, просмотру,...

Удалить все строки и столбцы, на пересечении которых находятся отрицательные элементы
задача - удалить все строки и столбцы на пересечении которых находятся отрицательные элементы ...

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


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

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

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