Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 27.09.2023
Сообщений: 45
1

Удаление целых чисел в динамическом массиве

04.11.2023, 15:40. Показов 748. Ответов 28
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Чето уже не соображаю, помогите найти ошибку


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
75
76
77
78
79
80
81
#include<stdio.h>
#include<stdlib.h>
 
void PRINT(float* arr, int size);
void InPut(float* arr, int n); 
float* DELETE(float* arr, int n, int *newSize);
 
void main()
{
 
    printf("Test data- 1\nUser input- 2\n");
    char choose;
    scanf_s("%c", &choose, 1u);
    switch (choose)
    {
        case '1':
 
        break;
        case '2':
            printf("Enter araay's size: ");
            int size;
            scanf_s("%i", &size);
            float* ptr = (float*)malloc(size * sizeof(float));
            if (ptr)
            {
                InPut(ptr, size);
                PRINT(ptr, size);
                int newSize = 0;
                float *ptrNew = DELETE(ptr, size, &newSize);
                
                if (ptrNew)
                {
                    PRINT(ptrNew, newSize);
                    free(ptrNew);
                }
                else { printf("allocation memory error!"); free(ptr);}
                
                
            }
            else printf("allocation memory error!");
        break;
        default: printf("Error");
    }
 
}
 
void PRINT(float* arr, int n)
{
    for (short i = 0; i < n; i++)
        printf(" %.3f |", arr[i]);
}
 
void InPut(float* arr, int n)
{
    for (short i = 0; i < n; i++)
        scanf_s("%f", &arr[i]);
}
 
float* DELETE(float* arr, int n, int *newSize)
{
    int counter =0;
    float* newPtr;
    for (short i = 0; i < n; i++)
    {
        if (arr[i] == (int)arr[i])
        {
            counter++;
            for (short j = i; j < n; j++)
                arr[j] = arr[j + 1];
        }
    }
    if (counter != 0)
    {
        *newSize = n - counter;
        newPtr = (float*)realloc(arr, (n - counter) * sizeof(float));
    }
    else {
        newPtr = arr;
    }
    return newPtr;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.11.2023, 15:40
Ответы с готовыми решениями:

Удаление последнего элемента в массиве целых чисел (только С)
Изучаю С и решил написать программу: вводится число смен знака и потом вводится массив, ввод...

Реализовать бинарный поиск в динамическом массиве целых чисел
4)Реализовать бинарный поиск в динамическом массиве целых чисел

Реализовать последовательный поиск в динамическом массиве целых чисел
2)Реализовать последовательный поиск в динамическом массиве целых чисел.

Удаление элементов в динамическом массиве
Дан массив a из n элементов и число k. Удалить из этого массива все элементы, равные k. Порядок...

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

28
Злостный нарушитель
9540 / 5171 / 1181
Регистрация: 12.03.2015
Сообщений: 24,408
04.11.2023, 16:30 2
эээээ
Удаление целых чисел в динамическом массиве
1
0 / 0 / 0
Регистрация: 27.09.2023
Сообщений: 45
04.11.2023, 18:46  [ТС] 3
Это я хотел привести к числе без дробной части, но походу из-за этого и не пашет. Как можно тогда сделать проверку, является ли число целым?
0
Злостный нарушитель
9540 / 5171 / 1181
Регистрация: 12.03.2015
Сообщений: 24,408
04.11.2023, 18:54 4
Цитата Сообщение от HeChert Посмотреть сообщение
Как можно тогда сделать проверку, является ли число целым?
Не знаю.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
 
// работа с числами с плавающей точкой
#define PRECISION    1e-12 // точность (число, меньшее по модулю, считается за 0)
#define ZERO(x)      (fabs(x) < PRECISION) // примерно равно нулю
#define EQUAL(a, b)  ZERO((a) - (b)) // примерно равно
#define DEG2RAD(deg) (M_PI * (deg) / 180.0) // градусы ---> радианы
#define RAD2DEG(rad) (180.0 * (rad) / M_PI) // радианы ---> градусы
#define TRUNC_DN(x) ((unsigned)floor(fabs(x)))
#define TRUNC_UP(x) ((unsigned)ceil(fabs(x)))
#define ROUND(x) ((unsigned)rint(fabs(x)))
#define PRECISION_10(n) powl(10, -((signed)(n))) // 10^(-N)
#define DBL(x) ((long double)(x))
#define RANDOM (1.0 * rand() / RAND_MAX) // вещественное [0...1)
Добавлено через 1 минуту
Цитата Сообщение от HeChert Посмотреть сообщение
сделать проверку, является ли число целым?
А зачем?
2
0 / 0 / 0
Регистрация: 27.09.2023
Сообщений: 45
04.11.2023, 18:57  [ТС] 5
По заданию надо удалить целые числа из массива
0
Злостный нарушитель
9540 / 5171 / 1181
Регистрация: 12.03.2015
Сообщений: 24,408
04.11.2023, 19:03 6
Цитата Сообщение от HeChert Посмотреть сообщение
По заданию надо удалить целые числа из массива
В массиве float* нет целых, это массив чисел с плавающей точкой.
Целые числа в конпуктере кодируются по-другому.
0
0 / 0 / 0
Регистрация: 27.09.2023
Сообщений: 45
04.11.2023, 19:09  [ТС] 7
Имеются ввиду те, что не имеют дробной части
0
Злостный нарушитель
9540 / 5171 / 1181
Регистрация: 12.03.2015
Сообщений: 24,408
04.11.2023, 19:12 8
Цитата Сообщение от HeChert Посмотреть сообщение
Имеются ввиду те, что не имеют дробной части
Можно жэж набросать за пол-минуты нужную функцию.
Это называется "программирование"!
ПРИКИНЬ, да?!!11



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
#include <stdio.h>
#include <stdbool.h>
#include <math.h>
 
// работа с числами с плавающей точкой
#define PRECISION       1e-12 // точность (число, меньшее по модулю, считается за 0)
#define ZERO(x)         (fabs(x) < PRECISION) // примерно равно нулю
 
// вернёт true, если дробная часть числа х близка к 0
bool is_int(double x)
{
  double intpart, fracpart = modf(x, &intpart);
  return ZERO(fracpart); 
}
 
#define YN(x) ((x) ? "YES" : "NO")
 
int main()
{
  printf("%s\n", YN(is_int(-3.000001)));
  printf("%s\n", YN(is_int(-3.0000000001)));
  printf("%s\n", YN(is_int(-3.0000000000001)));
  return 0;
}
0
0 / 0 / 0
Регистрация: 27.09.2023
Сообщений: 45
04.11.2023, 19:32  [ТС] 9
Можешь объяснить мне, что делает fabs в 3 строке и как работает 17 строка
0
Злостный нарушитель
9540 / 5171 / 1181
Регистрация: 12.03.2015
Сообщений: 24,408
04.11.2023, 19:39 10
Лучший ответ Сообщение было отмечено HeChert как решение

Решение

Цитата Сообщение от HeChert Посмотреть сообщение
Можешь объяснить мне, что делает fabs в 3 строке и как работает 17 строка
Канешна жэ нет. Это очень сильное колдунство. За разглашение его работы за пределами Хогвардса нас очень сильно ругают. Никому не говори, что это я написал - я буду всё отрицать!!
1
0 / 0 / 0
Регистрация: 27.09.2023
Сообщений: 45
04.11.2023, 22:52  [ТС] 11
В функции DELETE такая проблема, что зацикливается, когда в последний элемент целое число, не могу сообразить, как исправить
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
!!!!!!!!!!!!!!!!!!!!#include<stdio.h>
#include<stdlib.h>
#include<math.h>
 
void PRINT(float* arr, int size);
void InPut(float* arr, int n); 
float* DELETE(float* arr, int n, int *newSize);
 
void main()
{
    printf("Test data- 1\nUser input- 2\n");
    char choose;
    scanf_s("%c", &choose, 1u);
    switch (choose)
    {
    case '1':;
        int size = 5;
        int newSize= 0;
        float* ptr = (float*)malloc(size * sizeof(float));
        if (ptr)
        {
            ptr[0] = 1.1;
            ptr[1] = 2.2;
            ptr[2] = 3;
            ptr[3] = 4;
            ptr[4] = 5;
            PRINT(ptr, size);
            float* ptrNew = DELETE(ptr, size, &newSize);
            if (ptrNew)
            {
                PRINT(ptrNew, newSize);
                free(ptrNew);
            }
            else printf("error");
        }
        else printf("allocation memory error!");
        break;
        case '2':
            printf("Enter araay's size: ");
            size;
            newSize = 0;
            scanf_s("%i", &size);
            ptr = (float*)malloc(size * sizeof(float));
            if (ptr)
            {
                InPut(ptr, size);
                PRINT(ptr, size);
                
                float *ptrNew = DELETE(ptr, size, &newSize);
                
                if (ptrNew)
                {
                    PRINT(ptrNew, newSize);
                    free(ptrNew);
                }
                else { printf("allocation memory error!");}
            }
            else { printf("allocation memory error!"); }
        break;
        default: printf("Error");
    }
 
}
 
void PRINT(float* arr, int n)
{
    for (short i = 0; i < n; i++)
        printf(" %.3f |", arr[i]);
 
    printf("\n");
}
 
void InPut(float* arr, int n)
{
    for (short i = 0; i < n; i++)
        scanf_s("%f", &arr[i]);
}
 
float* DELETE(float* arr, int n, int *newSize)
{
    int counter =0;
    float* newPtr;
    float remainder;
    for (short i = 0; i < n; i++)
    {
        while ((remainder = fmod(arr[i], 1.0)) == 0)
        {
            counter++;
            for (short j = i; j < n - 1; j++)
                arr[j] = arr[j + 1];
            if ((remainder = fmod(arr[i], 1.0) == 0)) continue;
            else i++;
        }
 
    }
    if (counter != 0)
    {
        *newSize = n - counter;
        newPtr = (float*)realloc(arr, *newSize * sizeof(float));
    }
    else {
        newPtr = arr;
    }
    return newPtr;
}
 Комментарий модератора 
Не нужно плодить темы с одним и тем же вопросом.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12831 / 7568 / 1764
Регистрация: 25.07.2009
Сообщений: 13,960
05.11.2023, 01:21 12
Как вариант
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <math.h>
 
unsigned del_if_int(double * arr, unsigned count) {
    unsigned iRead = 0, iWrite = 0;
    
    for ( ; iRead < count; ++ iRead )       
        if ( arr[iRead] != floor(arr[iRead]) )
            arr[iWrite++] = arr[iRead];
    
    return iWrite;
}
 
int main(void) {
    double arr[] = { 0.1, -2.00002, 4., -3.000000001, -4., 5.05 };
    unsigned count = del_if_int(arr, sizeof(arr) / sizeof(*arr));
    for (unsigned i = 0; i < count; ++i )
        printf("%f ", arr[i]);
    printf("\n");
    
    return 0;
}
Код
PS C:\Users\andrew\prog\c\num> clang -Wall .\del_if_int.c
PS C:\Users\andrew\prog\c\num> .\a.exe
0.100000 -2.000020 -3.000000 5.050000
PS C:\Users\andrew\prog\c\num>
1
452 / 319 / 64
Регистрация: 09.03.2016
Сообщений: 3,119
05.11.2023, 01:56 13
Удаление целых чисел в динамическом массиве

Ни чего такого уж не обычного здесь нету.
0
452 / 319 / 64
Регистрация: 09.03.2016
Сообщений: 3,119
05.11.2023, 01:57 14
Единицы в конец числа не ставит.
3.000000000001
0
Злостный нарушитель
9540 / 5171 / 1181
Регистрация: 12.03.2015
Сообщений: 24,408
05.11.2023, 02:03 15
Цитата Сообщение от Наталья8 Посмотреть сообщение
Единицы в конец числа не ставит.
3.000000000001
easybudda, ты это породил, ты и разгребай теперь.
0
452 / 319 / 64
Регистрация: 09.03.2016
Сообщений: 3,119
05.11.2023, 02:08 16
Удаление целых чисел в динамическом массиве
0
452 / 319 / 64
Регистрация: 09.03.2016
Сообщений: 3,119
05.11.2023, 02:09 17
Крючкотворцы......
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12831 / 7568 / 1764
Регистрация: 25.07.2009
Сообщений: 13,960
05.11.2023, 02:11 18
Цитата Сообщение от Verevkin Посмотреть сообщение
easybudda, ты это породил, ты и разгребай теперь.
Ну спасибо за оказанное доверие!
Наталья8, видимо, удивлю
C
1
printf("%.12f ", 3.000000000001);
таки выведет это замечательное число вместе с единицей.
1
452 / 319 / 64
Регистрация: 09.03.2016
Сообщений: 3,119
05.11.2023, 02:12 19
Да согласен. только кому оно надо.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12831 / 7568 / 1764
Регистрация: 25.07.2009
Сообщений: 13,960
05.11.2023, 02:21 20
Цитата Сообщение от Наталья8 Посмотреть сообщение
Крючкотворцы......
C
1
2
3
4
5
6
7
#include <stdio.h>
#include <math.h>
 
int main(void) {
    printf("%s\n", (11.0000004 == floor(11.0000004)) ? "The same" : "Differs");
    return 0;
}
Код
PS C:\Users\andrew\prog\c\num> clang -Wall .\trash.c
PS C:\Users\andrew\prog\c\num> .\a.exe
Differs
PS C:\Users\andrew\prog\c\num>
странно, правда?

Добавлено через 1 минуту
Цитата Сообщение от Наталья8 Посмотреть сообщение
только кому оно надо.
Очевидно, тому, у кого
Цитата Сообщение от Наталья8 Посмотреть сообщение
Единицы в конец числа не ставит.
3.000000000001
0
05.11.2023, 02:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.11.2023, 02:21
Помогаю со студенческими работами здесь

Удаление строки в динамическом двумерном массиве.
Помогите,пожалуйста,кто сможет. Хотя бы алгоритм. В текстовом файле первые 2 числа дают...

Удаление строки k в динамическом двумерном массиве
Привет всем. Столкнулся с неприятностью в выполнении лабораторной работы. По заданию нужно...

Удаление элемента в одномерном динамическом массиве
В массиве а1, а2, … , аn удалить все элементы, значение которых ле-жит между средним...

В динамическом массиве, состоящем из п целых элементов, вычислить:
- произведение элементов массива с четными номерами; - сумму элементов массива, расположенных...

Удаление двух или более подряд стоящих нулей в одномерном динамическом массиве
Привет всем :) Помогите исправить программу. Нужно удалить из одномерного динамического массива два...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru