Date...

di il
37 risposte

37 Risposte - Pagina 2

  • Re: Date...

    Così??
    #include <stdio.h>
    #include <stdlib.h>
    
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    
    int main() {
    	int g[3];
    	int m[3];
    	int a[3];
    	int i;
    
    	for (i=0; i<3; i++)
    	{
    	printf ("Inserisci la data %d in formato gg/dd/aaaa\n", i);
    	scanf("%2d/%2d/%4d", &g[i], &m[i], &a[i]);
        }
    	
    	system("pause");
    	return 0;
    }
  • Re: Date...

    Sì ... ma non chiedere ... compilalo e provalo.

    (è solo sbagliata la stringa quando dici gg/dd/aaaa ovviamente deve essere gg/mm/aaaa)
  • Re: Date...

    Sì! Ho compilato e va tutto bene...
    ora devo definire la funzione di ordinamento:
    come prototipo ho inserito:
    int ordinamento()
    (così hanno detto a lezione che si fa)
    poi, nella funzione vera e propria:
    int ordinamento(int i, int *a[i])
    ?
  • Re: Date...

    No ... devi prevedere i 3 vettori nel prototipo.
  • Re: Date...

    Cioè, già nel prototipo devo scrivere:
    
    int ordinamento (int i, int *a[i], int *m[i], int *g[i])
    
    ?
  • Re: Date...

    La funzione non deve restituire nulla, quindi deve essere void non int
    Il primo parametro non serve
    Gli altri 3 parametri sono sbagliati

    Deve essere

    void ordinamento (int *a, int *m, int *g)

    Mi sa che devi rivedere un po' il tuo libro ...
  • Re: Date...

    Ti chiedo di aiutarmi a capire, per favore...
    Sono mesi che cerco di capire dal libro queste cose... per favore....
  • Re: Date...

    Ti ho detto ... cosa devi capire?
  • Re: Date...

    Vorrei capire: *a etc sono i puntatori all'array, giusto? Potevo anche scrivere a[], etc?
    Una volta fatto ciò, io devo passare a definire il corpo della funzione... vero? (non nel prototipo ma prima o dopo il main, vero?)
    Come posso pensare l'ordinamento? devo far riferimento a qualche algoritmo noto?
  • Re: Date...

    alfiere17 ha scritto:


    Vorrei capire: *a etc sono i puntatori all'array, giusto? Potevo anche scrivere a[], etc?
    Sì, potevi scrivere

    void ordinamento (int a[], int m[], int g[])
    Una volta fatto ciò, io devo passare a definire il corpo della funzione... vero? (non nel prototipo ma prima o dopo il main, vero?)
    Il prototipo è necessario se la funzione la metti dopo il main. Se la scrivi prima non c'è bisogno.
    Come posso pensare l'ordinamento? devo far riferimento a qualche algoritmo noto?
    A qualsiasi algoritmo. Quale avete fatto? Il bubble sort?
  • Re: Date...

    Abbiamo visto il bubble sort...
    So che il codice è il seguente:
    
    void bubblesort(int v[], int n) {
    int i,k;
    int temp;
    for(i = 0; i<n-1; i++) {
     for(k = 0; k<n-1-i; k++) {
             if(v[k] > v[k+1]) {
              temp = v[k];
              v[k] = v[k+1];
              v[k+1] = temp;
             }
     }
    }
    }
    
    Giusto?
    Come posso applicarlo al mio caso? Mi daresti un'idea?
  • Re: Date...

    E' quasi ovvio ...

    Non devi passare n perché sai che n vale sempre 3 (è il numero massimo di date che prevede l'esercizio).

    Al posto di un solo vettore, devi passare i tre vettori, esattamente come abbiamo detto.

    Devi solo modificare la if che deve essere un po' più complicata ...

    Prima confronti l'anno, a parità di anno confronti il mese, a parità di mese confronti il giorno.

    E quando decidi di scambiare i valori, devi fare 3 scambi ...

    E' più complicato a dirsi che a farsi.

    Del resto è un compito abbastanza semplice ...
  • Re: Date...

    Ci provo... per me è una nuova materia, che sto trovando bella ma al contempo complessa...
    I tre scambi vanno posti all'interno dell'if?
  • Re: Date...

    Sì, certo .... pensa al problema in astratto ... se devi scambiare una data, scambierai sia il giorno che il mese che l'anno, no?
  • Re: Date...

    Ho provato così... non ci sono errori di compilazione, ma non riesce...
    Dove sbaglio???
    
    #include <stdio.h>
    #include <stdlib.h>
    
    void ordinamento();
    
    int main() {
    	int g[3];
    	int m[3];
    	int a[3];
    	int i;
    
    	for (i=0; i<3; i++)
    	{
    	printf ("Inserisci la data %d in formato gg/mm/aaaa\n", i);
    	scanf("%2d/%2d/%4d", &g[i], &m[i], &a[i]);
        }
    	
    	ordinamento(a, m, g);
    	
      for (i=0; i<5; i++){
    	  printf("%2d/%2d/%4d", &g[i], &m[i], &a[i]);
    	  printf("\n");
        }
    	
    	system("pause");
    	return 0;
    }
    
    void ordinamento(int *a, int *m, int *g)
    {
    int h, k;
    int temp1, temp2, temp3;
        for(h=0; h<2; h++);{
    	    for (k=0; k<2-h; k++){
    	    	if (a[k]>a[k+1]){
    	    		temp1 = a[k];
    	    		a[k] = a[k+1];
    	    		a[k+1] = temp1;
    	    		temp2 = m[k];
    	    		m[k] = m[k+1];
    	    		m[k+1] = temp2;
    	    		temp3 = g[k];
    	    		g[k] = g[k+1];
    	    		g[k+1] = temp3;
    			}
    			if (a[k]=a[k+1]){
    				if (m[k]>m[k+1]){
    	    		   temp1 = m[k];
    	    	   	   m[k] = m[k+1];
    	    		   m[k+1] = temp1;
    	    		   temp2 = g[k];
    	    		   g[k] = g[k+1];
    	    		   g[k+1] = temp2;
    		}}
                if (a[k]=a[k+1]){
    				if (m[k]=m[k+1]){
    				    if (a[k]>a[k+1]){ 
    					temp2 = g[k];
    	    		    g[k] = g[k+1];
    	    		    g[k+1] = temp2;
    				
    }}}}}}
Devi accedere o registrarti per scrivere nel forum
37 risposte