Posts written by ßlues

  1. .
    CITAZIONE (Steb95 @ 28/3/2016, 17:53) 
    Esercizio 2:

    Non ha molto senso far terminare la serie con -1, poiché se un elemento della serie è proprio -1 sorgono problemi. È meglio farla terminare con 0, in quanto, se un elemento è zero, può essere trascurato senza influenzare la somma della serie. Esempio: se ho una serie di: 1 1 1 -1, la somma è due, non tre. Al contrario se faccio terminare la serie con zero, anche ponendo di avere una serie di 1 1 1 -1 0, la somma risulta due sia considerando lo zero come elemento sia tralasciandolo.

    Comunque:
    Serie terminante con -1:
    CODICE
    #include <stdio.h>
    #include <stdlib.h>
    int main ()
    {
           int x,somma;
           printf ("Inserire una serie di numeri interi terminante con -1.\n");
           scanf ("%d", &x);
           somma = 0;
           if (x != (-1)) {
                                            while (x != (-1)) {
                                                    somma = somma + x;
                                                    scanf ("%d", &x);
                                                                                 }
                                        printf ("\nLa somma della serie inserita e' %d.\n", somma);
                                      }
           else printf ("\nE' stata inserita una serie composta da zero elementi. La somma e' zero.\n");
           return (0);
           getchar ();

    }


    Variante terminante con 0:
    CODICE
    #include <stdio.h>
    #include <stdlib.h>
    int main ()
    {
           int x,somma;
           printf ("Inserire una serie di numeri interi terminante con 0.\n");
           scanf ("%d", &x);
           somma = 0;
           if (x != 0) {
                                            while (x != 0) {
                                                    somma = somma + x;
                                                    scanf ("%d", &x);
                                                                                 }
                                        printf ("\nLa somma della serie inserita e' %d.\n", somma);
                                      }
           else printf ("\nE' stata inserita una serie composta da zero elementi. La somma e' zero.\n");
           return (0);
           getchar ();

    }


    P.S: l'esercizio 1 non lo capisco: basta usare sqrt per calcolare la radice no?

    Se si inserisce la serie 1 1 1 -1 la somma è tre perché -1 è un valore di riferimento, definito dal testo dell'esercizio. E' come se scrivessi "stop". Non cambia niente se metti 0, -1, o -100 come valore di stop, la somma è sempre tra gli addendi inseriti prima di quel numero. Infine, la getchar() va implementata prima della return, perché dopo la return il codice non viene più eseguito (in quanto la funzione main ritorna il valore 0 e non viene più eseguita). A parte questo l'algoritmo è corretto.

    Nell'esercizio 1 devi scoprirti l'algoritmo per calcolare la radice di un numero.
  2. .
    hai ragione, ho letto male io il codice.

    fai gli altri, che questo a confronto di un testo d'esame è uno scherzo.
  3. .
    Come usare l'AND è una tua scelta. E no, non è proprio la risposta giusta.
    Se tutti i numeri sono uguali, non entra nel primo if nè in tutti gli altri

    Comunque bravo, fai gli altri adesso.
  4. .
    CITAZIONE
    intendi se metto tre numeri uguali?

    Esatto. Ne bastano anche due di uguali. Sai dirmi perché è un bug? (cosa succede in pratica)
  5. .
    Usa il codice la prossima volta, che così è un po' difficile capire.

    E' corretto, tuttavia il tuo programma ha un bug: sai dirmi quale?


    P.S.: Se vedo ancora quel system("PAUSE") ti boccio.
  6. .

    Il Linguaggio C - Cicli




    Arriviamo adesso ad uno degli argomenti più importanti in termini di programmazione: i cicli. I cicli sono delle istruzioni che ripetono il codice che contengono nel loro blocco, nel loro dominio, fino a quando la condizione che viene dichiarata non viene soddisfatta. Abbiamo due tipologie di cicli: cicli con controllo della condizione in entrata e cicli con controllo in uscita. I cicli con controllo in entrata controllano la condizione prima di eseguire le istruzioni contenute nel suo blocco; i cicli con controllo in uscita eseguono prima le istruzioni e poi verificano se la condizione è soddisfatta. In entrambi i casi sta al programmatore trovare l'algoritmo adatto per il tipo di ciclo.


    while


    Il ciclo while si implenta nel codice con questa sintassi:

    while(condizione){
    /*codice*/
    }


    La condizione del ciclo while, come quella di tutti gli altri cicli, ricalca quelle del costrutto if-else. E' un tipo di ciclo con controllo in entrata, quindi il programma verificherà prima la condizione e poi eseguirà il codice. "Finché è vero questo, esegui queste istruzioni"


    do-while


    Il ciclo do-while si implenta nel codice con questa sintassi:

    do{
    /*codice*/
    }while(condizione);


    Il ciclo do-while è un tipo di ciclo con controllo in uscita, quindi il programma prima eseguirà il codice e poi verificherà la condizione. "Esegui queste istruzioni finché è vero questo."


    for


    Il ciclo for è un ciclo leggermente più complesso degli altri due. Ammette una condizione d'entrata (che molto spesso è un assegnamento di un valore ad una variabile), una per rimanere nel ciclo e una d'uscita che viene eseguita ogni volta che il ciclo si ripete.
    E' un tipo di ciclo con controllo in entrata. "Esegui questa istruzione; Finché è vero questo, esegui il codice; Infine esegui questa istruzione e ricontrolla la condizione"

    for(istruzione_d'ingresso;condizione_di_permanenza_nel_ciclo;istruzione_d'uscita){
    /*codice*/
    }


    Esercizi



    L'esercizio costante porta al successo. Sono a difficoltà crescente, soluzioni sotto spoiler.



    Esercizio 0.1 (ripresa dell'if): Si scriva un programma in C che, dati in ingresso tre numeri stampi a video rispettivamente il maggiore, il minore e la loro somma (solo if, niente cicli)
    Soluzione:

    CODICE
    #include <stdio.h>

    int main(void) {int a,b,c,somma;
           scanf("%d", &a);
           scanf("%d", &b);
           scanf("%d", &c);
           printf("---------------------------REPORT--------------------------------------\n");
           somma=a+b+c;
           if(a==b&&b==c) {printf("I numeri %d %d %d sono uguali\n", a,b,c);
                   printf("---------------------------END REPORT----------------------------------\n");}
           else {
           if (a>=b&&a>c){printf("Il massimo e': %d\n", a);}
           if (b>a&&b>c){printf("Il massimo e': %d\n", b);}
           if (c>=b&&c>a){printf("Il massimo e': %d\n", c);}
           if (a<=b&&a<c){printf("Il minimo e': %d\n", a);}
           if (b<a&&b<c){printf("Il minimo e': %d\n", b);}
           if (c<=b&&c<a){printf("Il minimo e': %d\n", c);}
           printf("La somma e': %d\n", somma);
           printf("---------------------------END REPORT----------------------------------\n");
           }
           

           getchar();
           return(0);
    }




    Esercizio 1: Si scriva un programma in C che calcoli la radice quadrata intera di un numero dato da tastiera.
    Soluzione:

    CODICE
    #include <stdio.h>

    int main(void) {int x,radx,i;
           scanf("%d", &x);
           i=0;
           for(radx=0;radx<x;i++){
                   radx=i*i;
           }
           printf("La radice quadrata (intera) e' %d", i-1);
           getchar();
           return(0);
    }



    Esercizio 2: Si scriva un programma in C che calcoli la somma di tutti i numeri che vengano inseriti da tastiera fino a che non si inserisca -1.
    Soluzione:

    CODICE
    #include <stdio.h>

    int main(void) {int n=0,a,somma;
    scanf("%d",&a);
    if(a>-1){
           for(somma=a;n>-1;somma=somma+n){
                   
                   scanf("%d",&n);
    }
           

    printf("La somma e' %d", somma+1);
    }

    else printf("La somma e' 0");
    getchar();
    return(0);
    }



    Esercizio 3: Si scriva un programma in C che, dato un numero da tastiera tra 0 e 30, stampi a video tutti i numeri pari e i numeri dispari precedenti a quel numero. Esempio: preso in input 4: i numeri pari sono: 2, i dispari sono: 1, 3.
    Soluzione:

    CODICE
    #include <stdio.h>

    int main (void){int x,i,n;

    scanf("%d", &x);
    if(x>=0&&x<=30) {
           printf("Dispari:\n");
           for(i=1;i<x;i++)
           {        
                   n=i%2;
                   if(n!=0) printf("%d\n", i);
                   
    }
           printf("Pari:\n");
           for(i=1;i<x;i++){
                   n=i%2;
                   if(n==0){printf("%d\n", i);}
           }
    }
    else printf("Non provarci neanche.\n");

    getchar();
    return 0;
    }



    Esercizio 4: Si scriva un programma in C che, dato una numero di valori in input, crei un array contenenti questi valori e chieda all'utente se stamparli a video in ordine d'inserimento o inverso. La dimensione fisca dell'array è 100.
    Soluzione:

    CODICE
    #include <stdio.h>
    #include <conio.h>
    #define N 100

    int main (void){int n, i, A[N]; char z;
    printf("Numero valori:\n");
    scanf("%d", &n);
    printf("Insert valori:\n");

    for(i=0;i<n;i++) {
           scanf("%d", &A[i]);
    }

    printf("Stampare in ordine normale o inverso?[s=stesso ordine, i=inverso]\n");

    scanf("%c", &z);

    if (z==115){
    for(i=0;i<n;i++) printf("%d\\", A[i]);
    }
    else {
    if(z==105){
    for(i=n-1;i>=0;i--) printf("%d\\", A[i]);}
    }
    getchar();
    return 0;
    }



    Esercizio 5: Si scriva un programma in C che, dato un array da tastiera, chieda all'utente di cercare un elemento, e di stampare a video la posizione nell'array e quante volte lo trova se lo trova; altrimenti deve stampare un messaggio di all'utente che comunichi che l'elemento non è stato trovato. La dimensione fisica dell'array è 100.
    Soluzione:

    CODICE
    #include <stdio.h>


    int main(void){int A[100],i,n,x,rip;
    printf("Bla bla\n");
    scanf("%d", &n);
    if (n>0&&n<=100){
    for (i=0;i<n;i++){
           scanf("%d", &A[i]);
    }}
    else printf("Dati non validi");

    printf("Elemento X:\n");
    scanf("%d", &x);
    rip=0;
    for(i=0;i<n;i++){
           if(x==A[i]) {printf("Found in: %d \n", i+1);
           rip++;}
    }
    if (rip==0) printf("Elemento non presente.\n");
    else printf("Frequenza: %d", rip);
           getchar();
           return(0);




    Esercizio 6: Si scriva un programma in C che riconosca se un numero di telefono è valido oppure no, attraverso il seguente criterio: il primo numero deve essere 0, e le due cifre successive devono essere comprese tra 1 e 4 mentre le rimanenti cifre possono essere tra 0 e 9 con l'eccezione della 4 cifra del numero che deve essere diversa da 0. Il programma deve stampare a video la conferma o meno.
    Soluzione:

    CODICE
    #include <stdio.h>

    #include <stdlib.h>

    int main (void){char tel[21];
    scanf("%­s",tel);
    int i=1;
           if(tel[0]!='0'){
               printf("\nInvalid Number.");
               getchar();
               exit(0);
               }
           
           if(tel[10]!='\0'){
               printf("\nInvalid Number.");
               getchar();
               exit(0);
               }

           while(i<=2){
               if (tel[i]!='1' || tel[i]!='2' || tel[i]!='3' || tel[i]!='4'){
                   printf("\nInvalid Number.");
                   getchar();
                   exit(0);
                   }
           i++;
           }
           
           if(tel[3]=='0'){
                  printf("\nInvalid Number.");
                  getchar();
                  exit(0);}

    printf("Valid.");
    }




    Esercizio 7: Si scriva un programma in C che calcoli, dato un capitale iniziale di un conto bancario e un tasso di interesse, quanti soldi avrà accumulato in totale trascorsi gli anni.
    N.B.: Gli interessi variano con il passare del tempo.
    Soluzione:

    CODICE
    #include <stdio.h>


    int main (void) {int ci, cf,anni,tasso,anniI, c;
           printf("Insert Capitale Iniziale, Anni e Tasso di Interesse(separati da virgola)\n");
           scanf("%d,%d,%d",&ci,&anni,&tasso);
           c=(ci*tasso)/100;
           cf = ci;
           for (anniI=0;anniI!=anni;anniI++) {
                   cf=cf+c;
                   c = (cf*tasso)/100;
           }
           printf("Hai un Capitale finale di %d", cf);
           getchar();
           return 0;
    }





    RIPRODUZIONE RISERVATA | COPYRIGHT ©Blues_Man, 2016



    Edited by Blues_Man - 30/8/2016, 00:50
  7. .
    Per usare i blocchi intendo usare le parentesi graffe { }.
    - getchar() è una funzione molto vecchia che serve a prendere in ingresso da tastiera un carattere, molto simile alla scanf() per questo, usata per mettere in pausa il programma.
    - system(); è una funzione di sistema che mette in pausa il programma mentre aspetta un char in ingresso da tastiera. E' una funzione che opera solo su Windows e su Visual Studio, non è sicura, potrebbe creare rischi per il programma che sviluppi e per il sistema. Non è un buon programmatore chi ti ha insegnato ad usarla.


    In esercizio 3, riga 14:
    - printf ("\nLe percentuali di voti favorevoli, contrari e astenuti sono ripettivamente\nil %­lf percento, il %­lf percento e il %­lf percento.\n", percfav,perccontr,percastenuti);
    Qui utilizzi l'operatore "%­lf" per stampare un double. Tuttavia, l'operatore più corretto è "%f" come se dovessi stampare un float; non è sbagliato usare %­lf, ma su piattaforme o IDE non-Windows possono creare problemi.

    Il codice è corretto: bravo ad aver implementato le percentuali come double.
  8. .
    E' un termine che ho usato impropriamente: se usi i blocchi è come se mettessi delle limitazioni al codice per quando poi il compilatore tradurrà tutto in linguaggio macchina, così da essere sicuri che quelle parta venga compilata in ordine giusto.

    Non ho mai detto che non devi usare l'if. Cerca nel thread sugli if che ho scritto, c'è un paragrafo apposta.
  9. .
    Stai eseguendo delle if annidate. Sono molto pericolose se non usi i blocchi e non definisci lo scope delle istruzioni. Ti ho leggermente modificato il codice, ma a mio parere ti stai complicando la vita. Ricorda che un else segue sempre un if, ma non è detto che dopo un if ci debba per forza andare un else. Dopo aggiungo il thread sui cicli e una sfilza di esercizi. Altra cosa: se inizializzi il main come funzione che restituisce un int, ricordati di aggiungere la return alla fine del codice: alcuni compilatori potrebbero crearti problemi; puoi sempre implementare il main direttamente senza scrivere int davanti (così: main(){...).

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

    int main ()
    {
          int a,b,c,delta;  
          double radice,soluzione1,soluzione2;
          printf ("Inserire i parametri dell'equazione di secondo grado nel seguente ordine: parametro del termine di secondo grado, parametro del termine di primo grado e termine noto.n");
          scanf ("%d%d%d", &a, &b, &c);
          if (a == 0) { soluzione1 = (-c)/(b*1.0);
                                printf ("nHai inserito i parametri di un'equazione di primo grado la cui soluzione e':n%­lfn", soluzione1);
                                  }
         
          else {
                 delta = (b*b) - (4*a*c);
                 if (delta < 0) printf ("nL'equazione e' impossibile!n");
                 else { if (delta == 0) {
                                                                  soluzione1 = (-b)/(2*a);
                                                                  printf ("nL'equazione ammette due soluzioni coincidenti pari a:n%­lf.n", soluzione1);
                                                        }
                             else {
                                   radice = sqrt (delta);
                                   soluzione1 = ((-b) + radice)/(2*a);
                                   soluzione2 = ((-b) - radice)/(2*a);
                                   printf ("nL'equazione ammette due soluzioni distinte pari a:n%­lf e %­lf.n", soluzione1, soluzione2);
                                      }
                            }
                    }
          system ("PAUSE");
    }


    Edited by Blues_Man - 25/3/2016, 14:18
  10. .
    Qui Steb
  11. .

    Il Linguaggio C - Array e Stringhe. Condizioni (if-else)

    c-programming-tutorial

    Array e Stringhe


    Fino ad ora abbiamo incontrato solo dati che possono essere implementati da tastiera, e sui quali possiamo operare singolarmente. Ma che cosa possiamo usare quando abbiamo bisogno di immagazzinare più di un dato senza doverlo considerare come variabile singola ed associargli un dominio ben definito? Semplice: usiamo un Array.
    Si da la seguente definizione:
    Un Array è la rappresentazione in termini informatici di un vettore. Può essere di tipo Numerico (int, float, double) o di tipo Stringa (char).
    Gli array in pratica sono dei vettori dove immagazziniamo dei dati: per esempio un numero di telefono sarebbe una serie di numeri di tipo int e il modo più pratico per "salvarlo" è quello di usare un array. Un array formato da lettere viene detto stringa. Vedremo due tipi di array: Array Monodimensionali e Array Bidimensionali (vedi figura sotto).
    Un array monodimensionale è un array costituito da una sola "riga" di valori (che inizialmente possono essere nulli o avere un valore random), mentre un array bidimensionale è quello che più si avvicina ad una matrice (molte vole viene usato il termine "matrix" proprio per indicare un array bidimensionale). Vediamo un esempio di inizializzazione di un array Mono dimensionale e uno bi-dimensionale:

    int A[10], B[20][10];
    (*)

    Come potete vedere dall'esempio soprastante, in seguito alla dichiarazione di tipo (int), abbiamo dato il nome all'array A e per indicare che questo è un array abbiamo utilizzato le parentesi quadre ( [ ] ). Il valore all'interno delle parentesi indica la dimensione fisica dell'array, ovvero il numero di celle di memoria occupate da quell'array. Si dice dimensione logica il numero di elementi che occupano effettivamente un array, partendo dalla cella 0 per arrivare infine alla cella n-1; un array può anche essere descritto interamente o parzialmente come vettore, attraverso la notazione A[10]={1,2,3,4,5,6,7,8,9,10}.
    Le matrici o array bidimensionali hanno la peculiarità di avere due dimensioni: se devo salvare una serie di numeri di telefono, le "colonne" indicano di quanti numeri è composto ogni numero e le "righe" indicano i diversi numeri.
    In un array bidimensionale, si utilizzano due volte le parentesi [ ]: nel caso (*), il primo numero fra parentesi indica le colonne della matrice, il secondo le righe.



    arrays



    If - Else


    L'if-else è un costrutto usato per porre delle condizioni all'interno di un algoritmo. E' analogo al costrutto grammaticale "Se è vero questo, allora fai questo (if), altrimenti fai quest'altro (else)". Ricordiamo che secondo il C, vero è letto come 1, e falso come 0. L'implementazione di una condizione avviene nel modo seguente:

    if(condizione)
    {
    codice;
    }
    else
    {
    codice;
    }


    Osservazione: in caso di istruzione singola (come una printf() ) è possibile evitare di scrivere le parentesi graffe.

    In generale, se si trova scritto "else", questo è sempre in seguito all'utilizzo di un if, ma si può evitare di scrivere un else dopo un if. Tradotto in italiano:
    - "Se si avvera questo, allora esegui queste operazioni. In caso contrario, esegui queste." (costrutto if-else completo);
    - "Se si avvera questo, allora esegui queste operazioni. In caso contrario, chissene e continua ad eseguire il codice normalmente." (costrutto solo if)
    Per definire delle condizioni bisogna utilizzare alcuni operatori:
    "==" significa "confronto". Confronta i valori delle due varibili poste ai lati degli uguali (Es. x==y)
    ">=" significa "è maggiore o uguale di".
    ">" significa "è maggiore"
    "<=" significa "è minore o uguale di"
    "<" significa "è minore di"
    "!" operatore "NOT", ovvero nega la condizione successiva
    "&&" operatore speciale "AND" che controlla la veridicità contemporanea di due condizioni affinché questa risulti vera. Per ottenere falso (0) è sufficiente che la prima delle due condizioni sia falsa (questo comportamento è detto "comportamento in corto-circuito"). E' come un sistema in matemati per intenderci.
    "||" operatore speciale "OR" a cui basta che una sola delle sue condizioni sia vera affinché la condizione dia come risultato 1.

    Appendice:
    Teorema di DeMorgan:
    "Se A è una condizione e B è una condizione diversa da A, allora la scrittura A && B è equivalente alla scrittura !A || !B ."





    RIPRODUZIONE RISERVATA | COPYRIGHT ©Blues_Man, 2016



    Edited by Blues_Man - 30/8/2016, 00:52
  12. .
    se lagga mentre giochi, è verosimilmente un problema di processore.
  13. .
    Beh dipende. Il gioco lagga di suo e quando entri in carrozza lagga ancora di più, oppure tutto fila liscio e lagga solo quando ci entri?
    Se è un problema di processore, con un i5 dovresti andare molto meglio.
  14. .
    Per rispondere alla tua domanda, ciò che hai letto in giro è vero, paypal non è accettato come pagamento su aliexpress, perché si paga con una carta di credito.
    Una carta PayPal prepagata è una carta appartenente al circuito MasterCard, sarebbe a dire che in pratica è una carta di credito MasterCard.
    Personalmente non ti consiglierei di prendere una PayPal, possono creare problemi (ed è già successo) al momento della ricarica, assieme ad altre cose; una PostePay invece (non la PostePay Evolution), è una carta di credito ricaricabile a tutti gli effetti, è come se in mano avessi una VISA, e la puoi ricaricare anche dal tabacchino (se abilitato). La VISA è solitamente più accettata nel resto del mondo come carta, mentre la MasterCard meno; almeno io faccio così e non ho mai avuto problemi di pagamento, se poi vuoi tentare sei libera di farlo.
  15. .
    1 mese o più.
828 replies since 1/9/2013
.