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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

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

Дан массив размерности n. Если отрицательные и положительные элементы в массиве чередуются (+ - + - + … или - + - + - + …) заменить максимальные элементы минимальными, иначе – наоборот.
И размерность, и числа для массива вводятся любые, с клавиатуры.
sasha_03 вне форума Ответить с цитированием
Старый 15.04.2022, 10:46   #2
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Так в чем проблема?
ForenLi вне форума Ответить с цитированием
Старый 15.04.2022, 12:28   #3
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,546
По умолчанию

"Проблема острая: найти того, кто мне это изваяет, бо я даже в этой простейшей задаче - ни_бум_бум."
sasha_03, выложи сюда плоды своих титанических усилий, хотя бы void main(void) - тут-то прибегут и напишут.
Даю подсказку: установи флаг в 0, пробеги массив от 1 до n-1, сравнивая iзнак i-го элемента с i-1. Если не чередуются - флаг++. Попутно находишь макс и мин элементы. И в зависимости от флага - нужные замены.
Хотя если макс и мин-ов несколько - задача становится смешней: надо заполнять массив индексов этих "ребят". Хотя и не обязательно: можно ещё раз пробежаться по массиву, и кто подвернулся под условие - того и заменять.
-------------
Ну и ещё проблема: 0 считать положительным (тут есть разные мнения, говорят, 0 - ни то-ни сё)? Если да, то проверка чередования соседних умножением даёт лажу:
-1 0 -1 -> 0 0 . Придётся ifами
Код:
   if ((mas[i]>=0) && (mas[i-1]>=0) || (mas[i]<0) && (mas[i-1]<0) ) flag++ ;
-----------------------------
Так простейшая задача позволяет иногда шевельнуть извилиной. Вот только кофию попью - напишу. Сегодня я добрый (к лентяям) .

Последний раз редактировалось digitalis; 15.04.2022 в 12:57.
digitalis вне форума Ответить с цитированием
Старый 15.04.2022, 13:39   #4
sasha_03
Пользователь
 
Регистрация: 14.04.2022
Сообщений: 11
По умолчанию

Цитата:
Сообщение от ForenLi Посмотреть сообщение
Так в чем проблема?
Проблема в том, что просто не получается решить)
sasha_03 вне форума Ответить с цитированием
Старый 15.04.2022, 13:42   #5
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Какое слово не понятно в задании? Что вы не знаете, как сделать?
ForenLi вне форума Ответить с цитированием
Старый 15.04.2022, 13:43   #6
sasha_03
Пользователь
 
Регистрация: 14.04.2022
Сообщений: 11
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
"Проблема острая: найти того, кто мне это изваяет, бо я даже в этой простейшей задаче - ни_бум_бум."
sasha_03, выложи сюда плоды своих титанических усилий, хотя бы void main(void) - тут-то прибегут и напишут.
Даю подсказку: установи флаг в 0, пробеги массив от 1 до n-1, сравнивая iзнак i-го элемента с i-1. Если не чередуются - флаг++. Попутно находишь макс и мин элементы. И в зависимости от флага - нужные замены.
Хотя если макс и мин-ов несколько - задача становится смешней: надо заполнять массив индексов этих "ребят". Хотя и не обязательно: можно ещё раз пробежаться по массиву, и кто подвернулся под условие - того и заменять.
-------------
Ну и ещё проблема: 0 считать положительным (тут есть разные мнения, говорят, 0 - ни то-ни сё)? Если да, то проверка чередования соседних умножением даёт лажу:
-1 0 -1 -> 0 0 . Придётся ifами
Код:
   if ((mas[i]>=0) && (mas[i-1]>=0) || (mas[i]<0) && (mas[i-1]<0) ) flag++ ;
-----------------------------
Так простейшая задача позволяет иногда шевельнуть извилиной. Вот только кофию попью - напишу. Сегодня я добрый (к лентяям) .
Только начинаю разбираться в Си. Вот моё нечто, что выполняет не так как нужно...:

Код:
#include <stdio.h>

int main()
{
    int n, a, positive1, negative1, positive2, negative2, b1, b2;
    scanf("%d", &n);
    int array[n];
    
    if (n <= 0)
        printf("Число не соответствует размерности массива!");
        
    for (int i = 0; i < n; i ++){
        scanf("%d", &a);
        array[i] = a;
    }

    for (int i = 0; i < n; i += 2){
        if (array[i] < 0)
            negative1 += 1;
        else if (array[i] > 0)
            positive1 += 1;
    }
    for (int i = 1; i < n; i += 2){
        if (array[i] < 0)
            negative2 += 1;
        else if (array[i] > 0)
            positive2 += 1;
    }
    
    if ((negative1 + positive2 == n) || (positive1 + negative2 == n))
    {
        for (int i = 0; i < n; i += 2){
            for (int j = 1; j < n; j += 2){
                b1 = array[i];
                b2 = array[j];
                array[i] = b2;
                array[j] = b1;
            }
        }
        for (int i = 0; i < n; i ++)
            printf("%d ", array[i]);
    }
    else
        printf("Отрицательные и положительные элементы в массиве не чередуются\n");
        
    return 0;
}
sasha_03 вне форума Ответить с цитированием
Старый 15.04.2022, 13:47   #7
sasha_03
Пользователь
 
Регистрация: 14.04.2022
Сообщений: 11
По умолчанию

Цитата:
Сообщение от ForenLi Посмотреть сообщение
Какое слово не понятно в задании? Что вы не знаете, как сделать?
Что подразумевается под максимальными и минимальными элементами, как их может быть несколько.
Каким образом их нужно заменить, попарно?
sasha_03 вне форума Ответить с цитированием
Старый 15.04.2022, 13:53   #8
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Что за... код написан...
Код:
int array[n];
Это VLA, не все компиляторы поддерживают. В задаче, наверное, хотели malloc и т.д.

Код:
if (n <= 0)
Смысл проверять после создания массива? Смысл продолжать дальше что-то делать?

Цитата:
Сообщение от sasha_03 Посмотреть сообщение
Что подразумевается под максимальными и минимальными элементами
https://ru.wikipedia.org/wiki/%D0%9C...BD%D1%82%D1%8B

Цитата:
Сообщение от sasha_03 Посмотреть сообщение
как их может быть несколько
Просто. 10 10 2 10 2 Сколько здесь макс/мин элементов?

Цитата:
Сообщение от sasha_03 Посмотреть сообщение
Каким образом их нужно заменить, попарно?
Какие пары? Вам надо либо 2 2 2 2 2, либо 10 10 10 10 10 получить для примера выше.
ForenLi вне форума Ответить с цитированием
Старый 15.04.2022, 14:32   #9
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,546
По умолчанию

Код:
#include <stdio.h>

int main()
{
    int N, flag, imax. imin, mas[100] ;
    puts ("N = ") ; 
    scanf("%d", &N);
    for (int i = 0; i < N; i ++)
    {
        puts ("mas[i] = ")
        scanf("%d", &mas[i]);
    }
    imax = mas[0] ;
    imin = mas[0] ;
    flag = 0;
    for (int i = 1; i < N; i ++)
    {
        if (mas[i] > imax) imax = mas[i] ;
        if (mas[i] < imin) imin = mas[i] ;
        if ((mas[i]>=0) && (mas[i-1]>=0) || (mas[i]<0) && (mas[i-1]<0) ) flag++ ;
    }
    for (int i = 0; i < N; i ++)
    {
        if ((flag==0) && (mas[i]==max)) mas[i] = min ;  
        if ((flag>0) && (mas[i]==min)) mas[i] = max ;
    }  
    return 0;
}
Поскольку ввод с клавы - об динамическом массиве речи нет. Натюкать вручную гигабайты - свихнёшься. Печать исходного и преобразованного массива - очевидность. Равно как и проверка N.
Не проверял ввиду отсутствия у меня Си. Должно работать.
-------------------------------
Ну и ?

Последний раз редактировалось digitalis; 16.04.2022 в 12:23.
digitalis вне форума Ответить с цитированием
Старый 16.04.2022, 18:29   #10
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,546
По умолчанию

Код:
  puts ("mas[i] = ") ;
пропустил ;
digitalis вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на языке Си Naga Помощь студентам 1 15.01.2013 15:28
Задача на языке С или С++ anna20 Помощь студентам 2 10.03.2012 23:47
Задача на языке Си arxemond Помощь студентам 0 15.12.2011 19:51
задача на языке си lider219 Помощь студентам 4 20.09.2010 19:54
Задача на языке С++ varlonec Помощь студентам 11 16.12.2009 15:47