Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    12

    [C] Difficoltà con un costrutto.Aiuto.

    Ho trovato veramente una grande difficoltà nella risoluzione di questo listato. Chiedo cortesamente se mi potrebbe essere aiutato con una spiegazione decente come viene risolto il problema.
    codice:
    #include <stdio.h>
    
        int f1(int a, int **b) {
            int i;
            for (i=0; i<a; i++)
            *b[i--]+=a--;
        return ++(*b)[2]; }
    
        int main() {
            int a[3]={1,2,3}, *b[3]={A+2,A+1,A};
            f1(a[1], &b);
            printf("\na0=%d  \na1=%d  \na2=%d", a[0],a[1],a[2]);
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Prima devi spiegarti un po' più chiaramente su quale problema hai.

    Cosa è quel codice ? Cosa vuoi sapere ? Cosa non ti convince ?


    P.S. E inserisci il codice tra tag CODE per poterlo leggere meglio come da regolamento
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    12
    Allora non riesco proprio a capire come viene effettuato il ciclo ''For'' anzi il primo ciclo lo calcolo e mi viene però dopo il primo ciclo mi blocco sulle variabili puntati che devono assumere a sua volta i nuovi valori.Chiede se mi può essere spiegato tutto il procedimento passo per passo.Lo so che sarebbe palloso però cerco di capire proprio a fondo come viene svolto tutto il costrutto per passi.
    codice:
    #include <stdio.h>
    
    int f1(int a, int **b) {
        int i;
        for (i=0; i<a; i++)
            *b[i--]+=a--;
        return ++(*b)[2]; }
    int main() {
        int a[3]={1,2,3}, *b[3]={A+2,A+1,A};
        f1(a[1], &b);
        printf("\na0=%d  \na1=%d  \na2=%d", a[0],a[1],a[2]);
    }

  4. #4
    Nel codice c'è qualcosa di sbagliato... la variabile `A` non viene mai definita, per caso intendevi `a` (minuscola)?
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    12
    Si davvero questo è sbagliato, perché ormai sono cosi bloccato che non proprio riesco a pensare questi esercizi mi hanno fatto impazzire :S Allora quello di prima è corretto nel seguente modo.
    codice:
    Se f1 è definita come:
           int f1(int a, int **b) { 
               int i; 
               for (i=0; i<a; i++) 
               *b[i--]+=a--;  
                return ++(*b)[2];
           }
    Cosa stampa il seguente frammento di codice?
           int main(){
               int a[3]={1, 2 ,3}, *b=a; 
               a[2]=f1(a[1], &b);  
               printf("\na0=%d,  a1=%d,  a2=%d", a[0],a[1],a[2]);
           }

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    12
    Invece il secondo con quale mi ero confuso è il seguente.


    codice:
    Se f1 è definita come:    
           void f1(int *a, int **b) { 
                  int i; 
                  for (i=0; i<3; i++) 
                  a[i]*=**b++; 
            }
    Cosa stampa il seguente frammento di codice? 
           int main(){
               int A[3]={1, 2, 3}, *B[3]={A+2, A+1, A};
               f1(A, B); 
               printf("\nA0=%d,  A1=%d,  A2=%d", A[0],A[1],A[2]);

    Vorrei solamente sapere come si raggiona un questo caso qual'è il punto di partenza e come vengono svolti i passi :S

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    12
    Aiuto vi prego :S

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Beh, per le prime volte ti può aiutare il debugger. Se esegui passo passo riesci a capire cosa succede linea per linea, istruzione per istruzione.

    Quando dovrai farlo senza computer, devi essere perfettamente padrone dei concetti (puntatori, puntatori a puntatori e array) ed eseguirli "a mente" ... è una questione di calma ed esperienza.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    12
    Il fatto è che mi sto sbattendo già un mese e non riesco a combinare niente non lo so perchè. Ho letto tante cose ho fatto tanti esercizi alcuni più semplici altri più difficili ma un esercizio del genere con delle espressioni del genere mi blocco. Infatti apposta ho scritto qui con la speranza di poter essere aiutato con il svolgimento di questo esercizio.Perché secondo me la risoluzione sarebbe una sciocchezza però non riesco a capire proprio il procedimento base.

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da plazzma secondo me la risoluzione sarebbe una sciocchezza
    Ma scusa, allora perché non *tenti* in questo forum di spiegare linea per linea?

    procedimento base
    Non c'è un "procedimento base" ... comincia con la prima riga del main, vai all'interno della funzione quando viene chiamata, continua con la linea dopo al ritorno della funzione ... esattamente come farebbe il computer.

    Comincia da

    int A[3]={1, 2, 3}, *B[3]={A+2, A+1, A};

    separando le due parti e cercando di capire cosa fanno come se fossero scritte

    int A[3]={1, 2, 3}

    e

    int *B[3]={A+2, A+1, A};

    Cosa fa la prima? Cosa fa la seconda?
    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.