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

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

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

Дана последовательность из n целых элементов. Удалить из нее все отрицательные элементы , затем отсортировать ее по возрастанию. Вывести на экран исходную последовательность до удаления, после удаления и после сортировки.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.10.2015, 00:13
Ответы с готовыми решениями:

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

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

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

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

3
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
813 / 616 / 940
Регистрация: 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
426 / 380 / 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.10.2015, 12:35

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

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


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

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

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