Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2022, 18:31   #1
sasha_03
Пользователь
 
Регистрация: 14.04.2022
Сообщений: 11
Сообщение Задача на Си. Массивы

Дан массив размерности n. Удалить из массива все элементы, равные по модулю максимальному. В случае если полученный массив будет содержать четное количество элементов, вставить в середину сумму удаленных элементов. Дополнительный массив не использовать.

Удаляет не все элементы, равные по модулю максимальному
Код:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>


int main()
{
    int a, max, summa = 0, k;
    int n;
    scanf("%d", &n);
    int array[n];
    
    for (int i = 0; i < n; i++){
        scanf("%d", &a);
        array[i] = a;
    }
    
    max = array[0];
    for (int i = 1; i < n; i++){
        if (array[i] >= max)
            max = array[i];
    }
    
    for (int i = 0; i < n; i++){       
        if (fabs(array[i]) == max){
            summa += array[i];
            for (i; i < n; i++)
                array[i] = array[i+1];
        }
    }
    
    for (int i = 0; i < n; i++){
        printf("%d ", array[i]);
        
    }
    return 0;
}

Последний раз редактировалось sasha_03; 25.04.2022 в 19:21.
sasha_03 вне форума Ответить с цитированием
Старый 26.04.2022, 00:13   #2
сфинкс
Форумчанин
 
Аватар для сфинкс
 
Регистрация: 17.06.2012
Сообщений: 957
По умолчанию

народ всех тем: уважайте пользователей
и заполняйте массивы в программе без клавиатуры
и пишите в онлайн компиляторы: https://rextester.com/FRQQ23716

и там логика в строках 15...20 не логичная

и как вставить в середину внезапного чётного
количества элементов массива единственное значение неясно

ведь так читается задание
да и небось изначально нужны 2 массива
Случайные и Массивы https://programmersforum.ru/showthread.php?t=344371 Учим C# & basic & excel & python https://programmersforum.ru/showthre...=327446&page=5 ничего нерекомендую
сфинкс вне форума Ответить с цитированием
Старый 26.04.2022, 02:58   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Считывать значения в массив можно без временной переменной a. При поиске максимального числа нет смысла в ">=" (лучше ">"). Максимальное число может быть отрицательным, так что после цикла поиска лучше сделать "max = abs(max);" (кстати, для целых чисел лучше использовать abs, а не fabs). Теперь про основную часть программы. Тут три ошибки: использование той же переменной i для итерирования по "хвосту", вылезание за границу массива, отсутствие уменьшения n после сдвига "хвоста". Проще сделать так:
Код:
int j = 0;
for (int i = 0; i < n; i++) {       
    if (abs(array[i]) == max) {
        summa += array[i];
    } else {
        array[j] = array[i];
        j++;
    }
}
После цикла в переменной j будет количество сохранившихся элементов массива.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача по подсчёту статистики использования букв. Другая задача - по длинной арифметике Pascal ABC kimberly Паскаль, Turbo Pascal, PascalABC.NET 3 24.12.2012 17:03
задача на структуру(struct)/задача на работу с файлом SevenArth Помощь студентам 0 26.04.2012 19:06
Задача на оптимальный расчет маршрута (задача в презентации) в табличном процессоре Excel Toofed Помощь студентам 0 30.11.2011 01:12
Задача минимизации дисбаланса на линии сборки (задача минимакса) LenZab Microsoft Office Excel 13 13.03.2011 22:51