Найти 2 первых элемента в массиве, значения которых не попадают в заданный с клавиатуры диапазон - C (СИ)

  1. Доброй ночи. Помогите с программой на работу с массивом. Найти 2 первых элемента в массиве С (17), значения которых не попадают в заданный с клавиатуры диапазон [A, B]. Поменять их местами.


textual

Код к задаче: «Найти 2 первых элемента в массиве, значения которых не попадают в заданный с клавиатуры диапазон - C (СИ)»

#ifdef _MSC_VER
    #define _CRT_SECURE_NO_WARNINGS
#endif
 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int first_not_in_range(const int* p, const size_t size, int min, int max)
{
    size_t i = 0;
    for (i = 0; i < size; i++)
        if (!(min <= p[i] && p[i] <= max))
            return i;
    return -1;
}
 
void swap(int *p1, int* p2)
{
    int buf = *p1;
    *p1 = *p2;
    *p2 = buf;
}
 
#define SIZE 17
 
void print(const int* p, size_t size)
{
    while (size--)
        printf("%d ", *p++);
    putchar('\n');
}
 
int main(void)
{
    int a = 0,
        b = 0, 
        c[SIZE], 
        first = 0, 
        second = 0,
        i = 0;
    
    srand(time(0));
    for (i = 0; i < SIZE; i++)
        c[i] = rand() % 20;
 
    print(c, SIZE);
 
    printf(">");
    if (scanf("%d %d", &a, &b) == 2)
    {
        first = first_not_in_range(c, SIZE, a, b);
        if (first != -1)
        {
            second = first_not_in_range(c + a + 1, SIZE - a - 1, a, b);
            if (second != -1)
            {
                swap(c + first, c + second + first + 1);
                print(c, SIZE);
            }
            else
            {
                puts("Second element not in range not found");
            }
        }
        else
        {
            puts("First element not in range not found");
        }
        return EXIT_SUCCESS;
    }
 
    return EXIT_FAILURE;
}

СДЕЛАЙТЕ РЕПОСТ

5   голосов, оценка 4.000 из 5



Похожие ответы
  1. Создать массив, заполнить 20 элементами, сложить и вывести на экран все кратные 3Добавлено через 4 минуты Помогите плиз

  1. Сформировать массив из элементов исходных массивов, больших второго элемента первого массива и положительных элементов второго массива. Требуется сформировать новый массив по заданию. В программе реализовать: 1) генерацию случайным образом элементов исходных массивов; 2) выполнение действия в соответствии с условием задачи; 3) порядок вывода: • исходные массивы, • сформированный массив, если он был сформирован. В противном случае – соответствующее сообщение. Помогите, а то не могу сделать

  1. Я написала программу с двумя элементами ввода массивов, но результат выводит не неверный и после выбора ручного ввода программа вылетает. Помогите пожалуйстаC1 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 #include #include #include #include #include #include #define N 500 #define MIN 80 int main(void) { setlocale (0, "rus"); int a[N],n,i, min=a[0], nummin=0, sum=0, nol=0, k; srand((unsigned)time(NULL)); printf ( " Определите характер заполнения: 1- автоматическое, 2- вручную"); printf("\n"); scanf("%d",&k);   switch(k) { case 1: { printf("vvedite n - "); scanf("%d",&n); for (i=0; ia[i])           {               printf("\n");               min=a[i];              nummin=i;}         for (i=nummin+1; i

  1. Не люблю создавать темы. Но объясните мне на пальцах (на моем примере) как правильно удалить и отредактировать элемент в списке (2 разные ф-ции), ну или ткните в ошибку..C1 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 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 #include #include #include #include #include #include   struct ta {     char country[128];     int id, count, days;     double price;     struct ta* next;     struct ta* prev; }; struct ta *head, *tail;   void create(void); // создание void list(struct ta *); // просмотр void del(struct ta *); // удаление void edit(struct ta *p);   void create(void) {     struct ta *p,*pred;     pred=NULL;     p=(struct ta *)malloc(sizeof(struct ta));     printf("Введите страну: ");     scanf("%s", p->country);     printf("Введите продолжительность: ");     scanf("%d", &p->days);     printf("Введите стоимость: ");     scanf("%lf", &p->price);     printf("Введите количество проданных: ");     scanf("%d", &p->count);     p->prev=pred;     if (pred != NULL)     {         pred->next=p;     }     else     {         head = p;         pred = p;     }     puts(" Закончить - ");     tail=p;     tail->next=NULL;     system("cls"); }   void add(struct ta *p) {     struct ta *pn,*pred;     pn=(struct ta *)malloc(sizeof(struct ta)); // pn – указатель на новую структуру     printf("Введите страну: ");     scanf("%s", pn->country);     printf("Введите продолжительность: ");     scanf("%d", &pn->days);     printf("Введите стоимость: ");     scanf("%lf", &pn->price);     printf("Введите количество проданных: ");     scanf("%d", &pn->count);     pn->prev=NULL;     pn->next=p;     p->prev=pn;     head=pn; }   void list(struct ta *p) {     if (p==head)     while (p != NULL)     {         printf("%s", p->country);         printf("%d", p->days);         printf("%lf", p->price);         printf("\n");         printf("%d", p->count);         p=p->next;     }     else if (p==tail)         while ( p!= NULL)         {             printf("%s", p->country);             printf("%d", p->days);             printf("%lf", p->price);             printf("\n");             printf("%d", p->count);             p=p->prev;         }        else            puts("Неверный адрес "); }   void del(struct ta *p) {     struct ta *pn,*temp;     char country[128]; // – Строка для удаляемой страны     printf("Страна: ");     scanf("%s", pn->country);     pn=head;     while (pn!=NULL)     {         if (strcmp((pn->country),country)==0) // если найдена заданная страна         {             if (pn==head) // если найденная запись - первая             {                 head=pn->next;                 head->prev=NULL;                 free(pn);                 pn=head;             }         else if (pn==tail) // если найденная запись - последняя                 {                     tail=pn->next;                     tail->next=NULL;                     free(pn);                     pn=tail;                 }               else  // удаление из средины списка               {                     pn->next->prev=pn->prev;                     pn->prev->next=pn->next;                     temp=pn;                     pn=pn->next;                     free(temp);                 }      }      else // если заданная страна не найдена – продвигаемся по списку      p=pn->next;    } }   void edit(struct ta *p) {     struct ta *pn,*temp;     char country[128]; // – Строка для удаляемой страны     printf("Страна: ");     scanf("%s", pn->country);     pn=head;     while (pn!=NULL)     {         if (strcmp((pn->country),country)==0) // если найдена заданная страна         {             printf("Введите страну: ");             scanf("%s", pn->country);             printf("Введите продолжительность: ");             scanf("%d", &pn->days);             printf("Введите стоимость: ");             scanf("%lf", &pn->price);             printf("Введите количество проданных: ");             scanf("%d", &pn->count);         }         else             p=pn->next;       } }   void main() {     setlocale(LC_ALL, "Russian");     int key;     do     {         system("cls");         printf("1. Показать все\n" );         printf("2. Добавить\n");         printf("3. Редактировать\n");         printf("4. Удалить\n");         printf("9. Создать \n");         printf("0. Выход \n");         scanf("%d", &key);         switch (key)         {             case 1:                 list(head);                 break;             case 2:                 add(head);                 break;             case 3:                 edit(head);                 break;             case 4:                 del(head);                 break;             case 0:                 return 0;             break;         }     }  while (key!=27); }Добавлено через 2 часа 59 минут 2 ошибки нашла C1 2 printf("Страна: "); scanf("%s", country);а не C1 2 printf("Страна: "); scanf("%s", pn->country);

  1. Дан массив целых чисел состоящий из N элементов (N = 20). Найти индекс максимального отрицательного элемента. Примечания: Данные вводятся с клавиатуры. В программе при обращении к элементу массива нельзя использовать дополнительную переменную для вычисления его адреса. Примерно понимаю алгоритм, но не могу понять как тут применить указатель, тк плохо понимаю тему. Заранее благодарю за помощь!

  1. Забыл как в выводе сделать индекс max и min элемента. Программа так-то работает, нужно с выводом индекса элемента.C1 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 #include #include #include #define K 8   int main() {   int i,j,       M[K][K]={{26, 81, 9, 63, 43, 66, 57, 52}, //Способом инициализации                       {24, 82, 92, 6, 33, 9, 7, 82},                {11, 8, 9, 6, 33, 65, 7, 82},                           {19, 8, 31, 6, 22, 66, 77, 12},                {24, 8, 9, 65, 38, 62, 7, 82},                {22, 23, 49, 6, 4, 11, 27, 20},                {24, 83, 39, 6, 38, 6, 7, 28},                {20, 8, 27, 6, 12, 36, 37, 24}};   int max = M[0][0], min = M[0][0]; // Присвоение значения первого элемента массива         for( i = 0; i < K; i++ )// Вывод матрицы     {         for( j=0; j < K; j++ )         {             printf( "|%d|\t", M[i][j]);     }     printf("\n\n");     }                       for (int i = 0; i < 4; i++) // Переключение по строкам     {         for (int j = 0; j < 3; j++)// Переключение по столбцам         {             if ( M[i][j] > max ) // Ищем максимальное значение             {                 max = M[i][j];             };             if ( M[i][j] < min ) // Ищем минимальное значение             {                  min = M[i][j];             };         }     }     printf ("Max = %d\n", max); //Вывод на экран максимального элемента printf ("Min = %d\n", min); //Вывод на экран минимального элемента getch(); return 0; }

  1. Куб состоит из n3 прозрачных и непрозрачных элементарных кубиков. Есть ли хоть один просвет по каждому из трех измерений? Если так, вывести координаты каждого просвета.Добавлено через 14 секунд Помогите пожалуйстаДобавлено через 18 часов 11 минут помогите

  1. Переставить последний элемент массива на место k-ого элемента. При этом k-ый, (k+1)-ый,..., предпоследний элементы сдвинуть вправо на 1 позицию.

  1. помогите, пожалуйста с заданием: Вычислить сумму первых N элементов ряда: 1+ x^1/1! + x^2/2! + x^3/3! + ... Вычисления проводить до тех пор, модуль очередного элемента больше ε .

  1. В общем ошибка такая: работает через раз, пропускает максимальный и вместо этого берет последнее отрицательное число и делает его минимумом C1 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 #include #include #include #include #include #include   int linpoisk(int mass[], int N);   #define  BORDER_HIGH 100 #define  BORDER_LOW -100     int main() {       setlocale(LC_ALL, "RUS");     int N;     int G = 0;     int* mass;     int i;         printf("Введите кол-во эл-тов массива: ");     scanf_s("%d", &N);       mass = (int *)malloc(N * sizeof(int));       srand((unsigned)(time(NULL)));     printf("Заполните массив элементами:\n");     for (i = 0; i < N; i++)     {         mass[i] = rand() % (BORDER_HIGH - BORDER_LOW + 1) + BORDER_LOW;         printf("a[%d] = %d\n", i , mass[i]);     }         printf("Сумма равна : %d \n", linpoisk(mass, N));       free(mass); // освобождение памяти       system("pause"); }   int linpoisk(int mass[], int N) {     int i_find ;     int min;     int sum = 0;       i_find = 0;     min = mass[0];     for (int i = 0; i < N; i++)     {         if ( min > mass[i])             i_find = i;     }     printf("min : %d \n", i_find);     for (int i = i_find; i < N; i++)     {         sum += mass[i];     }         return sum; }Помогите исправить ошибку