ACCUMULATORI/CONTATORI C

di il
5 risposte

ACCUMULATORI/CONTATORI C

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

//Realizzare un programma che richieda all’utente n interi, e visualizzi il numero di volte in cui sono stati eventualmente immessi i valori 10, 100 e 1000.

//Essendo un esercizio lievemente complicato proviamo ad eseguire i sottostanti passaggi, magari verrà corretto.

//Passaggio 1: Introduciamo la domanda "inserisci tot. elementi (n)". Tali elementi devono rientrare nell'array a[]
//Passaggio 2: Poniamo la condizione, attraverso il costrutto if, che siamo obbligati a scrivere solo valori come 10,100 e 1000. In caso di valori diretti, attraverso break o continue o exit (VEDREMO) interrompiamo il programma e segnaliamo un errore
//Passaggio 3: Dopo aver introdotto tali n elementi dobbiamo ordinarli attraverso il bubblesort.
//Passaggio 4: Come ultimo passaggio sfruttiamo l'if per creare dei contatoti. Ogni volta che il programa trova, ad esempio, un 10 il contatore o accumulatore viene aggiornato.


main()

{
int n; //Nr. di elementi che compongono l'array
int a[n];
int i; //Variabile primo ciclo for
int el; //Variabile elementi interni array a;

int j,k,temp; //Variabili utili per il bubblesort




printf ("\t\tBenvenuto!\t\t\n");

printf ("Inserisci il numero n di elementi che devono far parte dell'array: ", n);
scanf ("%d", &n);


printf ("\nIl numero di elementi che compongono l'array a e': a[%d]", n);

//Condizione passaggio nr.2.

printf ("\nAdesso dobbiamo decidere quali sono questi elementi interni all'array\n");
printf ("\nUtilizziamo il ciclo for.");

for (i=0; i<n; i++)
{

printf ("\nInserisci l'elemento %d dell'array a: ", i,a);
scanf ("%d", &a);

if (a != 10 && a != 100 && a != 1000)
{
printf ("ERRORE!");
exit(1); //In questo caso l'exit è molto importante. Se viene individuata una incoerenza nella scelta degli elementi dell'array il programma deve interropersi. Con exit(1) (DOVE 1 STA PER "ERRORE") si risolve tale problema.
}
else
{
printf ("CORRETTO!");
}
}

//Passaggio nr.3
//Sfruttiamo le variabili j,k e temp per il bubblesort

for (j=0;j<n;j++)
{
for(k=0;k<n-j-1;k++)
{
if (a[k]>a[k+1]) //Si determina così la crescenza o la decrescenza
{
temp = a[k];
a[k] = a[k+1];
a[k+1] = temp;
}
}
}

for (j=0;j<n;j++) //RICORDATI che bisogna usare la variabile esterna del ciclo for del bubblesort
{
printf ("\n%d\n", a[j]);
}

//Passaggio nr.4
//Uso degli if per la creazione di contatori

for (a=0; a<n; a++)
{

if (a = 10)
{
printf ("%d", a++);
}
else if (a[i] = 100)
{
printf ("%d", a[i]++);
}
else if (a[i] = 1000)
{
printf ("%d", a[i]++);
}
}







return 0;
}
Salve a tutti. Avrei un problema riguardo gli ultimi passaggi. Dopo aver scelto n elementi che devono comporre l'array ed aver posto la condizione che tali elementi devono essere uguali a 10,100 o 1000 e dopo averli ordinati col bubblesort vorrei creare una sorta di contatore. Vorrei dire al programma. Vai al primo elemento dell'array, se è uguale a 10 somma 1 al primo contatore. Se è uguale a 100 somma 1 al secondo contatore ecc ecc...In codice come lo devo scrivere?

5 Risposte

  • Re: ACCUMULATORI/CONTATORI C

    I contatori sono tre semplici variabili c1 c2 c3 azzerati all'inizio. In un ciclo for con tre if controlli la presenza dei valori 10 100 1000 e incrementi una delle tre variabili.
    Occhio... Nel ciclo for la variabile è i
    Il segno di uguale per il confronto è ==

    P.S. Per il codice usa i tag code nel forum
  • Re: ACCUMULATORI/CONTATORI C

    Fifty ha scritto:



    //Passaggio nr.4
    //Uso degli if per la creazione di contatori

    for (a=0; a<n; a++)
    {

    if (a = 10)
    {
    printf ("%d", a++);
    }
    else if (a = 100)
    {
    printf ("%d", a++);
    }
    else if (a = 1000)
    {
    printf ("%d", a++);
    }
    }







    return 0;
    }
    Salve a tutti. Avrei un problema riguardo gli ultimi passaggi. Dopo aver scelto n elementi che devono comporre l'array ed aver posto la condizione che tali elementi devono essere uguali a 10,100 o 1000 e dopo averli ordinati col bubblesort vorrei creare una sorta di contatore. Vorrei dire al programma. Vai al primo elemento dell'array, se è uguale a 10 somma 1 al primo contatore. Se è uguale a 100 somma 1 al secondo contatore ecc ecc...In codice come lo devo scrivere?


    Ci sono un po' di errori nel codice, come suggerive oregon, in particolare comunque il Passaggio nr.4 dovresti aggiornarlo tipo così:

    int count10 = 0;
    int count100 = 0;
    int count1000 = 0;
    for (int i=0; i<n; i++)
    {
    	if (a[i] == 10)
    		count10++;
    	else if (a[i] == 100)
    		count100++;
    	else if (a[i] == 1000)
    		count1000++;
    }
    printf("# Of 10 are : %d\n", count10);
    printf("# Of 100 are : %d\n", count100);
    printf("# Of 1000 are : %d\n", count1000);
    Per la allocazione dell'array a, stai attento perché essendo la dimensione n un valore dinamico dovresti allocare l'array con una new, del tipo:
    
    int* a = new int[n];
    Il fatto che l'array è dichiarato come puntatore ad interi non deve sembrarti strano, gli array sono puntatori a tutti gli effetti, ed accedere ad essi con le parentesi quadre è uguale ad usare l'aritmetica dei puntatori. Ricordati infine di liberare la memoria con l'operatore delete :
    delete[] a;
  • Re: ACCUMULATORI/CONTATORI C

    Gli errori glieli avevo elencati... speravo che il semplice codice lo scrivesse da solo, per imparare...
  • Re: ACCUMULATORI/CONTATORI C

    oregon ha scritto:


    Gli errori glieli avevo elencati... speravo che il semplice codice lo scrivesse da solo, per imparare...
    Ci stavo provando tra ieri e oggi, diciamo che non ho avuto molto successo. Comunque sia, grazie per i consiglio!
  • Re: ACCUMULATORI/CONTATORI C

    CarDeFusco ha scritto:


    Fifty ha scritto:



    //Passaggio nr.4
    //Uso degli if per la creazione di contatori

    for (a=0; a<n; a++)
    {

    if (a = 10)
    {
    printf ("%d", a++);
    }
    else if (a = 100)
    {
    printf ("%d", a++);
    }
    else if (a = 1000)
    {
    printf ("%d", a++);
    }
    }







    return 0;
    }
    Salve a tutti. Avrei un problema riguardo gli ultimi passaggi. Dopo aver scelto n elementi che devono comporre l'array ed aver posto la condizione che tali elementi devono essere uguali a 10,100 o 1000 e dopo averli ordinati col bubblesort vorrei creare una sorta di contatore. Vorrei dire al programma. Vai al primo elemento dell'array, se è uguale a 10 somma 1 al primo contatore. Se è uguale a 100 somma 1 al secondo contatore ecc ecc...In codice come lo devo scrivere?


    Ci sono un po' di errori nel codice, come suggerive oregon, in particolare comunque il Passaggio nr.4 dovresti aggiornarlo tipo così:

    int count10 = 0;
    int count100 = 0;
    int count1000 = 0;
    for (int i=0; i<n; i++)
    {
    	if (a[i] == 10)
    		count10++;
    	else if (a[i] == 100)
    		count100++;
    	else if (a[i] == 1000)
    		count1000++;
    }
    printf("# Of 10 are : %d\n", count10);
    printf("# Of 100 are : %d\n", count100);
    printf("# Of 1000 are : %d\n", count1000);
    Per la allocazione dell'array a, stai attento perché essendo la dimensione n un valore dinamico dovresti allocare l'array con una new, del tipo:
    
    int* a = new int[n];
    Il fatto che l'array è dichiarato come puntatore ad interi non deve impressionarti, gli array sono puntatori a tutti gli effetti, ed accedere ad essi con le parentesi quadrate è uguale ad usare l'aritmetica dei puntatori. Ricordati infine di liberare la memoria con l'operatore delete :
    delete[] a;

    Grazie mille!!
Devi accedere o registrarti per scrivere nel forum
5 risposte