Problema con un programma in c

di il
16 risposte

Problema con un programma in c

Salve, ho implementato questo programma che crea un array di 5 interi generati random con srand e la libreria time.h da questi 5 numeri generati devo fare la sottrazione 2 a 2 ritornando una posizione indietro per poter fare la prossima sottrazione tipo cosi:

5
4 9
7 11 2
8 1 12 10
6 14 15 3 13
i numeri sono generati in un intervallo tra 1 e 15.
Il mio problema è che non riesco a collegare la procedura per il triangolo all'array random appena generato e invece di farmi la sottrazione mi fa l'addizione (perché se implemento un array con numeri stabiliti mi funziona, ma fa l'addizione).
Chiedo gentilmente un aiuto, perché ci sono bloccato da parecchio tempo. Grazie in anticipo.

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


// implementazione Generatore numero casuale in un array di 5 elementi interi

int main()
{
int i;
int arr;
int n;
srand(time(NULL));

for( i=0;i<5;i++)
{
arr=1 + rand()%15;
printf("%4d",arr);
}
Triangolo(arr[],n);
}



// Funcion per la realizzarione del triangolo
void Triangolo(int arr[], int n)
{
// Inizializzazione array 2D per implementazione del triangolo
int tri[n][n];
int i,j;
// Inizializzazione ultima riga del triangolo
for ( i = 0; i < n ; i++)
{
tri[n-1] = tri[j]; //anche dove sta = tri piu la i tra parentesi quadre
}
// Riempimento altra riga
for ( i = n-2; i >=0; i--)
{
for ( j = 0; j <= i; j++)
{
tri[j] = tri[i+1][j] + tri[i+1][j+1]; //nel primo tri di questa riga ci sta anche un i tra parentesi quadre
}
}
// Printf del triangolo
for ( i = 0; i < n; i++)
{
for( j = 0; j <= i ; j++)
{
printf(" %d ",tri[j],n); //dove sta tri ci sta anche una i tra parentesi quadre
printf("\n");
}
}
}

Ho fatto la compilazione mi da errore dove sta Triangolo, ma comunque mi consente di cliccare su Run e mi visualizza L' array generato random. Per favore aiutatemi a risolvere.

16 Risposte

  • Re: Problema con un programma in c

    Ciao, scusa Ma nella funziona main, non Si dovrebbe dichiarare arr come vettore invece che come variabile int
    Voglio dire che forse mancano Le parentesi quadre
  • Re: Problema con un programma in c

    Ciao grazie per avermi risposto. Si ho modificato il programma ora si presenta in questo modo
    IL MAIN
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    void proceduraTriangolo(int [], int);
    
    int main()
    {
        int array[5];
        int i;
    
        srand(time(NULL));
    
        for(i=0;i<5;i++)
        {
            array[i]=1 + rand() %15;
            printf ("%4d",array[i]);
        }
        proceduraTriangolo(array,5);
        return ;
    }
    
    LA FUNCION
    #include <stdlib.h>
    #include <stdio.h>
    
    void proceduraTriangolo (int array[],int n)
    {
        int array2D[n][n];
        int i;
        int j;
        	for (int i = 0; i < n ; i++)
    		{
    		    array2D[n-1][i] =  array[i];
    		}
    
    		for (int i = n-2; i >= 0; i--)
             for (int j = 0; j <= i; j++)
    		 {
                array2D[i][j] = array2D[i+1][j] - array2D[i+1][j+1];
    
    		 }
    		 for ( i = 0; i < n; i++)
              for( j = 0; j <= i ; j++)
                {
    			   printf("%4d",array2D[i][j]);
    
                }
                   printf ("\n");
    
    
    }
    Mi da problemi nella funcion per quanto riguarda il l'array random non ci sono problemi. Se qualcuno può indicarmi dove e sbaglio e perchè lo ringrazio in anticipo
  • Re: Problema con un programma in c

    "Mi dà problemi" non serve a molto ... indica precisi errori o malfunzionamenti. E usa i tag CODE per il codice altrimenti non lo legge nessuno ...
  • Re: Problema con un programma in c

    Nel primo messaggio a inizio treath leggete solo la traccia il codice è sbagliato, il messaggio che ho inviato prima di questo ci sta il nuovo programma, e l'ho messo il tag. Errori di istruzioni non c'è ne sono (uso code blocks) , ci sta sicuro un errore concettuale che ancora non ho individuato. Se qualcuno trova l'errore è gli fa piacere può anche scrivere dove sbaglio, ma se dovete postare per dire solo che ci sono errori....grazie....
  • Re: Problema con un programma in c

    Ma le sottrazioni in quale ordine sono? Non si capisce.
  • Re: Problema con un programma in c

    Ok mo posto tutto meglio.
    Devo creare un triangolo che da un array di 5 interi casuali, deve fare la sottrazione con a[0] - a[1] poi a[1] - a[2] e cosi via... e generare un triangolo isoscele (se possibile) come nell'esempio qui sotto.

    5
    4 9
    7 11 2
    8 1 12 10
    6 14 15 3 13
    i numeri sono generati in un intervallo tra 1 e 15.

    IL MAIN (main.c) usando codeblocks
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    void proceduraTriangolo(int [], int);
    
    int main()
    {
        int array[5];
        int i;
    
        srand(time(NULL));
    
        for(i=0;i<5;i++)
        {
            array[i]=1 + rand() %15;
            printf ("%4d",array[i]);
        }
        proceduraTriangolo(array,5);
        return ;
    }

    LA FUNZIONE uso sempre codeblocks (windows)
    ATTENZIONE: la funzione la metto in un file.c separato dal main.
    Mi sposto all'interno di una matrice 2D facendo il primo ciclo for per associare l'arry 2D all'array.
    Poi faccio 2 cicli for innestati per fare l'oprerazione di sottrazione dei 2 alementi.
    Poi faccio altri 2 cicli for innestati per la stampa del triangolo .
    ATTENZIONE: mi da un warning dove sta nella funzione int i,j; dicendomi che i non viene utilizzata. Non so perchè? il ciclo for che richiede i ci sta.
    #include <stdlib.h>
    #include <stdio.h>
    
    void proceduraTriangolo (int array[],int n)
    {
        int array2D[n][n];
        int i,j;
    
        	for (int i = 0; i < n ; i++)
    		{
    		    array2D[n-1][i] =  array[i];
    
    
    		for (int i = n-2; i >= 0; i--)
             for (int j = 0; j <= i; j++)
    		 {
                array2D[i][j] = array2D[i+1][j] - array2D[i+1][j+1];
    
    		 }
    		 for ( i = 0; i < n; i++)
              for( j = 0; j <= i ; j++)
                {
    			   printf("%4d",array2D[i][j]);
    
                }
                   printf ("\n");
    
    		}
    }
    Spero che qualcuno possa aiutarmi, altrimenti se ci sta una soluzione migliore o alternativa della funzione per me va bene, perchè per quanto riguarda il costo spazio-tempo non è uno dei migliori.
  • Re: Problema con un programma in c

    Se scrivi

    for (int i ...

    è ovvio che ti dà quel warning. Si scrive solamente

    for (i ...

    Ma non hai risposto alla mia domanda ... Come devono essere fatte le sottrazioni?
    Ti faccio un esempio concreto a partire da

    6 14 15 3 13

    in cui fai 14-6, 15-14 ... poi perché 15-3 , dovrebbe essere 3-15
  • Re: Problema con un programma in c

    Ciao , ho corretto si è risolto. Ma come soluzione mi da sempre 5 numeri interi (quelli casuali) con un sfilza di numeri vicino infatti dopo l'ultimo numero del random ci sta un nuovo numero inizia con il segno meno e ha molte cifre.

    si ho 6 14 15 3 13
    e mi da facendo la sottrazione 8 1 12 10 6-14 = 8 / 14-15= 1
    si può fare in qualunque esempio perchè ci deve stare un unsigned perche se faccio 6-14 o -6+14 anche facendo 14-6 comunque deve produrre un valore senza segno.
  • Re: Problema con un programma in c

    Non è corretto usare gli unsigned int, avresti valori sbagliati.
    Devi calcolare il valore assoluto del risultato della sottrazione usando la funzione abs aggiungendo anche una

    #include <math.h>

    Poi hai sbagliato alcune parentesi { }

    Per capirci, il codice dovrebbe essere
    
    	int array2D[n][n];
    	int i, j;
    
    	for ( i = 0; i < n; i++)
    		array2D[n - 1][i] = array[i];
    
    		for (int i = n - 2; i >= 0; i--)
    			for (int j = 0; j <= i; j++)
    				array2D[i][j] = abs(array2D[i + 1][j] - array2D[i + 1][j + 1]);
    
    		for (i = 0; i < n; i++)
    		{
    			for (j = 0; j <= i; j++)
    				printf("%4d", array2D[i][j]);
    	
    			printf("\n");
    		}
    
  • Re: Problema con un programma in c

    Grazie mille, ho corretto e il risultato si sta avvicinando. Ho levato le parentesi graffe e ho aggiunto quello che mi hai detto e al momento dell'esecuzione mi da questo:

    13 9 3 11 10 5
    0 5
    2 2 7
    4 6 8 1
    13 9 3 11 10

    Sopra al triangolo quella sequenza di numeri 13.... è la copia dell'array generato sotto al triangolo.
    Ogni volta che eseguo cambiano tutti i numeri e i numeri sottolineati sono uguali.
  • Re: Problema con un programma in c

    Mostra TUTTO il sorgente perché a me la funzione non dà questi problemi.
  • Re: Problema con un programma in c

    Ok eccolo qua
    ATTUALE MAIN
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    void proceduraTriangolo(int [], int);
    
    int main()
    {
        int array[5];
        int i;
    
        srand(time(NULL));
    
        for(i=0;i<5;i++)
        {
            array[i]=1 + rand() %15;
            printf ("%4d",array[i]);
        }
        proceduraTriangolo(array,5);
        return ;
    }
    ATTUALE FUNZIONE (chiamata funzioneTriangolo.c)
    #include <stdlib.h>
    #include <stdio.h>
    #include <math.h>
    
    void proceduraTriangolo (int array[],int n)
    {
        int array2D[n][n];
        int i,j;
    
        	for (i = 0; i < n ; i++)
    
    		    array2D[n-1][i] =  array[i];
    
    
    		for (i = n-2; i >= 0; i--)
             for (j = 0; j <= i; j++)
    
                array2D[i][j] = abs(array2D[i+1][j] - array2D[i+1][j+1]);
    
    
    		 for ( i = 0; i < n; i++)
             {
    
    
              for( j = 0; j <= i ; j++)
    
    			   printf("%4d",array2D[i][j]);
    
    
                   printf ("\n");
    
    		  }
    }
  • Re: Problema con un programma in c

    A parte dover inserire una

    printf("\n\n");

    nel main prima di chiamare la proceduraTriangolo, mi sembra che il resto sia a posto.
  • Re: Problema con un programma in c

    Ok grazie mille ho risolto.
    Vorrei chiederti un'ultima cosa, il triangolo che viene creato è un triangolo rettangolo; la mia domanda è si potrebbe farlo diventare un triangolo iscoscele?
Devi accedere o registrarti per scrivere nel forum
16 risposte