Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    181

    [C]Problema chiamata funzione con void

    Buonasera,
    oggi il professore ci ha dato un esercizio nel quale dati 3 numeri dall'utente,tramite funzione void dobbiamo metterli in ordine,il problema è che io la settimana precedente ero assente al momento della spiegazione( ),perciò non so cosa fare.
    Il vero problema però è che nel void ordinaAsc non possono comparire printf,quindi devo solo riordinare e rimandare al main,ma come si fa?
    (le parti segnate in rosso sono quelle nelle quali faccio fatica a capire cosa fare...)

    codice:
    # include <stdio.h>
    
    void absolute(int *);
    void ordinaAsc(int , int , int );
    
    int main()
    {
       int num1, num2, num3;
    
       printf("Inserisci il primo numero: ");
       scanf("%d", &num1);
       fflush(stdin);
       absolute(&num1);
       printf("Inserisci il secondo numero: ");
       scanf("%d", &num2);
       fflush(stdin);
       absolute(&num2);
       printf("Inserisci il terzo numero: ");
       scanf("%d", &num3);
       fflush(stdin);
       absolute(&num3);
        ordinaAsc(&num1, &num2, &num3); 
        printf("%d\n%d\n%d\n");    
       getchar();
       return 0;
    }
    
    void absolute (int *num)
    {
       if(*num<0)
       {
          *num=*num*(-1);
       }
    }
    
    void ordinaAsc(int num1, int num2, int num3)
    {
       if(num1>=num2 && num1>=num3 && num2>=num3)
       {
         num1,num2,num3      
       }
       else if(num1>=num2 && num2<=num3 && num1>=num3)
       {
           num1, num3, num2;       
       }
       else if(num2>=num3 && num2>=num1 && num3>=num1)
       {
           num2, num3, num1; 
       }
       else if(num2>=num1 && num1>=num3 && num2>=num3)
       {
            num2, num1, num3; 
       }
       else if(num3>=num2 && num2>=num1 && num3>=num1)
       {
            num3, num2, num1; 
       }
       else if(num3>=num2 && num1>=num2 && num3>=num1)
       {
            num3, num1, num2; 
       }
    }
    Grazie

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Devi passare le tre variabili per indirizzo, utilizzando tre puntatori ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    181

    Scusa,ma mi puoi dire come si fa?
    Questa parte di argomento l'ho saltata(la prima e unica lezione...)...

  4. #4
    Utente di HTML.it L'avatar di ybla82
    Registrato dal
    Jan 2009
    Messaggi
    92
    La funzione Ordina deve prendere i parametri come puntatori e quindi...

    codice:
    void ordinaAsc(int *a, int *b, int *c)
    {
    	int temp = 0;
    	if(*a > *b)
    	{
    		temp = *a;
    		*a = *b;
    		*b = temp;
    	}
    //ne ho fatto un pezzo per farti capire...però è da finire
    }

    In questo modo quello che passi alla funzione sono gli indirizzi dei tre numeri.
    A questo punto dentro il metodo posso spostare i valori come voglio, perchè tanto li sposto da un indirizzo all'altro.

    Quando esco, i valori rimangono nella posizione in cui li avevo spostati dentro il metodo, e quindi me li ritrovo ordinati.

    Se passassi i numeri per valore ( quindi senza '*'), dentro il metodo avrei solo una copia dei valori,e non il riferimento a loro.

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Dheed

    Scusa,ma mi puoi dire come si fa?
    Questa parte di argomento l'ho saltata(la prima e unica lezione...)...
    Purtroppo, quando si studiano i puntatori, si comprendono dopo un po' di tempo e a fatica (alcuni non ne hanno mai compreso il funzionamento ...).

    Se poi si salta la lezione .... non penso tu possa capire molto da un codice che copierai e incollerai solamente per avere l'esercizio svolto ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    181
    Non è che io voglia l'esercizio svolto(anche perchè non mi sembra giusto),ma è che voreei capire un po di più,ho studiato un pò sul libro,ma leggendo solamente un asemplice definizione(in 4 capitoli diversi) non mi dice niente,solamente grazie a degli esempi riesco a capire.
    Infatti sono riuscito a trovare una cosa simile(anzi uguale) a quella che mi ha proposto ybla82(che ringrazio comunque).
    Perciò non pensate male...

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non mi sono spiegato ... non è che "penso male" perchè credo tu voglia il codice pronto ... il fatto è che ti dico che i "puntatori" sono un argomento ostico se l'hai avuto spiegato, figurati se invece la spiegazione non l'hai avuta ...

    Quindi, il consiglio e' di chiedere al professore di spiegare nuovamente quel concetto (e di esserci questa volta!) perchè, da ora in poi, li userai tantissimo ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.