Elenet.net
+2 voti

Potete aiutarmi a fare alcuni esercizi che utilizzino le funzioni con i parametri passati per riferimento?

Primo esercizio:

Creare un programma che, dato in ingresso un tempo dato in millisecondi, restituisca l'equivalente in termini di minuti, secondi, millisecondi.

Secondo esercizio:

Creare un programma che legga da input due vettori di dimensione nota a priori, e che terminano all'inserimento di 0.

Dopo stampa gli elementi del primo vettore nelle stessa posizione e che abbiano lo stesso valore di quelli nel secondo vettore.

 

quesito posto 2 Maggio 2013 in Classe terza da Salvatore Firriolo Corsista (131 punti)
  

3 Risposte

+1 voto
come promesso ecco il programma l'ho testato su LINUX e funziona correttamente

ENTRAMBI I PROGRAMMI SONO STATI PROVATI SU LINUX E FUNZIONANO

#include <stdio.h>

int main(int argc, char** argv)
{
    int i, j , numero, lunghezza_v1, lunghezza_v2;
    int vettore1[50];  // visto che devono terminare con 0
    int vettore2 [42];  // il caricamento
    
    /* per caricare i due vettori si
      può fare uso di while con un controllo in testa
      oppure con il classico ciclo for però includendo un break
      per l'uscita, in questo caso il metodo migliore è il while */
      
      
      // caricamento vettore 1
      printf (" inserisci un numero \n ");
      scanf ("%d", &numero);
      i=0;    // indica l'indice del vettore 1
      while ((numero !=0 ) && (i <=50))  // se il numero è diverso da zero     
      {
          vettore1 [i] = numero;
           printf (" inserisci un numero \n ");
            scanf ("%d", &numero);
            i++;
          
          }
          
          lunghezza_v1=i-1;     // lunghezza vettore 1
    
    printf (" ************************************** \n");
    printf (" caricamento vettore 2 \n");
    printf (" ************************************** \n");
    
     printf (" inserisci un numero \n ");
      scanf ("%d", &numero);
     j=0;    // indica l'indice del vettore 2
      while ((numero !=0 ) && (j <=42))  // se il numero è diverso da zero     
      {
          vettore2 [ j ] = numero;
           printf (" inserisci un numero \n ");
            scanf ("%d", &numero);
            j++;
          
          }
          
          lunghezza_v2=j-1;     // lunghezza vettore 2
          
        printf (" ************************************** \n");
    printf (" stampa vettore 1 \n");
    printf (" ************************************** \n");  
    
    for (i=0; i<= lunghezza_v1; i++)
    {
        printf (" %d \n ", vettore1 [i]);
        
        }
    
    /* per avere lo stesso valore del secondo vettore
     occorre fare una assegnazione elemento per elemento  tenendo conto
      della lunghezza dei due vettori , perchè quello più grande non deve
       essere caricato sul più piccolo altrimenti si ottengono degli errori */
    
    if ( lunghezza_v1 <= lunghezza_v2)
    {
    
            for (i=0; i<= lunghezza_v1; i++)
            {
                     vettore1 [i] = vettore2 [i];
        
                }
    }
    else
        
        {
    
            for (i=0; i<= lunghezza_v2; i++)
            {
                     vettore1 [i] = vettore2 [i];
        
                }
        }
        
        printf (" ************************************** \n");
    printf (" stampa vettore modificato \n");
    printf (" ************************************** \n");  
    
    for (i=0; i<= lunghezza_v1; i++)
    {
        printf (" %d \n ", vettore1 [i]);
        
        }
    
    return 0;
}
risposta inviata 2 Maggio 2013 da nicolo' guarino Esperto (687 punti)
+1 voto
Il secondo perogramma

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

int leggi(int vet[], int dim)
{
    int i, num;
    i=0;
    
    do
    {
        printf("Inserisci numero: ");
        scanf("%d", &num);
        
        if (num != 0 && i<dim) {
            vet[i] = num;
            i++;
        }
    } while (num!=0 && i<dim);
    
    return i;
}

int main(void)
{
    int v1[10], v2[10], i;
    int dim_v1, dim_v2;
    
    dim_v1 = leggi(v1, 10);
    dim_v2 = leggi(v2, 10);
    
    for (i=0; i<dim_v1; i++)
        if ( v1[i] == v2[i])
            printf("%d ", v1[i]);
    
    
    system("PAUSE");
    return (0);
}
risposta inviata 5 Maggio 2013 da Laura Guccione Corsista (149 punti)
0 voti
Con il termine funzione si intende, in generale, un operatore che, applicato a un insieme di operandi, consente di calcolare un risultato, come avviene anche per una funzione matematica f(x).
 f(x) restituisce un valore, in generale, diverso per ogni diverso valore di x.

I valori che inseriamo tra parentesi, che in matematica chiamiamo variabili indipendenti, in C si chiamano parametri della
funzione

Questi parametri possono essere passati in due modi

- per valore

- per riferimento ( usando i puntatori )

Le funzioni con parametri passati per valore , usa  solo i valori per calcolare il risultato , anche se questi parametri vengono modificati all'interno della funzione, all'esterno della funzione non vengono modificati.

le funzioni invece con parametri passati per riferimento , se questi parametri vengono modificati all'interno della funzione, allora essi rimangono modificati anche all'esterno

Si passano gli indirizzi delle variabili in cui voglio siano contenuti i risultati, in modo che la funzione modifichi realmente QUELLE variabili (e non che ne usi )

Esistono variabili che contengono valori che vengono
interpretati come indirizzi di memoria: si chiamano puntatori
perché puntano (indirizzano a) una certa cella della
memoria centrale.
Per dichiarare una variabile come puntatore, al momento
della dichiarazione si fa precedere il nome da un asterisco.
n Se, in un’espressione, trovo un puntatore punt preceduto da
un asterisco, l’espressione *punt rappresenta il valore
contenuto nella cella di memoria che ha indirizzo uguale al
valore di punt
 Si ricordi inoltre che l’espressione &var restituisce l’indirizzo
della variabile var

piu tardi in serata ti darò la risposta completa perchè voflio provare prima il programma
risposta inviata 2 Maggio 2013 da nicolo' guarino Esperto (687 punti)

Domande correlate

+1 voto
1 risposta
quesito posto 20 Marzo 2013 in Classe terza da Giovanni Mattaliano Corsista (74 punti) | 1,270 visite
+1 voto
3 risposte
quesito posto 8 Marzo 2013 in Classe terza da Gianni Messina Esperto (736 punti) | 254 visite
+1 voto
1 risposta
778 domande
1,565 risposte
639 commenti
1,445 utenti