Qui iSpazio con il Feed su iPod Touch, iPad Italia e recensioni App Store.
Benvenuto in iBlog!
Benvenuto in iBlog ,
iBlog è un blog per interessi di Mac OS X e anche iPhone OS , se se hai interessi da da condividere sul blog , scrivi un ' articolo e poi noi lo inseriremo su iBlog!
Pagine
martedì 10 agosto 2010
Avanzate di linguaggio C parte 2: Operazione sui puntatori
Oggi parleremo di come sommare due puntatori anche se vi sa strano....ma cerchiamo di capire che cosa andremo a fare
Queste somme permettono di cambiare indirizzo a mio piacimento avendo un intero controllo sulla memoria!
Non vi sembra fantastica come idea! A me pare di si e ora vi insegno come fare:
Introduciamo prima di tutto l' operatore sizeof(T) ove T è un parametro noto.
Che fa? Semplice assegnatogli un parametro esso ne calcola la lunghezza dando un valore size_t che è un unsigned int ovvero un intero senza segno.
Ma a che serve questa cosa che ha poca utilità visto che uno sa che un parametro int occupa 4 bit di memoria il double 8 ecc...?
Semplice per capire di quanto si sposterà l' elemento visto che quando salvo un dato a differenza dei documenti sono salvati in bit contigui e non li spacca all interno della memoria.
Ora diamo le formule affinchè anche voi capiate quel che ho detto (attenzione NON sono esempi ma formule che spiegano cosa fa l' operazione sulla vostra memoria)
La somma si può fare fra un valore ( chiamiamolo x ) e un puntatore ( chiamiamolo p ) entrambi di dimensione size_t (NOTARE che devono essere uguali).
Ecco che succede se li sommo:
x+p = (indirizzo puntato da p)+ (size_t*x)
Capite che come si somma si sottrae o no?
Volete un ESEMPIO non è vero? Eccolo:
1 int a= 100, *b=&a;
2 int *c= b+5;
Dove è c? Credo che a nessuno verrà lo stesso risultato perche dipende dalla vostra memoria ma so che c è spostato di 20 bit da a.
Trucchetto se volete spostare solo di uno: è più furbo farlo con gli operatori ++ (incremento) e -- (decremento)
Ora passiamo alle somme che si possono fare fra 2 puntatori che chiamiamo per carenza di fantasia p e q (ATTENZIONE devono avere la stessa dimensione size_t)
Ecco che succede se li sommo:
p+q = (indirizzo puntato da p+indirizzo puntato da q) / size_t
Capite che come si somma si sottrae cambiando + con - anche nella formula.
Volete anche qui un ESEMPIO non è vero? Eccolo:
1 int a=100, b=200;
2 int p= &a , q=&b;
3 int *c= p-q
Dove è c? Credo che a nessuno verrà lo stesso risultato perche dipende dalla vostra memoria ma ora nn so nulla eccetto il fatto che dividerò la somma dei due indirizzi per 4.
Ecco per oggi è tutto e alla prossima lezione
Ciao
Luca
mercoledì 4 agosto 2010
Avanzate di linguaggio C- parte 1: Introduzione all' uso dei puntatori
Ma ora iniziamo a parlare dei puntatori.
Che cos' è un puntatore?
Un puntatore è una variabile che rappresenta un indirizzo di memoria
A che può servire?
Beh...serve tantissimo visto che modificano il valore della variabile a cui puntano senza usare nuova memoria per salvare il risultato e vi assicuro che se fate 1000 calcoli su interi salvare 4000 byte di spazio è molto meglio di usare per salvare nuovi risultati!
Ecco un argomentazione valida per usarli...
Ma come si dichiara e si usa?
Semplice si fa così
(tipo) * (nome del puntatore)
ESEMPIO int * x significa che ho detto che ci sarà un puntatore intero di nome x.
Ora ci chiediamo a che cosa lo facciamo puntare?
Ad una variabile che ha un indirizzo di memoria visto che il puntatore non viene salvato in memoria (ed ecco altro risparmio sulla memoria) e si fa nel seguente modo
(nome puntatore) = & (nome variabile)
ESEMPIO (int b) x= & b detto che b è intero x lo può puntare, facile no?
Ora credo che gradiate un esempio quindi eccolo qua:
1 int a=100, b=50 , *p;
(NOTATE CHE posso dichiarare variabili e puntatori assieme)
2 p= &a
(ORA p punta a d a variabile)
3 int c= *p
(ATTENTI con * posso anche dare ad una variabile il valore puntato dal puntatore così, quindi c = valore a = 100)
4 p = &b
(Cambio il posto su cui puntare)
5 int f = *p + 10
(f vale b+10 perchè p ORA punta b)
6 *p=*p+5
(ATTENTI così modifico p si ma anche b!!! Ora b vale 55!!!!)
7 int *q= &a
(SI può inizializzare e dichiarare assieme)
8 int d = *p * *q
(Provate e ricavare il valore di d o con la logica o scrivendo del codice di contorno che potete creare da soli)
Tutto qui.
Facile vero? Se volete sapere che fa 8 fatemelo sapere e io pubblico la soluzione....
Bene ultima stuzzicante possibilità: Sapere a che indirizzo sta la variabile puntata da b con qst riga di codice
printf("b=%d , indirizzo: %p\n", b, &b)
Sarà un numero esadecimale ovvero in base 16 e niente paura se viene "19BF" visto che oltre le cifre 1-9 ci sta A=10,B=11,C=12,D=13,E=14,F=15.
Bene per ora è veramente tutto alla prossima per sapere ancora dei puntatori.
Luca
sabato 31 luglio 2010
Introduzione al linguaggio C- parte 7: I numeri pseudo-casuali
L' argomento di oggi è la creazione di numeri pseudo-casuali (l' aggettivo pseudo sta per il semplice fatto che se si conosce lo stato iniziale del generatore posso dedurre i numeri della sequenza).
Ora scopriamo come facciamo a crearli in C.
Inizialmente bisogna inizializare un seme di partenza tramite il codice
1 void srand (unsigned int seed)
dove void indica il tipo di srand che è l' inizializzatore del seme che sarà un intero senza segno( =unsigned int seed)
Quindi void è una funzione senza un tipo precisato che chiede un parametro intero senza segno.
Poi bisogna generare l' elemento successivo con il seguente codice
1 int rand ( )
ovvero tramite una funzione rand intera con i parametri.
Si può inoltre definire una funzione RAND_MAX che definisce l' intervallo.
Comunque io vi suggerisco riportandovi il mio programma il modo più facile di crearli commentando le righe non note
(N.B. sta a voi introdurre nel programma le librerie stdio.h , stdlib.h che è la libreria per i numeri casuali e time.h che è la libreria del tempo perchè il modo più semplice di creare numeri casuali sta in questa libreria come vedremo in seguito)
1 int rand_limit (int k)
2 {
3 srand (time ());
4 return rand ( ) % k;
5 }
6 int main ( )
7 {
8 int g;
9 g = rand_limit (90);
10 printf ("%d\n", g);
11 return 0;
12 }
Bene ora commentiamo:
RIGA 1. Ho definito una funzione per creare i numeri pseudo-casuali;
RIGA 3: Ho inizializzato come seme della srand: il tempo , tramite la libreria time.h ecco perchè serve! e come detto prima io so che parte da zero e posso capire che numeri vengono fuori.... anche se farò di meglio di seguito
RIGA 4: Ecco il migliramento: Faccio ritornare il numero che creo ma uso la divisione in modulo per k (in pratica prendo il numero lo divido per k e il resto è la cosidetta divisione in modulo che si indica con % E NON CON / che è la divisione). Questo mi assicura un numero intero fra 0 e k-1(ma di seguito k sarà uguale a 90)
Il resto penso sia chiaro, se mi avete sempre seguito capendomi ;altrimenti rileggete i miei articoli sennò farò un articolo suppletivo
Bene ora posso dirvi che siete dei programmatori inizializzati di C, quindi le Introduzioni sono finite; ma chi volesse saperne di più non si disperi; perchè da questo momento scriverò gli articoli di avanzate di C e chi volesse seguirmi ancora può leggere i nuovi articoli con tale nome e saperne di più su questo stupendo e importantissimo linguaggio.
Quindi al prossimo articolo; per chi lo voglia
Luca
venerdì 30 luglio 2010
iPhone 4 in Italia !
martedì 27 luglio 2010
Twitter!
lunedì 26 luglio 2010
Nonciclopedia su Microsoft
“Un computer senza Windows è come una torta al cioccolato senza senape ” |
- - Qualcuno su Windows
“Tastiera non rilevata. Premere un tasto per continuare.” |
- - Microsoft Windows su un errore paradossale
“Mouse non rilevato. Cliccare OK per continuare.” |
- - Microsoft Windows su altro errore paradossale
“Impossibile collegarsi ad Internet. Cercare soluzioni online?” |
- - Microsoft Windows su ennesimo errore paradossale
- Speriamo vi sia piaciuto questo angolo di comicità.
iPhone secondo nonciclopedia
La custodia magica[modifica]
Come tutti sappiamo, l'Iphone 4, dopo anni di progettazione ed essere uscito sul mercato ad prezzo irrisorio[citazione necessaria], è risultato avere un ridicolo[citazione necessaria] problema di ricezione. Per sopperire a ciò, Mamma Apple ha partorito una delle sue classiche genialate che mai ti aspetteresti: la Custodia Magica™.
Fatta al 90% di silicone puro e al 10% di amore Apple, tale custodia è il prodotto del futuro, risolverà qualsiasi problema di antenna.
Inoltre si irridono anche i difetti di iPhone 3G,che potrete vedere nella foto a questo link:http://images3.wikia.nocookie.net/__cb20081013000955/nonciclopedia/images/9/9a/Iphone-pietra.jpg