• Non ci sono risultati.

Array monodimensionali in C

N/A
N/A
Protected

Academic year: 2021

Condividi "Array monodimensionali in C"

Copied!
103
0
0

Testo completo

(1)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 1

Array monodimensionali in C

In C la dichiarazione di una variabile di tipo array è composta da:

• indicazione del tipo componente

• nome dello array

• una coppia di parentesi quadre [ ], che racchiude la

• cardinalità (dimensione, un valore costante) dell’array

<tipo_componente> <nome_array> [<dimensione>];

Esempi: int VETT[300];

double vettore[120];

Dato un array con dimensione (cardinalità) N,

nel linguaggio C i suoi elementi sono indicizzati da 0 a N-1

Array monodimensionali in C

[0]

[1]

[2]

[3]

[4]

[5]

A Esempio:

double A [6];

(2)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 3

Array monodimensionali in C

funzione di accesso

Individuazione degli elementi dell’array:

<nome_array>[<indice>]

[0]

[1]

[2]

[3]

[4]

[5]

Vettore

42 18

x = 18 * 2 = 36

Vettore[3] = 42;

Esempi:

int Vettore[6];

x = Vettore[0] * 2;

Elementi di Informatica

Esempio

Analisi e Specifica

Definizione del problema: Inserire, da tastiera, i valori di tutti gli elementi di un array monodimensionale di interi, composto da 50 elementi, e visualizzare il contenuto dell’array così ottenuto

Definizione dei dati del problema:

I: il valore di ciascun elemento dell’array di numeri interi

Pi: il numero degli elementi da inserire non può essere maggiore della cardinalità dell’array

U: l’array ‘riempito’ con i valori di tutti gli elementi Pu: nessuna

un programma per riempire , con input da tastiera, completamente un array monodimensionale di interi e poi stampare i valori dei suoi elementi

(3)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 5

Esempio

Nome variabile Descrizione Tipo

VET(I) i-esimo elemento dell’array INT

Nome variabile Descrizione Tipo

VET array di interi con i valori immessi INT

Tabella delle variabili di ingresso

Tabella delle variabili di uscita

Nome variabile Descrizione Tipo

I Indice array INT

Tabella delle variabili di algoritmo

Esempio

Progettazione

Descrizione del metodo di elaborazione:

Con un ciclo ripetitivo, con il numero delle ripetizioni pari alla cardinalità dello array, si effettua la lettura da tastiera del valore di ciascun elemento dell’array a partire da quello in prima posizione e poi quelli nelle posizioni successive.

Si visualizza, usando un ciclo ripetitivo, il contenuto dell’array,

stampando ad ogni passo del ciclo il valore di ciascun elemento

contenuto nello array a partire da quello in prima posizione e poi

quelli nelle posizioni successive.

(4)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 7

#include< stdio. h>

main()

{ int Vett[50], i;

//Legge in input il valore di tutti gli elementi // dello array

for (i=0; i<50; i++)

{ printf(“Valore di Vett(%d): \ n", i);

scanf("%d", &Vett[i]);

}

// Stampa i valori di tutti gli elementi dello // array

for (i=0; i<50; i++)

printf("Vett(%d)=%d\ n", i, Vett[i]);

}

Esempio - il programma C

Elementi di Informatica

#include< stdio. h>

main() { int Vett[50], i;

// Legge in input il valore di tutti gli elementi //

dello array

for (i= 0; i< 50; i++)

{ printf("Valore di Vett(%d)\ n", i);

scanf("%d", &Vett[ i]);

}

Esempio - il programma C

i=0 => Valoredi Vett[0]=5 =>

Supponendo che l’utente, ad ogni passo del ciclo, digiti in input i valori:

5; 9; 23; 47; …….; 38

5 9 23 47

38 i=1 => Valoredi Vett[1]=9 =>

i=2 => Valoredi Vett[2]=23 =>

i=3 => Valoredi Vett[3]=47 =>

i=49 => Valoredi Vett[49]=38 =>

Vett

[0]

[1]

[2]

[3]

[4]

[5]

…...

[49]

(5)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 9

#include< stdio. h>

main() { int Vett[50], i;

………...

// Stampa I valori di tutti gli elementi dello array for (i= 0; i< 50; i++)

printf("Vett(%d)=%d\n",i, Vett[ i]);

}

Esempio - il programma C

i=0 => Vett(0)= 5

i=1 => Vett(1)= 9

i=2 => Vett(2)= 23

i=3 => Vett(3)= 47

i=49 => Vett(49)= 38 [0] 5

[1]

[2]

[3]

[4]

[5]

Vett

…...

9 23 47

38 [49]

… con la situazione in figura sanno stampati, ad ogni passo del ciclo, i valori

altri modi di inizializzare/riempire un array monodimensionale

{ …

int Vett[5] = {15, 23, 44, 2, 86};

for (i= 0; i<5; i++)

printf("Vett(%d)=%d - ", i, Vett[i]);

} Vett

[0] 15

[1]

[2]

[3]

[4]

23 44 2 86

Vett(0)=15 - Vett(1)=23 - Vett(2)=44 - Vett(3)=2 - Vett(4)=86 –

(6)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 11

{ …

int Vett[5], i;

// inizializza gli elementi del vettore con tutti // valori zero

for (i= 0; i< 5; i++) Vett[i] = 0;

}

altri modi di inizializzare/riempire un array monodimensionale ... inizializzandolo con tutti valori uguali ...

Vett

[0] 0

[1]

[2]

[3]

[4]

0 0 0 0

… con generazione random dei valori:

#include <stdio.h>

#include <stdlib.h>

#include<time.h>

main ()

{ int i, vet[10];

srand(time(NULL));

for(i=0;i<10;i++)

vet[i] = rand(); //il valore random generato da rand() è assegnato // all’elemento i-esimo dello array vet

for(i=0;i<10;i++)

printf ("v[%d] = %d \n", i, vet[i]);

}

altri modi di inizializzare/riempire un array monodimensionale

(7)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 13

Esempio

… e se non si vuole riempire tutto lo array, ma utilizzare solo alcuni elementi (tutti consecutivi, a partire dalla prima posizione)? ….

Analisi e Specifica

Definizione del problema: Inserire, in un array monodimensionale di interi composto da 50 elementi, un prefissato numero, immesso da tastiera, di valori e visualizzare il contenuto dell’array così ottenuto

Definizione dei dati del problema:

I: la quantità (riempimento) dei valori che si vogliono inserire; il valore di ciascun elemento dell’array di numeri interi

Pi: il numero degli elementi da inserire (il riempimento) non può essere maggiore della cardinalità dell’array (e deve essere maggiore di zero) U: l’array ‘riempito’ con i valori degli elementi

Pu: nessuna

Esempio

Nome variabile Descrizione Tipo

RIEMP riempimento dell’array INT VET(I) elemento dell’array INT

Nome variabile Descrizione Tipo

VET array di interi con i valori immessi INT Tabella delle variabili di ingresso

Tabella delle variabili di uscita

Nome variabile Descrizione Tipo

I indice array INT

Tabella delle variabili di algoritmo

(8)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 15

Esempio

Progettazione

Descrizione del metodo di elaborazione:

Si legge il numero di quanti elementi si vogliono inserire

(riempimento): tale numero deve essere minore della cardinalità dell’array

.

Si legge, con un ciclo, il valore di ciascun elemento dell’array.

Si visualizza il contenuto dell’array, visualizzando il valore di ciascun elemento immesso

Elementi di Informatica

#include< stdio.h>

main()

{ int vett [ 50], riemp, i;

/* legge il numero indicante quanti elementi si vogliono inserire (deve essere minore della cardinalità) */

do

{ printf(" Numero elementi che vuoi inserire\ n");

scanf("% d", &riemp);

}

while ((riemp>50)||(riemp<=0)); // riemp minore cardinalità ma maggiore di zero // Legge in input tutti gli elementi del vettore

for (i= 0; i< riemp; i++)

{ printf(" dammi elemento di posto %d\ n", i);

scanf("% d", &vett[ i]);

}

// Stampa tutti gli elementi del vettore

for (i= 0; i< riemp; i++) printf("% d\ n", vett[i]);

}

Esempio - il programma C

(9)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 17

#include< stdio.h>

main() {

int vett [ 50], riemp, i;

/* legge il numero indicante quanti elementi si vogliono inserire (deve essere minore della cardinalità) */

do

{ printf(" Numero elementi che vuoi inserire\ n");

scanf("% d", &riemp);

}

while ((riemp>50)||(riemp<=0);

Esempio - il programma C

Supponendo che sia immesso 4 come valore del riempimento si avrà

Vett

0 1 2 3 4 5

…...

49

… solo le prime 4 posizioni saranno effettivamente utilizzate

// Legge in input gli elementi del vettore for (i= 0; i< riemp; i++)

{ printf(" dammi elemento di posto %d\ n", i);

scanf("% d", &vett[ i]);

}

// Stampa il valore degli elementi inseriti nel vettore for (i= 0; i< riemp; i++) printf("% d\ n", vett[ i]);

}

Esempio - il programma C

Vett

0 1 2 3 4 5

…...

49

Supponendo che l’utente, ad ogni passo del ciclo, digiti in input i valori:

5; 36; 28; 447;

i=0 => Vett[0]=5 => 5 36 28 447 i=1 => Vett[1]=36 =>

i=2 => Vett[2]=28 =>

i=3 => Vett[3]=447 =>

(10)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 19

Esempio

… e se non si vuole riempire tutto lo array, senza però sapere prima quanti sono gli elementi da immettere , ovvero senza conoscere a priori il riempimento?

Analisi e Specifica

Definizione del problema: Inserire, in un array monodimensionale di interi composto da 50 elementi, un certo numero di valori (non noto a priori) . Visualizzare il contenuto dell’array così ottenuto e calcolare la media dei valori inseriti

Definizione dei dati del problema:

I: il valore di ciascun elemento dell’array di numeri interi

Pi: il numero degli elementi da inserire non può essere maggiore della cardinalità dell’array

U: l’array ‘riempito’ con i valori degli elementi, la media dei valori inseriti

Pu: il riempimento non può essere maggiore della cardinalità

Elementi di Informatica

Esempio

Nome variabile Descrizione Tipo

vett(i) elemento dell’array INT

Nome variabile Descrizione Tipo

vett array di interi con i valori immessi INT

media media dei valori inseriti FLOAT

Tabella delle variabili di ingresso

Tabella delle variabili di uscita

Nome variabile Descrizione Tipo

i indice array INT

sommatoria sommatoria valori inseriti INT

risp risposta utente INT

riemp riempimento dell’array INT

Tabella delle variabili di algoritmo

(11)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 21

Esempio

Progettazione

Descrizione del metodo di elaborazione:

Si inizializza a zero il riempimento dello array

Si chiede all’utente se deve essere immesso un valore nello array (Si = 1)

Se la risposta è affermativa, ed il riempimento è minore della cardinalità, si inizia un ciclo iterativo in cui:

Si legge il valore di un elemento dell’array.

Si incrementa di 1 il valore del riempimento

Si chiede all’utente se c’è un altro valore da immettere e si torna all’inizio del ciclo

Alla fine del ciclo, si visualizza il contenuto dell’array, visualizzando il valore di ciascun elemento immesso fino al valore del riempimento

Con un ciclo ripetitivo si visita lo array fino al valore del riempimento e si calcola la sommatoria dei valori inseriti. Alla fine del ciclo si calcola la media dei valori inseriti e si stampa il risultato.

#include<stdio.h>

main()

{const int CARD=50; // costante con nome con valore 50 int vett[CARD], riemp=0, i, risp, sommatoria=0;

float media;

printf(“Hai valori da inserire nello array? (1=SI)\n");

scanf("%d", &risp);

while ((risp == 1) && (riemp < CARD))

{printf("dammi elemento di posto %d\n", riemp);

scanf("%d",&vett[riemp]);

riemp++;

printf("Puoi inserire altri %d elementi \n", CARD - riemp);

printf("Vuoi immettere un altro valore? (1=SI)\n");

scanf("%d", &risp);

}

Esempio - il programma C

(12)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 23

if (riemp >= CARD)

{ printf("\n Superata la cardinalita': ");

printf("NON possibile inserire ulteriori elementi!!\n");}

if (riemp > 0)

{ printf("\n Stampa valori elementi nello array:\n");

for (i=0; i<riemp; i++) // stampa i valori dello array e // calcola anche la loro sommatoria { printf("vett[%d]=%d \n", i, vett[i]);

sommatoria = sommatoria + vett[i];

} // fine for

media = (float) sommatoria / (float) riemp;

printf(“media = %f \n", media);

} else

printf ("Array VUOTO \n");

system("Pause");

}

Elementi di Informatica

Esempio - il programma C

Vett

0 1 2 3 4 5

…...

49

Supponendo che l’utente immetta in input i seguenti 4 valori:

7; 26; 48; 66;

riemp=0 => Vett[0]=7 => 7 26 48 66 riemp=1 => Vett[1]=26 =>

riemp=2 => Vett[2]=48 =>

riemp=3 => Vett[3]=66 =>

sommatoria = 147

media = (float) sommatoria/(float) riempimento media = 147.00 / 4.00 = 36.75

(13)

Elementi di Informatica 25 Prof. G. A. Di Lucca - Univ. del Sannio

Array monodimensionali e Sottoprogrammi un esempio

… un programma per leggere e stampare i valori di array di interi

… una strutturazione in moduli (sottoprogrammi)

main

leggivet stampavet

… ciascun modulo risolve uno specifico problema ...

• In C, nell’attivazione di un sottoprogramma, lo scambio di parametri effettivi /formali di tipo array è sempre effettuato per riferimento

senza mettere lo ‘*’ prima del nome del parametro

• Per paramentri formali di tipo array monodimensionali non va indicata la cardinalità dello array

Array monodimensionali e sottoprogrammi in C

Es.

void leggivet(int Vet1[ ],int card1);

{ .... } main ()

{ const card=10;

int Vet[card],I;

leggivet(Vet,card);

}

Array monodimensionale:

non è necessario indicare la cardinalità nel parametro formale

Vet1 è passato per

riferimento anche se non c’è lo ‘*’ prima del nome !!!

(14)

Elementi di Informatica 27 Prof. G. A. Di Lucca - Univ. del Sannio

#include <stdio.h>

void leggivet(int Vet1[ ], int card1) // procedure per leggere da tatstiera i valori { int I; // di tutti gli elementi dello array

for (I=0;(I< card1); I++) // Vet1 per riferimento, card1 per valore {printf("immetti Vet[ %d ]= \n”,I) ;

scanf(“%d”, &Vet1[I]);

} }

… le due procedure per leggere e stampare i valori dello array riempito completamente ...

Array e Sottoprogrammi: un esempio

void stampavet(int Vet1[ ], int card1) // procedure per visualizzare i valori { int I; ; // di tutti gli elementi dello array

for (I=0;I<card1; I++) // Vet1 per riferimento, card1 per valore printf("Vet1[ %d ]= %d \n”, I, Vet1[I] );

}

Elementi di Informatica 28

main ()

{ const card = 50;

int Vet[card];

leggivet(Vet, card); // chiama la procedure leggivet // Vet per riferimento anche se non ... //c’è & prima del nome, card per valore stampavet(Vet, card); // chiama la procedure stampavet

// Vet per riferimento, anche se non //c’è & prima del nome, card per valore }

Array e Sottoprogrammi: un esempio

… il main che attiva le due procedure ...

(15)

Elementi di Informatica 29 Prof. G. A. Di Lucca - Univ. del Sannio

#include <stdio.h>

void leggivet(int Vet1[ ], int card1) { int I;

for (I=0;(I< card1); I++)

{printf("immetti Vet[ %d ]= \n”,I) ; scanf(“%d”, &Vet1[I]);

} }

void stampavet(int Vet1[ ], int card1) { int I; ;

for (I=0;I<card1; I++)

printf("Vet1[ %d ]= %d \n”, I, Vet1[I] );

} main ()

{ const card=50;

int Vet[card];

leggivet(Vet,card);

stampavet(Vet,card);

}

… il programma per leggere e visualizzare i valori di array di interi usando due sottoprogrammi:

• La procedure leggivet per la lettura del valore degli elementi da tastiera

• La procedure stampavet per visualizzare i valori degli elementi sul monitor

Array e Sottoprogrammi:

un esempio

#include <stdio.h>

void leggivet(int Vet1[ ],int card1); // prototipo procedure leggivet

void stampavet(int Vet1[ ],int card1); // prototipo procedure stampavet

main ()

{ const card=5;

int Vet[card];

leggivet(Vet,card);

stampavet(Vet,card);

}

… usando i prototipi di funzione

Sottoprogrammi: esempio

(16)

Elementi di Informatica 31 Prof. G. A. Di Lucca - Univ. del Sannio

#include <stdio.h>

void leggivet(int Vet1[ ], int card1) void stampavet(int Vet1[ ], int card1) main ()

{ const card=50;

int Vet[card];

leggivet(Vet,card);

stampavet(Vet,card);

}

… il programma per leggere e visualizzare i valori di array di interi usando i prototipi di leggivet e stampavet

Sottoprogrammi:

esempio

void leggivet(int Vet1[ ], int card1) { int I;

for (I=0;(I< card1); I++)

{printf("immetti Vet[ %d ]= \n”,I) ; scanf(“%d”, &Vet1[I]);

} }

void stampavet(int Vet1[ ], int card1) { int I; ;

for (I=0;I<card1; I++)

printf("Vet1[ %d ]= %d \n”, I, Vet1[I] );

}

Elementi di Informatica 32

#include <stdio.h>

#include <leggivet.h> //indica che il file leggivet.h è nella cartella di inclusione

#include <stampavet.h> // indica che il file stampavet.h è nella cartella di inclusione

main ()

{ const card=5;

int Vet[card];

leggivet(Vet,card);

stampavet(Vet,card);

}

… un programma per leggere e visualizzare i valori di un array di interi

… usando file separati per ciascun modulo ...

Sottoprogrammi: esempio

(17)

Elementi di Informatica 33 Prof. G. A. Di Lucca - Univ. del Sannio

#include <stdio.h>

void leggivet(int Vet1[ ],int card1) { int I;

for (I=0;(I< card1); I++)

{printf("immetti Vet[ %d ]= \n”,I) ; scanf(“%d”, &Vet1[I]);

} }

#include <stdio.h>

void stampavet(int Vet1[ ],int card1) { int I;

for (I=0;I<card1; I++)

printf("Vet1[ %d ]= %d \n”, I, Vet1[I] );

}

Le procedure leggivet e stampavet sono memorizzate, rispettivamente, nei file

leggivet.h stampavet.h

nella cartella include della cartella contenente il compilatore

… i due sottoprogrammi … in file separati ….

Sottoprogrammi: qualche esempio

void leggivet_Parz(int Vet1[ ],int card1, int *riemp1) { int I;

do

{ printf("immetti riemp\n");

scanf("%d",&(*riemp1));

}

while(*riemp1>card1);

for (I=0;(I<*riemp1); I++)

{ printf("immetti Vet[ %d ]= \n",I) ; scanf("%d", &Vet1[I]);

} }

... nel caso di riempimento parziale (con valore del riempimento letto nel sottoprogramma) ...

... bisogna aggiungere il parametro riemp1 passato per riferimento indicante il riempimento

Array e Sottoprogrammi:

un esempio

(18)

Elementi di Informatica 35 Prof. G. A. Di Lucca - Univ. del Sannio

#include <stdio.h>

void leggivet_Parz(int Vet1[ ],int card1, int *riemp1) { int I;

do

{ printf("immetti riemp\n");

scanf("%d",&(*riemp1));

}

while(*riemp1>card1);

for (I=0;(I<*riemp1); I++)

{ printf("immetti Vet[ %d ]= \n",I) ; scanf("%d", &Vet1[I]);

} }

void stampavet(int Vet1[ ], int card1) { int I;

for (I=0;I<card1; I++)

printf("Vet1[ %d ]= %d \n”, I, Vet1[I] );

}

Il programma completo per lettura e visualizzazione dei valori nel caso di riempimento parziale dello array ...

main ()

{ const card=50;

int Vet[card], riemp;

leggivet_Parz(Vet,card, &riemp);

stampavet(Vet, riemp);

}

Elementi di Informatica

(19)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 37

Il tipo stringa di caratteri

• Una stringa di caratteri è una sequenza di caratteri ASCII, atti a rappresentare una parola, una frase, un testo

• E’ un tipo strutturato costruito con l’operatore sequenza

• Una delle operazioni tipiche sulle stringhe di caratteri è la

concatenazione di due o più stringhe, tipicamente indicata con il simbolo // (in LDP).

Es.

A=“calcolatore “ B=“elettronico”

C=A//B=“calcolatore elettronico”

Altre tipiche operazioni sono la comparazione, la copia, calcolo lunghezza, ...

Il tipo stringa di caratteri in C

• In C una stringa di caratteri è realizzata con un array monodimensionale di caratteri ASCII terminante con il carattere null => ‘\0’

La dichiarazione di una variabile di tipo stringa è uguale a quella di un array monodimensionale :

char <nome variabile>[<lunghezza stringa>];

• Esempio: la frase “Questa è una stringa”

costituisce un array di 21 caratteri:

Q u e s t a è u n a s t r i n g a \0

elemento posizione [0] ‘Q’

elemento posizione [1] ‘u’

elemento posizione [2] ‘e’

... ....

elemento posizione [19] ‘g’

elemento posizione [19] ‘a’

elemento posizione [20] ‘\0’

(20)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 39

Per immettere una stringa da tastiera si può usare scanf () con il formato %s

… ma l’istruzione scanf (….) non consente di immettere spazi, ovvero legge tutti i caratteri consecutivi immessi fino al primo carattere spazio

se all’esecuzione dell’istruzione scanf("%s", &b);

viene digitata la stringa:

CORSO DI ELEMENTI DI INFORMATICA la variabile b conterrà solo la stringa “CORSO”

tutti gli altri caratteri dopo lo spazio non sono considerati

… uso della funzione di input getchar()

… una considerazione ...

Elementi di Informatica

/* Legge e stampa una stringa di max 100 caratteri*/

#include <stdio.h>

main()

{const int cardinalita=101; //può contenere max 100 caratteri + ‘\0’

char c, linea[cardinalita];

int i ; i=0;

printf("Immetti stringa \n");

c=getchar(); /* funzione getchar() per input da tastiera, legge un solo carattere */

while ( i< (cardinalita - 1) && (c != ‘\n’)) // ciclo per l’input dei { linea[i] = c; // caratteri della stringa

c=getchar(); // nello array linea[]

i++; // l’input termina quando } // si batte ‘return’

(21)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 41

// aggiunge carattere di fine stringa linea[i++] = ‘\0’;

i = 0;

// Stampa stringa immessa printf(" Stringa Immessa \n");

while ( linea[i] != ‘\0’) { printf(“%c” , linea[i]);

i++;

} }

Definizione del problema: Calcolare quanti caratteri cifra sono in una stringa di max 80 caratteri, leggendo la stringa da tastiera

Definizione dei dati del problema:

I: la stringa, ovvero gli elementi dello array che la contiene Pi: la stringa ha al massimo 80 caratteri

U: la stringa immessa; il numero totale di caratteri cifra contenuti nella stringa

Pu: il numero totale di caratteri cifra non può essere negativo

Esempio

(22)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 43

Esempio

Nome variabile Descrizione Tipo

linea array monomensionale di char CHAR

Nome variabile Descrizione Tipo

numero contatore dei caratteri cifra nella stringa INT Tabella delle variabili di ingresso

Tabella delle variabili di uscita

Nome variabile Descrizione Tipo

I indici INT

c singolo carattere della stringa CHAR

Tabella delle variabili di algoritmo

Elementi di Informatica

Esempio

… strutturando in moduli ...

main

LeggiLinea ContaDigit

Calcolare quanti caratteri cifra sono in una stringa di max 80 caratteri, leggendo la stringa da tastiera

(23)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 45

Esempio

/* Conta i caratteri numerici in una stringa */

#include <stdio.h>

void LeggiLinea(char ln[], int max);

void ContaDigit(char ln2[], int *volte);

main()

{ const int card=81;

char linea[card];

int numero;

printf(“Inserisci una linea di testo\n”);

LeggiLinea(linea,card);

ContaDigit(linea, &numero);

printf(“La linea %s contiene %d numerici”, linea, numero);

}

Esempio

/*Legge una linea in input */

void LeggiLinea(char ln[], int max) { int i = 0;

char c;

while (((c = getchar()) != '\n') && (i < max)) {ln[i] = c;

i++;

} ln[i] = '\0';

}

(24)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 47

Esempio

/*Conta il numero di cifre numeriche */

void ContaDigit(char ln2[], int *volte) {int i;

*volte = 0;

i=0;

while (ln2[i] != '\0')

{if ((ln2[i] >= '0') && (ln2[i] <= '9'))

*volte = *volte + 1;

i++;

} }

Elementi di Informatica

/* Stampa i caratteri di una stringa e la loro codifica ASCII */

main()

{ char stringa[] = “Questa è una stringa\0”; // cardinalità pari a 21 (20 + ‘\0’)

int X, i = 0;

while ( stringa[i] != ‘\0’ )

{ printf ( “carattere=%c -- ASCII = %d\n”,stringa[i], stringa[i] );

i++;

}

X = 10 + ‘a’; // nell’espressione ‘a’ è uguale a 97 (suo codice ASCII )

printf(“X = %d\n”, X); // sarà stampato X = 107 }

In C i caratteri sono rappresentati secondo il loro codice ASCII, ovvero sono considerati come degli interi, ed è possibile trattarli come tali ...

... ad esempio sommarli a numeri interi o conoscere il loro codice ASCII ...

(25)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 49

Carattere = Q -- ASCII = 81 Carattere = u -- ASCII = 117 Carattere = e -- ASCII = 101 Carattere = s -- ASCII = 115 Carattere = t -- ASCII = 116 Carattere = a -- ASCII = 97 .

. .

Carattere = g -- ASCII = 103 Carattere = a -- ASCII = 97

Output del programma

X = 107

Definizione del problema: Calcolare l’occorrenza di ciascun carattere alfabetico minuscolo in una frase lunga al massimo 120 caratteri Definizione dei dati del problema:

I: le lettere della frase, ovvero gli elementi delll’array che la contiene

Pi: la frase deve avere al massimo 120 caratteri

U: per ciascun carattere minuscolo componente la frase il numero di volte che esso compare nella frase

Pu: il numero di volte che ciascun carattere minuscolo compare nella frase è non negativo

Esempio

(26)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 51

Esempio

Nome variabile Descrizione Tipo

frase array monomensionale di char CHAR

Nome variabile Descrizione Tipo

count array con le occorrenze di ogni carattere INT Tabella delle variabili di ingresso

Tabella delle variabili di uscita

Nome variabile Descrizione Tipo

i indice INT

ch singolo carattere della frase CHAR

Tabella delle variabili di algoritmo

Elementi di Informatica

Descrizione del metodo di elaborazione:

Si dichiara lo array frase[ ], per la stringa di caratteri, e lo si inizializza con una frase nella dichiarazione stessa

Si considera un altro array monodimensionale di nome count[ ] di cardinalità 26, pari al numero delle lettere minuscole.

Si inizializzano a zero gli elementi di count[ ].

Ciascun elemento dell’array count[ ] corrisponde ad una lettera secondo l’ordine alfabetico (primo elemento in posizione 0  lettera ‘a’, ultimo elemento in posizione 25  lettera ‘z’).

La corrispondenza tra i caratteri minuscoli e le posizioni dell’array è fatta sulla base del codice ASCII dei caratteri: basterà sottrarre al codice ASCII di ciascun carattere il valore 97 (codice ASCII di ‘a’).

Si scandisce completamente la stringa in frase [] e ad ogni occorrenza di ciascun carattere minuscolo si incrementa di 1 il corrispondente elemento dell’array count[].

Si stampa il contenuto di count[].

(27)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 53

/* Calcola la frequenza dei caratteri minuscoli in una frase*/

#include <stdio.h>

main()

{ char ch, frase[ ] = "Questa Frase Contiene Molti Caratteri, MAX 120\0"; int count[26], i ;

for (i=0; i<26;i++)

count[i]=0; // azzera elementi di count[ ]

i=0;

while (frase[i]!='\0')

{ if ((frase[i]>='a') && (frase[i]<='z')) //se carattere è una lettera minuscola

{ch=frase[i];

count[ch - 'a']++; /* incrementa di 1 il valoredell’elemento di count corrispondente al carattere ch in frase */

} i++;

}

printf("Frequenza lettere minuscole: \n");

for (i=0; i<26;i++)

// stampa ogni lettera minuscola e la sua frequenza nella frase printf("%c %4i \n", 'a'+i, count[i]);

system("Pause");

}

4 0 0 0 5 0 0 0 3 0 0 1 0 2 2 0 0 3 2 5 1 0 0 0 0 0

a b c d e f g h i j k l m n o p q r s t u v w x y z

“Questa Frase Contiene Molti Caratteri, MAX 120”

Lo array count[] risultante:

a=4 b=0

e=5

s=2

… sul video visualizzato:

(28)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 55

Operazioni su stringhe

• Concatenazione di due o più stringhe

• Copia di una stringa in un’altra

• Calcolo della lunghezza di una stringa

• Confronto fra due stringhe (es. verificare se due stringhe sono uguali)

• …

Elementi di Informatica

Operazioni su stringhe

• Concatenazione di due o più stringhe

…. Implica unire i due (o più) array costituenti le stringhe …

A = C A L C O L A T O R E \0

E L E T T R O N I C O \0

B =

A = A // B =

C A L C O L A T O R E E L E T T R O N I C O \0

…. Un (sotto)programma per accodare lo array B allo array A …

…. cardinalità e riempimento di A devono poter consentire la concatenazione ….

i=0; j=0;

while (A[i] != ‘\0’) i++; // si posiziona alla fine di A while (B[j] != ‘\0’)

{ A[i] = B[j];

i++;

j++;}

A[i] = ‘\0’;

(29)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 57

Operazioni su stringhe

• Copia di una stringa in un’altra

…. Implica assegnare a ciascun elemento dello array in cui si copia l’altra stringa il valore del corrispondente elemento dello array originale A =

B =

… copia A in B

…. Un (sotto)programma per copiare lo array B alloarray A …

…. cardinalità e riempimento di B devono poter consentire la copia ….

… cioè B = A

i=0;

while (A[i] != ‘\0’) { B[i] = A[i];

i++ ;}

C A L C O L A T O R E \0

E L E T T R O N I C O \0

C A L C O L A T O R E \0

B =

Operazioni su stringhe

• Calcolo della lunghezza di una stringa

…. Contare quanti caratteri formano la stringa A =

… Un (sotto)programma per contare quanti caratteri formano la stringa A … cont = 0;

while (A[cont] != ‘\0’)

cont ++ ; // il valore di cont sarà uguale // al numero di caratteri contenuti // in A

C A L C O L A T O R E E L E T T R O N I C O \0

D = Lungh (A);

(30)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 59

Operazioni su stringhe

• Confronto fra due stringhe (es. verificare se due stringhe sono uguali)

…. Verificare se gli elementi, nei due array formanti le due stringhe, nelle posizioni con lo stesso indice sono tutti uguali

… Un (sotto)programma per … i = 0; uguale = 1;

while ((A[i] != ‘\0’) && uguale)

{ uguale = (uguale && (A[i] = = B[i]));

i++;

}…

if (uguale == 1) printf(“stringhe uguali”);

else printf(“stringhe NON uguali”);

A = C A L C O L A T O R E \0

C A L C O L A T O R E \0

B =

uguale = (A == B);

Elementi di Informatica

Funzioni per le operazioni su stringhe

• Il linguaggio C dispone di funzioni, predefinite, per eseguire operazioni di stringhe, quali :

– strcat(strg1,strg2) concatenazione di stringhe – strcpy(strg1,strg2) copia la stringa strg2 in strg1 – strlen(strg1) lunghezza di una stringa

– strcmp(strg1,strg2) confronto fra due stringhe

– Ritorna il valore 0 se le due stringhe sono uguali, un valore < 0 se strg1 è minore di strg2, un valore >0 se strg1 è maggiore di strg2

• Dette funzioni fanno parte della libreria standard <string.h>

• Esistono altre funzioni di manipolazione di stringhe, quelle indicate sono le più usate in ambiente C.

(31)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 61

Funzioni per la manipolazione di stringhe: Esempi

#include <stdio.h>

#include <string.h> // libreria standard funzioni stringa

main ()

{const char a[]=", Evviva";

char c[200],b[20],f;

printf("Immetti stringa b \n");

scanf("%s",&b);

printf("Immetti stringa c \n");

scanf("\n%s",&c);

printf("B = %s -- C = %s\n",b,c);

if (strcmp(b,c)==0) // confronta le strighe b e c

printf ("B e C sono uguali \n");

else printf("B e C NON sono uguali\n");

strcat(b,c); //concatena b e c con stringa risultante in b

printf("\n CONCATENAZIONE B e C \n B = %s \n",b);

printf("\n C= %s \n",c);

strcat(c,a); //concatena c e a con stringa risultante in c

printf("\n CONCATENA C e A in C:\nC = %s \n",c);

printf("\n A=%s \n",a);

// stampa lunghezza stringa b

printf("\n lunghezza stringa B= %d \n",strlen(b));

strcpy(b,a); //copia stringa a in stringa b

printf("\n Copia A in B\n A =%s -- B = %s\n",a,b);

system("Pause");

}

Funzioni per la manipolazione di stringhe: Esempi

(32)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 63

strcat(b,c);

Il valore di B è cambiato Il valore di C è immutato

strcat(c,a);

Il valore di C è cambiato Il valore di A è immutato

strcpy(b,a);

A e B ora sono uguali strcmp(b,c) Compara stringhe

strlen(b;

N,ro caratteri in B

Elementi di Informatica

Array Bidimensionali

tipo array Bidimensionale= cartesiano(T 1,T 2, … , T n) con T 1 = T 2 =...= T n = T

Tipo T = cartesiano (q1, q2, …, qm) q1=q2= ….. =qm

…. Ovvero un array bidimensionale è un array in cui ciascun elemento è a sua volta un array

… array tutti della stessa dimensione e tipo

(33)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 65

Array Bidimensionali

… un modello interpretativo ...

A

Nome array

1 2 3 4 5 6

1 2 3 4 5 6 7

Valori dell’indice (posizione componente)

Array Bidimensionali

… la posizione di ciascun elemento è individuata da 2 indici …

… il primo indice, indica la riga …

… il secondo indice, indica la colonna ...

1 2 3 4 5 6

1 2 3 4 5

[1,1] [1,2] [1,3] [1,4] [1,5]

[2,1] [2,2] [2,3] [2,4] [2,5]

[6,1] [6,2] [6,3] [6,4] [6,5]

A[4,2]

(34)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 67

Array Bidimensionali

… la posizione di ciascun elemento è individuata da 2 indici …

1 2 3 4 5 6

1 2 3 4 5

23 47 63 96 8

27 66 23 44 567

42 28 34 125 47

A[4,2] = 57

57

A[6,3] = 34

… il primo indice, indica la riga …

… il secondo indice, indica la colonna ...

… ciascuna posizione conterrà un (solo) valore …

Elementi di Informatica

Array Bidimensionali

Parametri caratterizzanti un array bidimensionale:

• Strutturali:

• Nome dello array

• Tipo componente

• Cardinalità di riga: numero di righe costituenti lo array

• Cardinalità di colonna: numero di colonne costituenti lo

array

(35)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 69

Array Bidimensionali

Parametri caratterizzanti un array bidimensionale:

• di utilizzo:

• Indice di riga: appartenete ad un tipo ordinato

• Indice di colonna: appartenete ad un tipo ordinato

la coppia ordinata [indice di riga, indice di colonna] indica la posizione di un elemento nello array bidimensionale.

Gli indici possono essere espressi tramite:

• una costante (es. A[4,2], elemento in quarta riga e seconda colonna)

• una variabile (es. A[I, J], elemento in riga i-esima e colonna j- esima)

• una espressione (es. A[c+d*e, k],

(elemento dello array nella riga corrispondente al valore di c+d*e, e k-esima colonna)

Array Bidimensionali

Parametri caratterizzanti un array bidimensionale:

• di utilizzo:

• Riempimento: numero di elementi effettivamente utilizzati

• Riempimento di riga

• Riempimento di colonna

N.B. non confondere Riempimento con Cardinalità Deve sempre essere :

indice riga Cardinalità riga

indice colonna Cardinalità colonna Riempimento riga Cardinalità riga

Riempimento colonna Cardinalità colonna

(36)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 71

Array Bidimensionali

La dichiarazione di una variabile di tipo array bidimensionale è fatta specificando:

• tipo componente

• nome dello array (nome della variabile)

• cardinalità di riga e di colonna dello array (racchiusa tra parentesi quadre)

<tipo> <nome_array_bidim> [<cardinalità_riga] [cardinalità_colonna>]

Es.:

int A[10] [15];

float Mat[7] [22];

Elementi di Informatica

Array Multidimensionali

… generalizzando opportunamente ….

… un array di array di array di array …. Quante sono le dimensioni

… tutti array dello stesso tipo …

… per ciascuna dimensione, tutti array con stessa cardinalità …

… posizione individuata mediante tanti indici quanti sono le dimensioni

… un indice per ciascuna dimensione ...

<tipo><nome_array_multidim>[<card_dim1] [card_dim2>] …[card_dimK]

Es.:

int A[10] [15] [20];

float Multi [7] [22] [30] [45];

(37)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 73

Array Bidimensionali in C

In C la dichiarazione di una variabile di tipo array è composta da:

• indicazione del tipo componente

• nome dello array

• due coppie di parentesi quadre [ ] [ ], che racchiudono le

• cardinalità di riga

• cardinalità di colonna

<tipo_componente> <nome_array> [<card_riga>] [<card_colonna>];

Esempio:

double Matrice [10] [15];

dichiara una matrice, di nome Matrice. di numeri reali con10 righe e 15 colonne

Array Bidimensionali in C

Attenzione: gli indici di riga e di colonna iniziano da 0 (zero) int A[6][5]

dichiara una matrice di nome A con 6 righe e 5 colonne Gli indici di riga vanno da 0 a 5, quelli di colonna da 0 a 4

0 1 2 3 4 5

0 1 2 3 4

[0,0] [0,1] [0,2] [0,3] [0,4]

[1,0] [1,1] [1,2] [1,3] [1,4]

[5,0] [5,1] [5,2] [5,3] [5,4]

A[3][1]

Ciascun indice in una coppia di [ ] separata

Indice

di riga Indice di colonna

(38)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 75

Array Bidimensionali in C

… la posizione di ciascun elemento è individuata da 2 indici …

0 1 2 3 4 5

0 1 2 3 4

23 47 63 96 8

27 66 23 44 567

42 28 34 125 47

A[3][1] = 57

57

A[5][2] = 34

… il primo indice, indica la riga …

… il secondo indice, indica la colonna ...

… ciascuna posizione conterrà un solo valore …

Elementi di Informatica

Esempio - Array Bidimensionale

Definizione del problema: Inserire i valori degli elementi di un array bidimensionale di interi, composto da 6 righe e 5 colonne, e visualizzare il contenuto dell’array così ottenuto, per righe

Definizione dei dati del problema:

I: il valore di ciascun elemento dello array bidimensionale Pi: il numero degli elementi da inserire non può essere maggiore della cardinalità dell’array

U: l’array bidimensionale ‘riempito’ con i valori degli elementi

Pu: array bidimensionale non ‘vuoto’

(39)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 77

Esempio

Nome variabile Descrizione Tipo

MAT(I,J) elemento dell’array INT

Nome variabile Descrizione Tipo

MAT array di interi con i valori immessi INT Tabella delle variabili di ingresso

Tabella delle variabili di uscita

Esempio - Array Bidimensionale

Descrizione del metodo di elaborazione:

Con due cicli ripetitivi innestati, si legge il valore di ciascun elemento da immettere, immettendo i valori per riga. Quindi, il ciclo più esterno controlla l’indice di riga, quello più interno l’indice di colonna.

Con due cicli ripetitivi innestati, si visualizza il contenuto

dell’array, visualizzando i valori immessi per righe. Anche in

qiesto caso il ciclo più esterno controlla l’indice di riga, quello

più interno l’indice di colonna.

(40)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 79

Esempio - il programma C

#include<stdio.h>

main()

{ const cardR=6, cardC=5;

// uso di costanti con nome per le cardinalità (numero)di riga e colonna

int MAT[cardR] [cardC], i,j;

// Legge in input tutti gli elementi della matrice

for (i= 0; i< cardR; i++) //scandisce le righe for (j= 0; j< cardC; j++) //scandisce le colonne

{ printf(" dammi el. (%d , %d) di MAT\n", i,j);

scanf("% d", &MAT[i][j]);

}

// Visualizza tutti gli elementi della matrice

for (i= 0; i< cardR; i++) //scandisce le righe for (j= 0; j< cardC; j++) //scandisce le colonne

printf(”[%d, %d] = % d\n",i,j, MAT[i][j]);

}

Elementi di Informatica

0 1 2 3 4 5

0 1 2 3 4

23 47 63 96 8

27 66 23 44 567

42 28 34 125 47

for (i= 0; i< cardR; i++) for (j= 0; j< cardC; j++) {

printf(" dammi el. (%d , %d) di MAT\n", i,j);

scanf("% d", &MAT[i][j]);

}

i = 0

j = 0 => MAT[0,0]= 23

...

...

84 ... ...

... ...

...

j = 1 => MAT[0,1]= 47 j = 2 => MAT[0,2]= 63 j = 3 => MAT[0,3]= 96 j = 4 => MAT[0,4]= 8 i = 1

j = 0 => MAT[1,0]= 27 j = 1 => MAT[1,1]= 66 j = 2 => MAT[1,2]= 23 j = 3 => MAT[1,3]= 44 j = 4 => MAT[1,4]= 567 i = 2

j = 0 => MAT[2,0]= 84

… … i = 5

j = 0 => MAT[5,0]= 42

j = 4 => MAT[5,4]= 47 j = 1 => MAT[5,1]= 28 j = 2 => MAT[5,2]= 34 j = 3 => MAT[5,3]= 125

(41)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 81

0 1 2 3 4 5

0 1 2 3 4

23 47 63 96 8

27 66 23 44 567

42 28 34 125 47

for (i= 0; i< cardR; i++) for (j= 0; j< cardC; j++)

printf(”[%d, %d] = % d\n",i,j, MAT[i][j]);

i = 0

j = 0 => [0,0]= 23

...

...

84 ... ...

... ...

...

j = 1 => [0,1]= 47 j = 2 => [0,2]= 63 j = 3 => [0,3]= 96 j = 4 => [0,4]= 8 i = 1

j = 0 => [1,0]= 27 j = 1 => [1,1]= 66 j = 2 => [1,2]= 23 j = 3 => [1,3]= 44 j = 4 => [1,4]= 567 i = 2

j = 0 => [2,0]= 84

… … i = 5

j = 0 => [5,0]= 42

j = 4 => [5,4]= 47 j = 1 => [5,1]= 28 j = 2 => [5,2]= 34 j = 3 => [5,3]= 125

#include <stdio.h>

main ()

{const cardriga=3, cardcol=4;

int Vett[]={3,6,12,45}; // la cardinalità è 4, uguale al numero di valori che lo valorizzano int MAT[cardriga] [cardcol] = {{1,7, 22, 33}, {2,1, 44, 55}, {66, 77, 88,5}}

// i valori sono indicati secondo le righe

int I, J;

// Stampa valori elementi dell’array Vett

for(I=0;I<4;I++) printf(“Vett[%d]=%d \n”, I, Vett[i]);

// Stampa valori elementi dell’array MAT for (I=0; I<cardriga, I++)

{ for (J=0; J<cardcol, J++) printf(“ %d – “, MAT[i][j]);

printf(“\n”);

}

Esempio

... valorizzare un array quando lo si dichiara ...

(42)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 83

Esempio

Definizione del problema:

Trovare il valore massimo ed il valore minimo tra gli elementi di un array bidimensionale, di 5 righe e 7 colonne, ed indicarne la posizione (riga e colonna). Riempire lo array con valori letti da tastiera. Se i valori massimo e minimo sono presenti più volte nello array, indicare solo le posizioni della prima volta che essi sono trovati).

Definizione della specifica del programma:

I: l’array bidimensionale di numeri interi; il valore di ciascun elemento Pi: nessuna

U: il valore e la posizione dell’elemento con valore massimo e con valore minimo

Pu: nessuna

Elementi di Informatica

Esempio

Nome variabile Descrizione Tipo

MAT array bidimensionale di interi INT MAT(I,J) elemento dell’array INT

Tabella delle variabili di ingresso

Nome variabile Descrizione Tipo

MAX Elemento con il valore del massimo INT RIGAMAX Riga dove è contenuto MAX INT COLMAX Colonna dove è contenuto MAX INT MIN Elemento con il valore del minimo INT RIGAMIN Riga dove è contenuto MIN INT COLMIN Colonna dove è contenuto MIN INT Tabella delle variabili di uscita

(43)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 85

Esempio

Descrizione del metodo di elaborazione:

Con due cicli ripetitivi innestati, si legge da tastiera il valore di ciascun elemento da immettere, immettendo i valori per riga. Quindi, il ciclo più esterno controlla l’indice di riga, quello più interno l’indice di colonna.

Si pone il massimo/minimo pari al primo elemento dell’array (elemento posto nella prima riga e prima colonna).

Si effettua una visita completa della matrice, scandendola per riga e colonne:

si verifica se ciascun altro elemento dell’array è superiore al Massimo, o inferiore al minimo, fissato in tal caso si aggiorna il valore del

massimo/minimo e della posizione in cui esso si trova nella matrice Si stampano i valori del minimo e del Massimo e le relative posizioni in cui essi sono stati trovati

#include <stdio.h>

main ()

{ // Trova Max_e Min in_array_bidimensionale;

const cardriga=5, cardcol=7;

int MAT[cardriga] [cardcol], I, J, MAX, MIN, RIGAMAX, COLMAX, RIGAMIN, COLMIN;

// Riempimento array for (I=0; I<cardriga; I++)

for (J=0; J<cardcol; J++)

{ printf(" dammi el. (%d , %d) di MAT\n", i,j);

scanf("% d", &MAT[i][j]);

}

Esempio - il programma

(44)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 87

// Stampa array

for (I=0; I<cardriga; I++) for (J=0; J<cardcol; J++)

printf("MAT[%d, %d] = %d \n", I, J, MAT[I][J]);

Esempio - il programma

Elementi di Informatica

// Cerca il valore massimo e minimo nello array bidimensionale RIGAMAX=0; COLMAX=0; MAX = MAT[0][0];

RIGAMIN=0; COLMIN=0; MIN = MAT[0][0];

for (I=0; I<cardriga; I++) for (J=0; J<cardcol; J++)

{ if (MAT[I][J]>MAX) { MAX=MAT[I][J];

RIGAMAX=I; COLMAX=J;

} else

if (MAT[I][J]<MIN) { MIN=MAT[I][J];

RIGAMIN=I; COLMIN=J;

} }

(45)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 89

// Stampa il risultato

printf (“massimo = %d in riga %d e colonna %d \n", MAX, RIGAMAX, COLMAX);

printf (“il minimo= %d in riga %d e colonna %d \n", MIN, RIGAMIN, COLMIN);

}

Array e sottoprogrammi in C

• In C, nell’attivazione di un sottoprogramma lo scambio di parametri (effettivi – formali) di tipo array è sempre effettuato per riferimento

• Nel caso di array monodimensionali non va indicata per il paramentro formale la cardinalità dello array

• Nel caso di array bidimensionali va indicata per il paramentro formale la cardinalità della seconda dimensione dello array (cioè il numero delle colonne)

• Nel caso di array multi-dimensionali vanno indicate per il paramentro formale tutte le cardinalità eccetto quella della prima dimensione dello array

(46)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 91

Array e sottoprogrammi in C

Es.

void leggivet(int Vet1[],int card1);

main ()

{ const card=10;

int Vet[card],I;

leggivet(Vet,card); }

Es.

void leggimat(int Mat1[][4],int cardr, int cardc) main ()

{ const cardr=2; const cardc=4;

int Mat[cardr][cardc],I,J;

leggimat(Mat,cardr,cardc);}

Array monodimensionale: non è necessario indicare la cardinalità nel parametro formale

Array bi-dimensionale:

deve essere indicata la cardinalità della seconda dimensione (n.ro di colonne) nel relativo parametro formale

Elementi di Informatica

Array e sottoprogrammi in C

Es.

void leggimat(int Mat1[][4],int cardr, int cardc) main ()

{ const cardr=2; const cardc=4;

int Mat[cardr][cardc],I,J;

leggimat(Mat,cardr,cardc);}

… quando il numero di colonne è diverso da quello indicato (nell’esempio è 4), il sottoprogramma deve essere modificato e ricompilato … !!

… qualche considerazione …

Riferimenti

Documenti correlati

– Soluzione: si passa alla funzione un ulteriore parametro di tipo array, che viene “riempito” con il risultato.. E i parametri di

● Se gli estremi degli scaglioni e/o le percentuali cambiano, devo cambiare solo l'array e non il programma che fa la ricerca!.. Algoritmi su

¨  L’espressione a[i] restituisce il valore della variabile con indice i, quindi il tipo di questa espressione è il tipo base dell'array. Accesso agli elementi di

codice strumento prezzo FLT flauto 2500 VLN violino 8000. $inv_art

dove numero_elementi deve essere o un valore intero, o un’espressione costante oppure una variabile che sia stata però istanziata prima della definizione dell'array; ad esempio,

I: il valore di ciascun elemento dello array di numeri interi Pi: il numero degli elementi da inserire non può essere maggiore della cardinalità dell’array.. U: lo array

I: il valore di ciascun elemento dello array di numeri interi Pi: il numero degli elementi da inserire non può essere maggiore della cardinalità dell’array.. U: lo array

Scrivere un metodo che, dati due array a e b di interi, restituisce true se tutti gli elementi dell’array b compaiono nell’array a nello stesso ordine in cui compaiono in b,