Witam. Mam problem z programem C który ma wyliczac najwieksza liczbe sposrod 3 podanych.

0

Napisz program, który będzie znajdował największą spośród trzech podanych przez użytkownika liczby całkowitych.Każdy program należy napisać z podziałem na funkcje z parametrami! Kompletnie nie rozumiem funkcji z partametrami. Co robię źle?

#include <stdio.h>
#include <stdlib.h>

int f1(int a, int b, int c, int max, int wynik)
{
    max=(a>b)?a:b;
    wynik=(max>c)?max:c;
    return wynik;
}
int main(int a, int b, int c)
{
    printf("Podaj pierwsza liczbe: ");scanf("%d",&a);
    printf("Podaj druga liczbe: ");scanf("%d",&b);
    printf("Podaj trzecia liczbe: ");scanf("%d",&c);
    printf("Najwieksza liczba sposrod podanych to : %d",f1(a,b,c));
}
3

Parametry funkcji to dane, które do niej dostarczasz z zewnątrz.
W Twoim przypadku - to są te trzy analizowane liczby.

Częstym błędem początkujących programistów jest nierozróżnianie parametrów wywołania od zmiennych lokalnych.
Twój kod powinien wyglądać mniej więcej tak:

int f1(int a, int b, int c)  
{
  int max, wynik;
  
  max = (a>b) ? a : b;
  wynik = (max>c) ? max : c;
  return wynik;
}

Można to oczywiście zapisać krócej.

Powinieneś tez poprawić funkcję main:

int main(void)
{
  int a,b,c;
  ...
}
3

Skoro uczysz się pisać funkcje to:

#include <stdio.h>
#include <math.h>

int input(const char *msg,int def)
{
  printf("Podaj %s liczbe: ");
  scanf("%d",&def);
  return def;
}

int min1(int a,int b,int c) { return min(min(a,b),c); }
int min2(int a,int b,int c) { return a<b?(a<c?a:c):(b<c?b:c); }

```cpp
int main()
{
  int a=input("pierwsza",0),b=input("druga",0),c=input("trzecia",0);
  printf("Najmniejsza liczba sposrod podanych to (min1): %d\n",min1(a,b,c));
  printf("Najmniejsza liczba sposrod podanych to (min2): %d\n",min2(a,b,c));
  return 0;
}
1

Nie pisz takich rzeczy, ze względu na nieczytelność.

 printf("Podaj druga liczbe: ");scanf("%d",&b);

Tak lepiej:

printf("Podaj druga liczbe: ");
scanf("%d",&b);

Następnie używaj spacji aby kod był czytelniejszy.

printf( "Podaj druga liczbe: " );
scanf( "%d", &b );

Puste linijki też poprawiają czytelność.

Ponad to w scanf lepiej sprawdzać błędy.

1

W kwestii nazewnictwa to jeszcze warto znać różnice między parametrem a argumentem bo to niektórzy nie znają albo mylą te dwie rzeczy. W definicji funkcji w nawiasach okrągłych deklarujesz parametry funkcji. Wynik jej działania będzie więc sparametryzowany (uzależniony od parametrów), które będą przekazane w innym miejscu jako argumenty.

int funkcja(int parametr1, int parametr2)
{  
    int zmienna_lokalna = parametr1 + parametr2;
    return zmienna_lokalna;
}

int main(void)
{
   int zmienna_lokalna = 2;
   
   int wynik_zmienna_lokalna = funkcja(1 /*argument1*/, zmienna_lokalna /*argument2*/);
}

w momencie wywołania funkcji przekazujesz do niej argumenty: jedynkę jako "literał" i zawartość zmienna_lokalna. Argumenty to są więc dane, które zostaną "podstawione" w miejsce parametrów w wywołanej funkcji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1