Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    11

    [C] come passare da una funzione all'altra scrivendo una parola di riferimento

    Ciao a tutti!

    sto programmando per svago un programmino che esegue alcune operazioni di calcolo numerico
    es: sottrazione addizione, fra due numeri (a e b) e ne calcola il risultato (y).
    per ora è tutto in fila e quindi si possono svolgere uno dietro l'altro e basta. alla fine del programma in oltre si spegne premendo un tasto
    io vorrei fare le opzioni:
    all inizio con un printf("") scrivo la domanda "scrivi quale operazione svolgere"
    se uno scrive somma per esempio vorrei che andasse alla parte del programma che esegue la somma
    ecc per le altre scritte
    sottrazione ecc...

    come cosa mi consigliate?


    codice:
    int a,b,y;
    
    main ()
    
    {
         printf ( "\n\n\n\n" ) ;
         printf ( "                    **********************\n" ) ;
         printf ( "                    *    CALCOLATRICE    *\n" ) ;
         printf ( "                    **********************\n" ) ;
         printf ( "\n\n\n\n" ) ;
        
         setrgb(0);
         printf("Quale calcolo vuoi eseguire?\n\n");
         
    
         printf("Somma di due numeri \n\n");
         printf("Scrivi il primo numero:");
         scanf("%d", &a);
         printf("\nScrivi il secondo numero:");
         scanf("%d", &b);
         y=a+b;
         printf("\nLa somma di %d + %d vale: %d\n", a,b,y);
         system("Pause");
         
         setrgb(3);
         differenza:
         printf("Differenza di due numeri \n\n");
         printf("Scrivi il primo numero:");
         scanf("%d", &a);
         printf("\nScrivi il secondo numero:");
         scanf("%d", &b);
         y=a-b;
         printf("\nLa differenza di %d - %d vale: %d\n", a,b,y);
         system("Pause");
         setrgb(4);
         prodotto:
         printf("Prodotto di due numeri \n\n");
         printf("Scrivi il primo numero:");
         scanf("%d", &a);
         printf("\nScrivi il secondo numero:");
         scanf("%d", &b);
         y=a*b;
         printf("\nIl prodotto di %d e %d vale: %d\n", a,b,y);
         system("Pause");
         setrgb(1);
         divisione:
         printf("Rapporto di due numeri \n\n");
         printf("Scrivi il primo numero:");
         scanf("%d", &a);
         printf("\nScrivi il secondo numero:");
         scanf("%d", &b);
         y=a/b;
         printf("\nIl rapporto fra %d e %d vale: %d\n", a,b,y);
         system("Pause");
         setrgb(4);
         
    }
    Grazie

    PS sono alle prime armi e sto studiando C a scuola ma mi voglio mettere avanti per piacere personale

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    accidenti, finalmente ho capito cosa si intendeva quando veniva consigliato di fare una "calcolatrice"

    a me sembrava difficile, moolto difficile, al limite dell'impossibile per in principiante, tra me pensavo "sticavoli, i giovani d'oggi son proprio in gamba!"
    ---
    per "calcolatrice" si intende normalmente un interprete, con tanto di memorie e funzioni trigonometriche, dove uno mette 3*2+5*3^4*sin(.2) e per complicarsi la vita pure le parentesi
    ---
    OK tornando a te hai vari modi, almeno 3 mi vengono in mente

    1) fare un riconoscitore nei termini sopra indicati (lo escluderei)
    2) fai scegliere all'utente e ci metti un bel case (grezzo)
    3) "fai il fico" (per questa tipologia di problemi) e scansioni la stringa cercando l'operatore.
    se trovi "+" farai una somma, "-" una differenza e così via.
    Spezzando in due la stringa prima e dopo l'operatore.

    purtroppo non sono pratico degli esercizi di questo tipo, nel senso che rischio di darti consigli "troppo difficili" e neppure richiesti

  3. #3
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    prova se funziona questo

    codice:
    int oper;
    char somma[]={"sommaaddizione"};
    
    oper = 0;
    if(strstr(somma,user_s) != NULL)
         oper = 1;
    Per gli Spartani e Sparta usa spartan Il mio github

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    ahem... io ti consiglio... (metto lo pseudocodice, sennò non impari nulla)

    diciamo s stringa (adesso non ci interessa l'overflow)
    diciamo termine1 numero floating point (o intero)
    diciamo termine2 numero floating point (o intero)

    diciamo primaparte stringa
    diciamo secondaparte stringa

    diciamo posizioneOperatore intero

    leggi-da-tastiera-s

    posizioneOperatore=cerca la prima occorrenza di "+" dentro s

    svuota primaparte
    svuota secondaparte

    cicla i da 0 a posizioneOperatore-1
    primaparte=primaparte+ s[i]

    cicla i da posizioneOperatore+1 a lunghezza(s)
    secondaparte=secondaparte+s[i]

    termine1=stringa-a-float(primaparte)
    termine2=stringa-a-float(secondaparte)

    a seconda di stringa[posizioneOperatore]
    ='+' ->fai somma
    ='-' -> fai differenza
    ...


    vabbè spero si capisca

    PS è un esercizio in modalità "impara", non è il caso di mettere strategie "strane"

  5. #5
    Mmm la cosa più intelligente secondo me sarebbe fare una procedura options in cui come prima cosa stampi un menù in cui ad ogni numero viene associata un'operazione e all'ultimo numero viene associato il classico "termina programma".
    A questo punto chiedi all'utente di inserire il numero dell'opzione che gli interessa (assegnandolo ad esempio ad un intero opz), poi usi, in pseudocodice, qualcosa del tipo:

    switch (opz)
    {
    case (1): fai la somma;
    case (2): fai la sottrazione;
    ecc eccc.
    case (n): return; (nel main hai poi return 0);
    default: l'utente ha inserito un numero sbagliato, chiedere di inserire un'altro numero
    e ripetere options;
    }

    se non è già uscito con il return del case (n), puoi ripetere options in modo che l'utente possa fare tutte le operazioni che voglia prima di scegliere di terminare il programma!

    Spero di essere stato abbastanza chiaro
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  6. #6
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Nono,si usano i puntatori a funzione a seconda dell' operazione che devi fare.
    Una volta create le funzioni per fare le 4 operazioni di base si utilizza il puntatore a funzione:
    codice:
    int (*pointer) ();
    Questo è un puntatore a funzione,la funzione deve ritornare un intero.
    Poi lo fai puntare alla funzione che ti interessa,ad esempio la funzione sum:
    codice:
    pointer=sum;
    Dove arg1 e arg2 li hai presi in input.
    Poi si tratta di fare una sostituzione per ottenere il risultato:
    codice:
    risultato=pointer(arg1,arg2);
    In questo modo puoi fare un numero illimitato di sostituzioni,puoi prendere in input n argomenti e semmai riportare gli errori di sintassi che fa l' utente come fa ad esempio l' interprete python.
    Il simbolo "=" termina la sequenza e produce l' effetto di uscire dal ciclo e stampare il risultato.
    Usando i puntatori puoi ottenere n risultati temporanei e poi sommarli tra loro,puoi anche implementare le parentesi tonde,quadre e graffe facilmente.
    Una volta che uno sa questo è pronto per passare a un linguaggio ad oggetti,in fondo l' interprete python fa queste cose automaticamente,uno così ha dimostrato a se stesso di saper usare tutto nel C.
    Io la calcolatrice l' avevo già fatta ma senza puntatori a funzione,una volta che uno sa usare il puntatore del puntatore del puntatore sa usare tutto
    Ed è pronto a passare a un linguaggio superiore.
    YuYevon mi ha fatto capire che usare il C per programmare un 'interfaccia è una scelta obsoleta,alla fine il C è solo il punto d' avvio.
    Vorrei passare a linguaggi come C# ma purtroppo devo seguire il programma standard dell' università,la prossima cosa che studio sarà l' assembly,comunque avrò tempo per studiare queste cose.
    Consiglio a chi ha fatto la calcolatrice e sa usare bene i puntatori di passare al c++.

  7. #7
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Guardate,si possono pure fare cavolate del genere:
    codice:
        int (*pointer) ();
        int risultato;
        pointer=main;
        risultato=pointer(argc,argv);
    Ovviamente da segmentation fault

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.