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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4 из 5
Похожие ответы