Передача значений двух переменных в основную функцию - C (СИ)
Формулировка задачи:
Доброго дня!
Господа, поставлена задача: передать в функцию массив, найти минимальное и максимальное значение среди цифр его элеменов.
С этим я справился.
Но как потом оба эти значения использовать в main, чтобы передавать в другие функции? Если быть более точным, то нужно в другой функции дописать эти цифры к элементам массива. Я пробовал объявить эти значения как глобальные переменные, но функция не возвращает их измененными, а показывает их нулевыми (проверял через printf в main).
Помогите, пожалуйста. За плохой код не судите строго - я новичок.
Но как эту мудрую мысль воплотить в моем коде - не понял.
#include<stdio.h> #include<conio.h> #include<stdlib.h> #include<string.h> #include<windows.h> #include<math.h> #include<time.h> //здесь еще куча прототипов void tsif (int *, int); //void dopis (int *, int); int min1, max1; void main() { int *mas,*m1,*m2,*m21,*m3,*ob,m,buf; srand(time(NULL)); printf("Vvedite razmer massiva\n"); scanf("%d",&m); mas=(int*)malloc(m*sizeof(int)); if(!mas) { printf("Нет места!!!\n"); exit(1); } m1=(int*)malloc(m*sizeof(int)); if(!m1) { printf("Нет места!!!\n"); exit(1); } m2=(int*)malloc(m*sizeof(int)); if(!m2) { printf("Нет места!!!\n"); exit(1); } m21=(int*)malloc(m*sizeof(int)); if(!m21) { printf("Нет места!!!\n"); exit(1); } m3=(int*)malloc(m*sizeof(int)); if(!m3) { printf("Нет места!!!\n"); exit(1); } for(int i=0;i<m;i++) { mas[i]=rand()%1000; m1[i]=mas[i];//отсортирован m2[i]=mas[i];//заполнен перевертышами m3[i]=mas[i];//разница printf("mas[%d]=%d\n",i,mas[i]); } sort (m1, m); sumkol (m1, m); chet (m1, m); maxmin (m1, m); prost (m1, m); obrmas (m2, m); for(int i=0;i<m;i++) m21[i]=m2[i];//резевная копия массива с перевертышами ubiv (m2, m); maxmin1 (m2, m); prost1 (m2, m); razn (m21, m3, m); plmin (m21, m); tsif (m21, m); getch(); } //здесь удалена куча функций, все работают исправно, несмотря на чехарду с массивами. Нужно было просто возвращать массивы в main через указатель, но хорошая мысля... void tsif (int *arr, int k, int min1, int max1) { //int max1, min1; int *min, *max; min=(int*)malloc(k*sizeof(int)); if(!min) { printf("Нет места!!!\n"); exit(1); } max=(int*)malloc(k*sizeof(int)); if(!max) { printf("Нет места!!!\n"); exit(1); } for(int i=0;i<k;i++) { min[i]=abs(arr[i]%10); max[i]=abs(arr[i]%10); while(arr[i]) { if (min[i]>abs(arr[i]%10)) min[i]=abs(arr[i]%10); if (max[i]<abs(arr[i]%10)) max[i]=abs(arr[i]%10); arr[i]/=10; } } min1=min[0]; max1=max[0]; for(int i=0;i<k;i++) { if(max[i]>max1) max1=max[i]; if(min[i]<min1) min1=min[i]; } printf("\nMin: %d\n",min1); printf("\nMax: %d\n",max1); }
На одном из форумов прочитал:
Есть такая штука в С++, как передача параметров по ссылке. Этот способ в числе прочих преимуществ, о которых здесь пока говорить не будем, дает и такое: появляется возможность изменения значения переменной, объявленной в программе, внутри некоторой функции. Таким образом, появляется возможность определить у функции СКОЛЬКО УГОДНО много возвращаемых значений. Единственное, что отличает этот способ от обычного возврата значения функцией, что это делается не обычной семантикой типа y=f(x), а подругому.
Решение задачи: «Передача значений двух переменных в основную функцию»
textual
Листинг программы
minmax sMM = tsif (m21, m);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д