Передача значений двух переменных в основную функцию - 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);