Рекурсивно найти минимальный элемент в массиве - C (СИ)

  1. Нужно написать рекурсивную функцию (программу) которая будет искать минимальный элемент в массиве.


textual

Код к задаче: «Рекурсивно найти минимальный элемент в массиве - C (СИ)»

#include <stdio.h>
 
int min_array(const int* _f, const int* _l){
    int v;
    if((_f + 1) < _l){
        v = min_array(_f + 1, _l);
        return (*_f < v) ? *_f : v;
    }
    return *_f;
}
 
int main(void){
    int a[] = { 6, 5, 3, 7, 9 };
    printf("min: %d\n", min_array(a, a + sizeof(a)/sizeof(a[0])) );
    getchar();
    return 0;
}

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

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



Похожие ответы
  1. Здравствуйте! Данная "программа" должна обрабатывать числа, расстояние между которыми меньше 5, а также находить среди таких двух чисел самое большее чётное произведение. КОМПИЛИРУЕТСЯ ВСЁ НОРМАЛЬНО, НО ИСПОЛЬНЯТЬ ЭТА ГАДЮКА НИЧО НЕ ХОЧЕТ ИМЕННО В СЛУЧАЕ, КОГДА НА ВХОД ПОСУТПАЕТ БОЛЕЕ 5 ЧИСЕЛ. Т.е. цикл for(i=5;i int main(void) {   char j,c;      int i;      int n;      int a[5];      int x;      int max=-1;           scanf("%d",&n);     for (i=0;i<=4;i++){         scanf("%d",&a[i]);         }     for (i=5;imax )&&  (a[j-1]*a[c]%2 ==0))                     max=a[c]*a[j-1];                                             }                     }                 for (j=0;j<4;j++){             a[j]=a[j+1];         }         a[4]=x;         }      if (max==-1)          printf("-1");     else printf ("%d",max);     getchar();     getchar();     return 0; }Добавлено через 9 минут Тэкс... Счётчик тут должен робить... Тэк... Вывод массива когда у его индекса чото вычитаем тоже работает... Угу... Кажется я как-то выхожу из границ массива, но я в упор не могу разглядеть этого... Так, падажжи еманаДобавлено через 37 секунд лол, разглядеть он не может, у тебя две строки где идут пляски с массивамми, там же очевидно и ошибкаДобавлено через 3 минуты эхх, пойти спать или сожжрать таки хлеб с пащтетом? но тогда изжога будет от паштета с хлебом, я не хочу изжоги, антиацида нет с собой

  1. Приветствую, ув. программисты, помогите пожалуйста с программкой. Задание: Разработать программу обработки строки символов в соответствии с заданным вариантом(Найти самое короткое слово). Считать, что строка оканчивается точкой, слова разделены пробелами. В программе предусмотреть ввод и вывод исходных данных и результатов

  1. Дано некоторое натуральное число. Найти в нем цифру, что стоит на к-й позиции.

  1. Найти сумму компонент вектора X, удовлетворяющих условию 2

  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 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 #include #include char deletika(char a[80], long ot, long sk) {     int i, j, k = 0;     i = j = 0;     --ot;     sk = sk + ot;     do     {         if ((i < ot) || (i > sk))         {             a[j] = a[i];             j++;         }         i++;     } while (a[i] = '\0');     for (k = j; k <= i; k++)     {         a[k] = *"";     };     return (*a); } char zamenil(char a[80], long ot) {     int k = 0, k1 = 0;     char c[80], d[80];     char b[] = "123456789012345";     strcpy(c, a);     strcpy(d, a);     strcpy(c + ot, b);     k = strlen(c);     k1 = strlen(a);     for (int n = k1; n >= k; n--)         ;     {         c[n] = d[n];     }     for (n = 1; n <= k1; n++)     {         a[n] = c[n];     }     return (*a); } char qS(char a[80], int N) {     int i = 0, j = N;     char temp, p;     p = a[N];     do     {         while (a[i] > p)             i++;         while (a[j] < p)             j--;         if (i <= j)         {             temp = a[i];             a[i] = a[j];             a[j] = temp;             i++;             j--;         }     } while (i <= j);     if (j > 0)         qS(a, j);     if (N > i)         qS(a + i, N - i);     return (*a); } main() {     int j = 0;     clrscr();     char vvod[80];     FILE *fin, *fout;     fin = fopen("input.txt", "r");     fout = fopen("output.txt", "w");     printf("vvedite stroku\n");     fgets(vvod, 80, fin);     printf(vvod);     printf("-sobral\n");     deletika(vvod, 0, 15);     printf(vvod);     printf("-udalil\n");     while (vvod[j] != '\0')     {         j++;     };     printf(vvod);     printf("-propustil\n");     zamenil(vvod, 15);     printf(vvod);     printf("-zamenil\n");     qS(vvod, j - 1);     printf(vvod);     printf("-sortiroval\n");     fprintf(fout, vvod);     printf("vivod v file\n");     printf("and end");     getch();     fclose(fout);     return (0); }и ничего, печатает только -propustil zamenil и проч ничего не помогает

  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 #include   double sum2d(int a, int b, const double  mass[a][b]);   int main(void) {     const int YEARS = 5;     const int MONTHS = 12;     const float rain[YEARS][MONTHS] =     {         { 4.3, 4.3, 4.3, 3.0, 2.0, 1.2, 0.2, 0.2, 0.4, 2.4, 3.5, 6.6 },         { 8.5, 8.2, 1.2, 1.6, 2.4, 0.5, 2.0, 9.0, 3.0, 9.1, 4.7, 3.0 },         { 9.1, 8.5, 6.7, 4.3, 2.1, 0.8, 0.2, 0.2, 1.1, 2.3, 6.1, 8.4 },         { 7.2, 9.9, 8.4, 3.3, 1.2, 0.8, 0.4, 0.0, 0.6, 1.7, 4.3, 6.2 },         { 7.6, 5.6, 3.8, 2.8, 3.8, 0.2, 0.0, 0.0, 0.0, 1.3, 2.6, 5.2 },     };       printf("Среднегодовое количество осадков за 5 лет = %f",sum2d(YEARS, MONTHS, rain[YEARS][MONTHS])/YEARS); return 0; }   double sum2d(int a, int b, const double  mass[a][b]) {     int i, j;     int total;     double **pt;     **pt = mass[0][0];       for (i = 0; i < a; ++i)     {         for(j = 0; j < b; ++j)         {             total+=**pt;             ++pt;         }     } return total; }При компиляции помимо куци предупреждений выдается следующие ошибки: rain.c:20:2: error: incompatible type for argument 3 of ‘sum2d’ printf("Среднегодовое количество осадков за 5 лет = %f",sum2d(YEARS, MONTHS, rain[YEARS][MONTHS])/YEARS); ^ rain.c:3:8: note: expected ‘const double (*)[(sizetype)(b)]’ but argument is of type ‘float’ double sum2d(int a, int b, const double mass[a][b]);Добавлено через 23 секунды по заданию считать нужно с применением указателей.

  1. Выдаёт ошибки. Задача: Условия: даны натуральные числа n, A1, A2, … An Найти: минимальное число записанное в чётную позицию последовательности и максимальное​ число записанное в нечётную позицию последовательности. Есть такой код. При проверке выдает два больших странных числа (1962 и -30374), хотя ввожу числа 12, 13... Пользуюсь Турбо Си. Если нужен скриншот, то закину.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 #include void main() { double a; // vvedennie 4isla int n=0; // koli4estvo 4isel v posledovatelnosti int i; // s4et4ik posledovatelnosty int min; // sredi 4etnih 4isel int max; // sredi ne4etnih 4isel   printf("Vvedite koli4estvo 4isel:"); scanf("%d",&n);   printf("Vvedite svoi 4isla:"); scanf("%d",&a);   for (i=1;i<=n;i++)  {  if (i%2==0)   {   if (mina)   {   max=a;   }  scanf("%d",&a);  } printf("Minimal - %d, maximum - %d",min,max); getch(); }

  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. Не понимаю как работать с строками... У меня есть задача... Во входной строке записаны целые числа через запятую. Найдите их сумму. ВХОДНЫЕ ДАННЫЕ Программа получает на вход строку, содержащую цифры, знаки +/- и запятые. Необходимо разбить эту строку по запятым на числа и вычислить их сумму. Длина строки не превосходит 1000 символов. Строка содержит хотя бы одно число, начинается и заканчивается не с запятой, никакие две запятые не идут подряд. Между двумя соседними запятыми записано корректное целое число, не превосходящее по модулю 106106, которое может начинаться со знака "+" или "-".Ввод: 12,-5,+8 Вывод: 15 Получилось только так... но это неправильно (условие задачи совсем другое) C++1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include #include   using namespace std;   int main(){     string str;     int sum = 0;     cin >> str;     cout << endl;     for(int i = 0; i < str.length(); i++){         if (str[i] == ',')         {             i++;         }         sum += (int)str[i] - 48;     }     cout << sum << endl;       return 0;     }