Pouze tento týden sleva až 80 % na e-learning týkající se C# .NET. Zároveň využij akci až 30 % zdarma při nákupu e-learningu - Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
discount week 30

Diskuze: Pointery a funkce

Aktivity
Avatar
davaj
Člen
Avatar
davaj:27.11.2013 22:15

Ahoj, potřeboval bych poradit. Mám si vytvorit funkci ktera bude konrolovat meze jestli platí dolni>horni , pokud to bude platit zamění se hodnoty parametru funkcí ktera bude prehazovat horni mez na dolni..
Vím, strukturu funkce, ale neumím to vypsat, v těch jinych funkcích, vypisuje mi to podivné čísla.

//---------------------------------------------------------------------------

#include <stdio.h>
#include <conio.h>

//---------------------------------------------------------------------------


int meze ( int *m, int *n, int *soucet);
int meze2 ( int *d, int *h, int *bez, int *soucet, int *soucin, int *pocet);


int main()
{
   int KLAD,ZAP,DOLNI,HORNI,M,N,SOUCET,POCET,g, SOUCET2, SOUCIN, POCET2,D,H,B;
   float PRUM;

   printf("\n------------------------[6]---------------------------\n\n");

   printf("Zadej dolni mez, horni mez: ");
   scanf("%d %d",&M,&N);
   g = meze (&M,&N,&SOUCET);
   printf("Pocet cisel: %d\n",g);
   printf("Cisla od %d do %d: soucet = %d",M,N,SOUCET);

   printf("\n------------------------[7]---------------------------\n\n");

   printf("Zadej dolni mez, horni mez, bez: ");
   scanf("%d %d %d",&D,&H,&B);
   meze2(&D,&H,&B,&SOUCET2,&SOUCIN,&POCET2);
   printf("Soucet je %d, pocet je %d, soucin je %d",SOUCET2,POCET2,SOUCIN);


   getch();
   return 0;
}

int meze ( int *m, int *n, int *soucet)
{
        int i,pocet = 0,g;

        *soucet = 0;

        if(*m>*n)
        printf("Neslo mi to provest\n");

        for (i = *m; i <= *n; i++)
        {
                 pocet++;
                (*soucet)+=i;

        }

        return (pocet);

}

int meze2 ( int *d, int *h, int *bez, int *soucet, int *soucin, int *pocet)
{
        int i;

        *soucet = 0;
        *soucin = 0;
        *pocet  = 0;

        if(*d>*h)
        printf("Neslo mi to provest\n");

        for (i = *d; i <= *h; i++)
        {
                if(i%(*bez)!=0)
                {
                        (*soucet)+=i;
                        (*soucin)+=i*i;
                        (*pocet)++;
                }
        }

        return 0;
}







//---------------------------------------------------------------------------

Moje úvaha:

int prohod ( int *X, int *Y)
{

if(*X>*Y)
{
p=*Y;
*Y=*X;
*X=*Y;
}
}

Pak v funkci mezi:

if(*dolni>*horni)
{
prohod(&X,&Y);
dolni = &X;  // což je špatně
horni = &Y;
}

Uvítám rady :)

Editováno 27.11.2013 22:17
 
Odpovědět
27.11.2013 22:15
Avatar
Odpovídá na davaj
Zdeněk Pavlátka:28.11.2013 6:33

Takhle by to mělo fungovat.

dolni = *X;
horni = *Y;

Chybu máš v tom, že přiřazuješ adresy ukazatelů místo toho, na co odkazují.

Editováno 28.11.2013 6:34
Nahoru Odpovědět
28.11.2013 6:33
Kolik jazyků umíš, tolikrát jsi programátor.
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
davaj
Člen
Avatar
davaj:28.11.2013 13:51

Píše mi to, že ty parametry X,Y nejsou definované.

 
Nahoru Odpovědět
28.11.2013 13:51
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.