Il 0% ha trovato utile questo documento (0 voti)
7 visualizzazioni23 pagine

5 ArrayStringhe

C array & stringhe

Caricato da

antonellodelre
Copyright
© All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
7 visualizzazioni23 pagine

5 ArrayStringhe

C array & stringhe

Caricato da

antonellodelre
Copyright
© All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd

Dati strutturati: gli array

Prof.
Prof. Salvatore
Cesario Venticinque
Vincenzo Angelino
Prof. Massimiliano Rak

Cesario Vincenzo
AngelinoVenticinque
Salvatore 1
Tipi strutturati

Composizione di tipi semplici (char, int, long,
oat, ...)

Es.

Sequenza

Record

Stack

Lista

Coda

Albero

Grafo ...
Array

Insieme omogeneo di dati

Variabile di tipo array è:

strutturata

può memorizzare più valori tutti dello stesso tipo.

composizione sequenza

Ogni elemento dell'array:

contiene un unico dato

è individuato da un numero progressivo, detto indice, che speci0ca la
posizione all’interno del vettore

l’indice può assumere valori in [0,n-1]

La base dell’array è sempre zero.

La dimensione massima n dell'array è detta lunghezza, o dimensione
Array
Dichiarazione array

Il tipo dei dati contenuti nel vettore
viene detto tipo del vettore,

Per la dichiarazione di una variabile
array devono essere de0niti

il nome

il tipo

a dimensione

Es:

int a[6]
Utilizzo array
int a[6]

l’indice può quindi assumere i valori: 0, 1, 2, 3, 4,5.


Le istruzioni:

a[0] = 71;
a[1] = 4;
assegnano al primo elemento del vettore a il valore 71 e al secondo 4.

a[3] = b;
copia il valore della variabile b al quarto elemento

N.B a[3] e b sono due diverse variabili che contengono lo stesso valore, ma I cui
contenuti possono cambiare indipendentemente nelle seguenti istruzioni
Inizializzazione array
Per inizializzare l'array a tempo di compilazione:
valori tra parentesi gra@e, separati da una virgola:

int voti[6] = {11, 18, 7, 15, 21, 9};

Nel seguente caso il compilatore deduce la


dimensione

int voti[] = {11, 18, 7, 15, 21, 9};


Inizializzazione
/* Inizializzazione dell'array */
for(i=0; i<6; i++) {
printf("Inser. intero: ");
scanf("%d", &a[i]);
}
Stampa vettore
/* Stampa dell'array */
for(i=0; i<6; i++) {
printf("%d ", a[i]);
}
printf("\n");
Architettura hardware
a a[0]
int a[6]
a[0]

Il tipo de0nisce quanti byte occorrono per a[0]
memorizzare ogni elemento
a[0]

Il nome è l'indirizzo del primo elemento a[1]

Spazio di memoria necessario: sizof(int) * 6 a[1]
a[1]

a[3] indica il valore all'indirizzo di memoria
a+3*sizeof(int) a[1]
a[2]

&a[3] è l'indirizzo del quarto elemento:
a+3*sizeof(int) a[2]
a[2]
a[2]
a[3]
a[3]
[...]
In una memoria a 32 bit
a[0] a[0] a[0] a[0]

a[1] a[1] a[1] a[1]

a[2] a[2] a[2] a[2]

a[3] a[3] a[3] a[3]

a[4] a[4] a[4] a[4]

a[5] a[5] a[5] a[5]

Altri dati Altri dati Altri dati Altri dati

Istruzione Istruzione Istruzione Istruzione

Istruzione Istruzione Istruzione Istruzione

Il compilatore deve conoscere la dimensione massima per


riservare spazio in memoria !!!
Riempimento

Il riempimento:

Rappresenta lo spazio e@ettivamente utilizzato

è numero di elementi inserito nell'array

<= dimensione massima

A di@erenza della dimensione può cambiare durante l'esecuzione

#define n 6

int main()
{
float v[n];
int r,i;
do{
printf(“inserisci riempimento (<=%d): ”,n);
scanf(“%d”,&r);
}while((r<0) || (r>n));
for(i=0;i<r;i++)
scanf(“%f”,&v[i]);
}
Somma degli elementi
#de0ne n 10
int main(){
int v[n],r,i,somma;
// lettura riempimento e elementi
somma = 0;
for(i=0;i<r;i++)
somma = somma+v[i];
printf(“somma=%d”,somma);
}
Errore Array
#include<stdio.h>
int main(){
int v[20];
int i = 0;
int n;

while(i<n)
printf("%d\n",v[i++]);
}

Quanto vale n?
Se n troppo grande : Segmentation Fault!!!!
Altri algoritmi


Ricerca elemento

Ricerca posizione elemento

Massimo

Minimo

Media

Ordinamento !!!

Inversione

Prodotto scalare 2 vettori
Stringhe

Una stringa è un vettore di caratteri

Dichiarazione:
char s[20]

Dichiarazione e inizializzazione:
char s1[20] =”macchina”
char s2[] = “macchina”

N.B.:

La stringa s1:

Dimensione massima: 20

Riempimento: 9

La stringa s2:

Dimensione massima 9
Stampa di una stringa
#include <stdio.h>

int main()
{
char s1[] = "macchina";
char s2[20] = "macchina";

printf("%s\n",s1);
printf("%s\n",s2);

%s stampa tutti I caratteri del vettore fino


al carattere di fine stringa: byte 0
Lettura Stringa
#include <stdio.h>

int main()
{
char s[20];

prtinf(“inserisci stringa\n”);
scanf("%s",s);

}
Lunghezza di una stringa
#include <stdio.h>

int main()
{
char s[20] = "macchina";
int len=0;
while(s[len]!='\0')
len++;
printf("len=%d",len);
}
Problema ?????
Lunghezza di una stringa
#include <stdio.h>

int main()
{
char s[20] = "macchina";
int len=0;
while((len<20) && (s[len]!='\0'))
len++;
if(len<20)
printf("len=%d",len);
else
printf(“0ne stringa non trovato\n”);
}

Problema risolto
Lettura Stringa
scanf legge 0no al primo spazio

Utilizzare gets per leggere stringhe con spazi:

char s[20];
gets(s);

C'è un problema ...


fgets

fgets è una funzione pensata per i 0le


Può essere utilizzata per leggere da tastiera

Occorre speci0care quanti caratteri leggere

Esempio:
char s[5]
fgets(s,5,stdin);
printf("%s",s)
Esercizi stringhe

Confronto stringhe

Sottostringa

Concatenazione stringhe

Conteggio parole

Eliminazione spazi

Maiuscole2Minuscole

Potrebbero piacerti anche