sabato 28 gennaio 2012

Tutorial Linguaggio C - Calcolo della Pasqua

In questo nuovo tutorial ho deciso di dedicarmi alla risoluzione di qualcosa che sia molto pratico e spesso nascosto. Mi sono dedicato al calcolo della Pasqua.
Come sappiamo la Pasqua ogni anno cade in un giorno diverso, e la data dipende in un certo senso dai cicli lunari; è inutile stare qui a spiegarvi ora l'influenza precisa dei cicli lunari sul calcolo della Pasqua e per chi volesse approfondire vi rimando alla pagina su Wikipedia dedicata a questo argomento.
In particolare in questa pagina di Wikipedia viene trattato un preciso algoritmo realizzato da Gauss che si basa sul calcolo di alcuni valori (a,b,c,d,e) e che da questi si riesce in qualche modo a ricavare la data della Pasqua.
Nel tutorial che vi mostro di seguito l'utente inserirà l'anno in cui vuole calcolare la data di Pasqua e l'applicazione farà il resto; nel tutorial tuttavia il calcolo della Pasqua è ristretto agli anni 1900 -2099 poiché il calcolo dipende anche da due valori (M e N) che variano in base alla fascia di anni che ci troviamo.
Subito dopo il video tuttavia ho postato il codice dell'applicazione migliorata, ovvero in grado di calcolare la data della Pasqua dal 1583 al 2299 il  ed è in grado anche di effettuare il calcolo più volte, ovvero una volta effettuato il calcolo, l'utente può decidere di continuare ad effettuare altri calcoli o terminare l'applicazione. In più nel codice migliorato è stato anche implementato un controllo iniziale che stabilisce se l'utente ha inserito un numero corretto.
Curiosità: il calendario da noi utilizzato è il calendario Gregoriano ha avuto origine dal calendario giuliano; quest'ultimo utilizzato sino al 1582 prevedeva uno scarto ogni anni di 11 minuti. Arrivati al 1582 lo scarto era diventato di 11 giorni e per questo motivo il Papa Gregorio XII decise di modificare il calendario per porre rimedio a questo errore. Il calendario gregoriano quindi entrò in vigore il 15 ottobre 1582; anche per questo motivo il metodo aritmetico di Gaus funziona fino al 1583.
Non vi resta di augurarvi una buona visione e di provare a testare il codice con i vostri pc.


Di seguito eccovi il codice dell'applicazione migliorata:

#include<stdio.h>
int main()
{
    int y,a,b,c,d,e,p,M,N;
    char s;
    printf("Calcolo della data in cui cade il giorno di Pasqua\n\n");
    printf("Il calcolo puo' essere effettuato su un anno a scelta tra gli anni 1583 e 2299\n\n");
    s='s';
    do{
    printf("Inserisci l'anno in cui vuoi calcolare il giorno di Pasqua nel formato YYYY: \n");
    scanf("%d",&y);
    while (y<1583 || y>2299){
        printf("\nHai inserito un valore errato\n");
        printf("\nInserisci l'anno in cui vuoi calcolare il giorno di Pasqua nel formato YYYY: \n");
        scanf("%d",&y);
    }
    if (y>=1583 && y<=1699)
    {
        M=22;
        N=2;
    }
    else if (y>=1700 && y<=1799)
    {
        M=23;
        N=3;
    }
    else if (y>=1800 && y<= 1899)
    {
        M=23;
        N=4;
    }
    else if(y>=1900 && y<=2099)
    {
        M=24;
        N=5;
    }
    else if (y>=2100 && y<=2199)
    {
        M=24;
        N=6;
    }
    else if (y>= 2200 && y<=2299)
    {
        M=25;
        N=0;
    }
    a=y%19;
    b=y%4;
    c=y%7;
    d=(19*a + M)%30;
    e=(2*b + 4*c + 6* d + N)%7;
    if ((d+e)<10)
    {
        p = d+e+22;
        printf("\nNell'anno %d la Pasqua cadra' nel giorno %d marzo.\n",y,p);
    }
    else
    {
        p=d+e-9;
        printf("\nNell'anno %d la Pasqua cadra' nel giorno %d aprile.\n\n",y,p);
    }
    scanf("%c",&s);
    printf("Per continuare premi un tasto qualsiasi, per fermare l'applicazione premi 'n' \n");
    //fflush(stdin);
    scanf("%c",&s);
    }while (s!='n');
}

sabato 21 gennaio 2012

Tutorial Linguaggio C - Risoluazione di un'equazione di secondo grado

In questo nuovo tutorial utilizzeremo alcune semplici nozioni del linguaggio C per risolvere le equazioni di secondo grado.
Per la nostra applicazione intenderemo l'applicazione in questo modo:
ax^2 + bx + c

Dove a, b, e c sono i coefficienti dell'equazione di secondo grado.
Per il calcolo delle soluzioni si calcola innanzitutto il determinante in questo modo:
b^2 - 4ac

Nel caso in cui il determinante sarà maggiore di zero si calcoleranno le due radici reali e distinte; nel caso in cui il determinante sia nullo le due radici saranno reali e uguali e nel caso in cui il determinante sia minore di zero le radici saranno complesse e si farà in modo di calcolare la parte reale e la parte immaginaria separatamente. Una volta calcolate verranno poi visualizzate insieme.
Buona visione.


Per chi dovesse testare quest'applicazione su macchine linux, vi consiglio di aggiungere "-lm" al comando gcc che serve a compilare l'applicazione poiché ci potrebbero essere problemi nella funzione sqrt.
Di seguito tutto il codice dell'applicazione:

#include
#include
#include
int main()
{
printf("Applicazione per la risoluzione delle equazioni di secondo grado\n");
printf("Inserire i tre coefficienti dell'equazione di secondo grado sotto forma di numeri interi\n");
double a,b,c,x1,x2,x1i,d,sd;
printf("Inserisci il coefficente di grado due: ");
scanf("%lf",&a);
printf("Inserisci il coefficente di grado uno: ");
scanf("%lf",&b);
printf("Inserisci il coefficente di grado zero ");
scanf("%lf",&c);
d = ( pow(b,2) - 4 * a*c);
printf("Il determinante e' pari a %f\n",d);
if (d>=0){
if (d==0)
{
x1=(-b)/(2*a);
x2=x1;
printf("X1 = %f\n",x1);
printf("X2 = %f\n",x2);
}
else
{
sd = sqrt(d);
x1= (-b +sd)/(2*a);
x2= (-b -sd)/(2*a);
printf("X1 = %f\n",x1);
printf("X2 = %f\n",x2);
}

}
else
{
sd = sqrt(-d);
x1 = (-b)/(2*a);
x1i = sd/(2*a);
printf("X1 = %f +i %f\n",x1,x1i);
printf("X2 = %f -i %f\n",x1,x1i);
}
}

Kompozer - L'HTML per tutti



Quest'oggi voglio presentarvi un software che ho trovato ultimamente in giro nel web; parlo di Kompozer.


Nella pagina di Wikipedia questo viene definito un software WYSIWYG (What you see is what you get) ovvero quello che vedi è quello che ottieni. In sostanza è un software che ci consente di realizzare delle pagine html senza preoccuparci minimamente del codice. Al momento dell'apertura del programma, la sensazione è di trovarsi dinanzi ad un normale suite da ufficio, dove troviamo tutti i normali comandi di un editor di testo, ma basterà richiedere la visualizzazione del codice per capire che quella che si sta realizzando è una pagina HTML.
In sostanza a noi ci basterà scrivere o inserire quello che vogliamo nella pagina, e Kompozer si occuperà di stilare tutto il codice necessario per realizzare una pagina HTML.
Il software è assolutamente Open Source e pare voglia essere un'alternativa al più famoso e a pagamento Adobe Dreamweaver, anche se a parer mio deve farne ancora molta molta di strada per poter essere paragonato al più blasonato Dreamweaver. Tuttavia per chi vuole iniziare a produrre qualcosa senza pagare licenze Kompozer è un ottimo programma che vi invito ad utilizzare.

venerdì 20 gennaio 2012

Tutorial n°4 sul LInguaggio di programmazione C

Dopo un bel po' di tempo rieccomi con il quarto tutorial sul lingaggio di programmazione C.
In questo tutorial viene descritta l'istruzione while ovvero il ciclo while, un'istruzione che si occupa di effettuare alcune istruzioni finché una certa condizione risulta vera. In questo caso particolare viene realizzato un piccolo contatore che sostanzialmente conta i numeri da 1 fino ad un numero scelto dall'utente.
Inoltre l'applicazione realizza anche un controllo affinché il numero inserito non sia negativo.
Dopo il video trovate il codice intero dell'applicazione.




#include
int main()
{
int i, x;
printf("In questa applicazione mostreremo un semplice contatore di numeri\n");
printf("L'applicazione iniziera' a contare partendo da 1\nL'applicazione accetta solo numeri positivi\nInserire il numero limite da contare\n");
scanf("%d",&x);
i=0;
if (x>0){
while (i i=i+1;
printf("%d\n",i);
}}
else
printf("Hai inserito un valore negativo\n");
}