Sei sulla pagina 1di 30

10/26/2011

Esercizi

Esercizio 1
Scrivere un programma in C che legge un vettore di interi di dimensione fissata e inverte il vettore e lo stampa.

10/26/2011

#include <stdio.h> #define LUNG 5 int main() { int vett[LUNG],i,temp; /*usata per scambiare due elementi del vettore */ printf("Inserire un vettore di interi di dimensione %d\n", LUNG); for (i = 0; i < LUNG; i++) scanf("%d", &vett[i]); /* Inverti il vettore senza l'utilizzo di un vettore ausiliario */ for (i = 0; i < LUNG/2; i++) { temp = vett[i]; vett[i] = vett[LUNG-1-i]; vett[LUNG-1-i] = temp; } /* Stampa il vettore, che ora e' invertito */ for (i = 0; i < LUNG; i++) printf(%d %d\n", i, vett[i]); return 0; }

Esercizio 2
Scrivere un programma, completo di opportune dichiarazioni di variabili, che: 1. Legge in input da tastiera gli elementi di una matrice di interi di dimensione NxM (N e M costanti prefissate) 2. Stampa la matrice 3. Cerca, se esiste, la prima occorrenza dello 0 e dice in che posizione (riga, colonna) stata trovata
4

10/26/2011

#include <stdio.h> #define N 3 #define M 4 int main() { int i, j, si=0, m[N][M]; for (i = 0; i < N; i++) { for (j = 0; j < M; j++) { printf(\nInserisci un elemento della matrice: ); scanf(%d,&m[i][j]); } } printf("\nLa matrice inserita e': \n"); for (i = 0; i < N; i++) { for (j = 0; j < M; j++) printf(" %d ", m[i][j]); printf("\n"); } /* Cerca lo 0 */ for (i = 0; i < N && si==0; i++) { for (j = 0; j < M && si==0; j++) if (m[i][j]==0) { si=1; printf ("\n trovato lo 0 in riga %d e colonna %d",i,j); } } if (si==0) printf("\nLo 0 non e' stato trovato"); return 0; }

Esercizio 3
Scrivere un programma C che legge due stringhe da tastiera, le concatena in ununica stringa e stampa la stringa cos generata N.B.: nella generazione della stringa risultato si faccia attenzione allinserimento in coda del carattere di terminazione

10/26/2011

#include <stdio.h> #define LUNG 200 int main () { char str1[LUNG],str2[LUNG],strTot[2*LUNG]; int i,j; printf(Inserisci la prima stringa:\n); scanf(%s,str1); printf(Inserisci la seconda stringa:\n); scanf(%s,str2); for (i=0;str1[i]!='\0';i++) strTot[i]=str1[i]; /* i rappresenta il numero di caratteri copiati da str1 a strTot */ for (j=0;str2[j]!='\0';j++) /* accodo str2 a str1 */ strTot[i+j]=str2[j]; strTot[i+j]='\0'; printf("\n%s",strTot); return 0; }

Esercizio 4
Sviluppare un programma che acquisisce in input una stringa e stabilisce se la sequenza palindroma oppure no (per esempio, "ada" palindroma perch si legge allo stesso modo sia da destra che da sinistra)

10/26/2011

#include<stdio.h> #include<string.h> #define MAX_DIM 100 int main() { char stringa[MAX_DIM]; int contatore=0, i, quanti=0 ; scanf("%s,stringa); contatore=strlen(stringa)-1; for(i=0;i<contatore/2;i++) if(stringa[i]==stringa[contatore-i]) quanti++; if(quanti==contatore/2) printf(Palindromo); else printf(Non Palindromo); return 0; }

#include<stdio.h> #define MAX_DIM 100 int main() { char stringa[MAX_DIM]; int contatore=0, i ; scanf("%s,stringa); for (i=0;stringa[i]!='\0';i++) { contatore++; } contatore--; i=0; while(stringa[i]==stringa[contatore-i] && i<contatore-i) { i++; } if(i>=contatore-i) printf("la stringa e' palindroma"); else printf("la stringa non e' palindroma"); return 0; }

10/26/2011

Esercizio 5
Si codifichi un programma C che legge due stringhe che rappresentano due parole e stampa un valore intero, da interpretarsi come valore di verit, che indica se le parole sono anagrammi, cio se possibile ottenere luna dallaltra tramite permutazione delle loro lettere. Ad esempio le parole POLENTA e PENTOLA sono anagrammi. Si presti attenzione al fatto che parole come TAPPO e PATTO non sono anagrammi, anche se ogni lettera delluna contenuta nellaltra.
11

int main() { char a[100], b[100]; int len, contA, contB, i, k, si=1; printf(); scanf(%s,a); scanf(%s,b); len=strlen(a); if ( len != strlen(b) ) si=0; for ( i = 0 ; i < len ; i++ ) {//per ogni a[i] in a (escluso il \0) contA = 0; contB = 0; for ( k = 0 ; k < len ; k++ ) {//scandisco le stringhe if ( a[k] == a[i] ) ++contA; //conto le occorrenze di a[i] in a if ( b[k] == a[i] ) ++contB; //e le occorrenze di a[i] in b } if ( contA != contB ) si = 0; } printf(%d\n,si); // se corrispondono tutti -> 1 return 0; }
12

10/26/2011

Esercizio 6
Definiamo il grado minimo g e il grado massimo G di una parola P rispettivamente come il minimo e il massimo numero di occorrenze delle lettere di P in P. Ad esempio:
ISTANBUL g=1, G=1 ( tutte le lettere della parola compaiono in essa una e una sola volta ) BOSFORO g=1, G=3 ( B, S, F, R compaiono una sola volta, O compare tre volte ) GALATASARAY g=1, G=5 ( G, L, T, S, R, Y compaiono una sola volta, A compare cinque volte ) MARMARA g=2, G=3 ( M e R compaiono due volte, A compare tre volte ) G e g valgono convenzionalmente 0 per la parola vuota (cio per una parola priva di caratteri).

Si scriva un programma C che legge una stringa di lunghezza generica che rappresenta P, calcola G e g, e li stampa
13

int main () { char p[100]; int g, G, i, j, count, lun; printf(); scanf(%s,p); lun=strlen(p); g = lun; G = 0; for ( i=0; i<lun; i++ ) { count = 0; for ( j=0; j<lun; j++ ) { if (p[i]==p[j]) { count++; } } if ( count < g ) g = count; if ( count > G ) G = count; } printf(g=%d,G=%d,g,G); return 0; }
14

10/26/2011

Esercizio 7
Dato un array quotX di 365 valori interi, che rappresentano le quotazioni nellanno solare corrente del titolo azionario X, si vuole realizzare un programma in linguaggio C in grado di:
Inizializzare il contenuto dellarray quotX con valori letti da standard input che devono essere compresi tra 1 e 100 (estremi inclusi), scartando eventuali valori fuori dallintervallo. Salvare in una opportuna/e variabile di tipo struttura (di cui si chiede anche la definizione del tipo) la quotazione massima e il primo giorno (espresso come posizione nellarray) in cui tale quotazione stata memorizzata Determinare e stampare a video il numero di periodi dellanno in cui il titolo si mantenuto costante (ossia, quante volte la medesima quotazione si presentata in giorni successivi).
Ad esempio, se le quotazioni fossero 10 10 15 14 12 12 12 8 9 9 12 12.. il titolo avrebbe avuto 4 periodi di quotazione costante.

#include <stdio.h> #define MAX 365 typedef struct { int massimo; int giorno; } quotMax; int main () { int quot[MAX], cont=0,i,inZona; quotMax qm; qm.massimo = -1; qm.giorno = -1; do { printf("Inserire l'elemento numero %d: ", cont);//o cont+1 scanf("%d", &quot[cont]); if (quot[cont] >=0 && quot[cont] <=100) { cont++; } else printf("Inserimento non valido!\n"); } while(cont<MAX);

10/26/2011

for (cont=0;cont<MAX;cont++) { if (quot[cont] > qm.massimo) { qm.massimo = quot[cont]; qm.giorno = cont;//o cont+1, dipenda da come si interpreta il testo } } printf("Il valore massimo e': %d\n", qm.massimo); printf("Il valore massimo si e' presentato in data: %d\n", qm.giorno);

//conto periodi costanti cont = 0; inZona = 0; for (i=1; i< MAX; i++) { if (quot[i] == quot[i-1] && !inZona) { cont++; inZona=1; } else if (quot[i] != quot[i-1]) { inZona=0; } } printf(Numero di zone con valore costante: %d\n", cont); return 0; }

10/26/2011

Esercizio 8
Dato un array quotX di 365 valori interi, che rappresentano le quotazioni nellanno solare corrente del titolo azionario X, si vuole realizzare un programma in linguaggio C in grado di:
Inizializzare il contenuto dellarray quotX con valori letti da standard input che devono essere compresi tra 1 e 100 (estremi inclusi), scartando eventuali valori fuori dallintervallo. Salvare in una opportuna/e variabile di tipo struttura (di cui si chiede anche la definizione del tipo) la quotazione massima e il primo giorno (espresso come posizione nellarray) in cui tale quotazione stata memorizzata Determinare e stampare a video il numero di periodi dellanno in cui il titolo si mantenuto costante (ossia, quante volte la medesima quotazione si presentata in giorni successivi) (2 punti).
Ad esempio, se le quotazioni fossero 10 10 15 14 12 12 12 8 9 9 12 12.. il titolo avrebbe avuto 4 periodi di quotazione costante.

#include <stdio.h> #define MAX 365 typedef struct { int massimo; int giorno; } quotMax; int main () { int quot[MAX], cont=0,i,inZona; quotMax qm; qm.massimo = -1; qm.giorno = -1; do { printf("Inserire l'elemento numero %d: ", cont);//o cont+1 scanf("%d", &quot[cont]); if (quot[cont] >=0 && quot[cont] <=100) { cont++; } else printf("Inserimento non valido!\n"); } while(cont<MAX);

10

10/26/2011

for (cont=0;cont<MAX;cont++) { if (quot[cont] > qm.massimo) { qm.massimo = quot[cont]; qm.giorno = cont;//o cont+1, dipenda da come si interpreta il testo } } printf("Il valore massimo e': %d\n", qm.massimo); printf("Il valore massimo si e' presentato in data: %d\n", qm.giorno);

//conto periodi costanti cont = 0; inZona = 0; for (i=1; i< MAX; i++) { if (quot[i] == quot[i-1] && !inZona) { cont++; inZona=1; } else if (quot[i] != quot[i-1]) { inZona=0; } } printf(Numero di zone con valore costante: %d\n", cont); return 0; }

11

10/26/2011

Esercizio 9
Si vogliono definire tipi di dato per rappresentare i dati sui motoveicoli mantenuti da un Pubblico Registro Automobilistico (PRA) : 1. Il tipo dati Motoveicolo rappresenta i dati di un motoveicolo. Questi dati si compongono di:
targa del motoveicolo (7 lettere) marca del motoveicolo (massimo 15 caratteri), modello (massimo 20 caratteri), cilindrata (in cc), potenza (in kW), categoria (motorino, scooter, motocicletta, motocarro).

23

Esercizio (cont)
2. Il tipo dati Proprietario rappresenta i dati di una persona (il proprietario del motoveicolo):
nome (massimo 30 caratteri), cognome (massimo 40 caratteri), codice fiscale (16 caratteri).

3. Il tipo dati VocePRA rappresenta una singola voce nel registro automobilistico; una voce si compone di 2 elementi: i dati del proprietario del motoveicolo ed i dati del motoveicolo stesso.

24

12

10/26/2011

Esercizio (cont)
4. Il tipo dati PRA rappresenta un tipo adatto a contenere i dati di un PRA. Questo tipo di dati un elenco di voci del PRA (si suppone che un PRA non possa contenere pi di 10.000 elementi), pi un contatore che dice quante voci sono effettivamente presenti nel PRA.

25

Soluzione
typedef enum {motorino, scooter, motocicletta, motocarro} Categoria; typedef struct { char targa[7] ; char marca[15] ; char modello[20] ; int cilindrata; float potenza; Categoria categoria; } Motoveicolo;

26

13

10/26/2011

Soluzione
typedef struct { char nome[30]; char cognome[40]; char codice_fiscale[16]; } Proprietario; typedef struct { Motoveicolo motoveicolo; Proprietario proprietario; } VocePRA;

27

Soluzione
typedef struct { VocePRA elementi[10000]; int n_elementi; } PRA;

28

14

10/26/2011

Esercizio 10
Scrivere un programma che svolga le seguenti operazioni:
Acquisisca informazioni relative a caratteristiche fisiche di 10 persone. Ogni informazione composta da peso, altezza ed et. Terminata la fase di acquisizione, stampi sullo schermo le informazioni relative a tutte le persone per le quali il valore dell'et <= 20.
29

#include <stdio.h> #define MAX_PERS 10 #define MAX_ETA 20 typedef struct { int peso; int alt; int eta; } dati; int main() { dati arch[MAX_PERS]; int i; for(i=0;i<MAX_PERS;i++) { printf("Altezza: "); scanf("%d", &(arch[i].alt)); printf("\nPeso: "); scanf("%d", &(arch[i].peso)); printf("\nEta': "); scanf("%d", &(arch[i].eta)); } printf("\n persone con eta' <= %d", MAX_ETA"); for (i=0; i<MAX_PERS; i++) if(arch[i].eta <= MAX_ETA) printf("\n %d, %d, %d", arch[i].alt,arch[i].peso,arch[i].eta); return 0; 30 }

15

10/26/2011

Esercizio (cont.)
Modificare ora il programma precedente facendo in modo che gli elementi dellarray vengano ordinati in base allet in ordine crescente

31

#include <stdio.h> #define MAX_PERS 10 #define MAX_ETA 20 typedef struct { int peso; int alt; int eta; } dati; int main() { dati arch[MAX_PERS],temp; int i, j; for(i=0;i<MAX_PERS;i++) { printf("Altezza: "); scanf("%d", &(arch[i].alt)); printf("\nPeso: "); scanf("%d", &(arch[i].peso)); printf("\nEta': "); scanf("%d", &(arch[i].eta)); }

for(i=0;i<MAX_PERS-1;i++) { for(j=0;j<MAX_PERS-1-i;j++) { if(arch[j].eta > arch[j+1].eta) { temp=arch[j+1]; arch[j+1]=arch[j]; arch[j]=temp } } }


printf("\n persone con eta' <= %d", MAX_ETA);
for (i=0; i<MAX_PERS; i++) if(arch[i].eta <= MAX_ETA) printf("\n %d, %d, %d", arch[i].alt,arch[i].peso,arch[i].eta); return 0; }

32

16

10/26/2011

Esercizio 11
Si definisca il tipo Corso, che permetta di rappresentare informazioni relative a corsi di lingue. In particolare, per ogni corso necessario rappresentare i seguenti dati:
Lingua: una sequenza di 10 caratteri; Livello: un intero; NumeroIscritti: un intero; NomeInsegnante: una sequenza di 15 caratteri; Linsieme di Studenti (al massimo 10). Ogni studente un dato a sua volta strutturato, composto da:
NomeStudente (sequenza di 10 caratteri) CognomeStudente (sequenza di 10 caratteri) Et (numero intero)

Si dichiari inoltre la variabile ScuolaLingue, in grado di rappresentare linsieme dei corsi di una certa scuola. Una scuola raggruppa al massimo 30 corsi.
33

#define maxclassi 30 #define maxstud 30 typedef struct { char nomestud[10]; char cognstud[10]; int eta; } Studente; typedef struct { char lingua[10] ; int liv; int numiscritti; char nomeinsegn[15]; Studente alunno [maxstud]; } Classe ; Classe ScuolaLingue[maxclassi];
34

17

10/26/2011

Esercizio (cont.)
Scrivere in linguaggio C la parte di algoritmo per calcolare let media degli studenti iscritti ai corsi di lingua inglese (supponendo di aver inizializzato la variabile ScuolaLingue con le informazioni relative a 30 corsi).

35

#include <stdio.h> #define maxclassi 4 /* invece di 30 */ #define maxstud 2 /* invece di 10 */ typedef struct { char nomestud[10]; char cognstud[10]; int eta; }Studente; typedef struct { char lingua[10] ; int liv; int numiscritti; char nomeinsegn[15]; Studente alunno [maxstud]; } Classe ;
36

18

10/26/2011

/* inserimento dati di 4 classi */ Classe ScuolaLingue[maxclassi]= {{"inglese",1,2,"maestr1","alice","ferrari",8,"luca", "bianchi",8,}, {"inglese",2,2,"maestr2","guzzi","tommi",18,"gialli", "fede",18}, {"inglese",1,2,"maestr3","innoi","ldddd",10,"sssss", "ddddd",10}, {"spagnolo",2,2,"maestr4","ducai","ddddd",5, "wwwww","qqqqq",5}};

37

int main () { int i,j,cont=0; float somma=0; char linIng[]="inglese"; /* stampo tutti gli alunni di tutte le classi con eta' */ for (i=0;i<maxclassi;i++) for(j=0;j<maxstud;j++) printf("\n %s %s eta':%d", ScuolaLingue[i].alunno[j].nomestud, ScuolaLingue[i].alunno[j].cognstud, ScuolaLingue[i].alunno[j].eta);

38

19

10/26/2011

for (i=0;i<maxclassi;i++) { if(strcmp(linIng,ScuolaLingue[i].lingua)==0){ for(j=0;j<ScuolaLingue[i].numiscritti;j++) { cont++; somma+=ScuolaLingue[i].alunno[j].eta; } } } if (cont>0) printf("\nl'eta' media e':%f", somma/cont); else printf(\nnessun corso di %s",linIng); return 0; }
39

Esercizio 12
Le seguenti dichiarazioni definiscono tipi di dati che descrivono i candidati per lassunzione in unazienda.
typedef enum {italiano, inglese, spagnolo, francese, tedesco, cinese} lingua; typedef char stringa[20]; typedef struct { lingua l; int livello; /* numero da 1 a 5 con 1=basso 5=alto */ } linguaParlata; typedef struct { stringa nome, cognome, diploma, laurea; linguaParlata lingue[5]; int nLauree; int anniEsperienza; } persona; /* definizioni delle variabili */ persona persone[40]; persona personeScelte[40];
40

20

10/26/2011

Si scriva un frammento di codice, che includa eventualmente anche le dichiarazioni di ulteriori variabili e tipi, che copi nella parte iniziale del vettore personeScelte (senza lasciare buchi) le persone che parlano inglese con un livello superiore a 3 oppure soddisfano entrambi i seguenti requisiti: hanno non meno di una laurea e un numero di anni di esperienza non inferiore a tre.

41

int iPersone, iPersoneScel, iLingue; iPersoneScel=0; for(iPersone=0; iPersone<40; iPersone++) { if (persone[iPersone].nLauree>=1 && persone[iPersone].anniEsperienza>=3){ personeScelte[iPersoneScel]=persone[iPersone]; iPersoneScel++; } else for (iLingue=0; iLingue<5; iLingue++) if(persone[iPersone].lingue[iLingue].l==inglese && persone[iPersone].lingue[iLingue].livello >3) { personeScelte[iPersoneScel]=persone[iPersone]; iPersoneScel++; } }

42

21

10/26/2011

Esercizio 13
Si scriva un programma C che legga due serie di dati e li memorizzi in due vettori di strutture. Nel primo vettore M (di dimensione 3) vengono memorizzati dati del tipo: <matricola, nome, cognome>. Si noti che la matricola identifica univocamente uno studente e che non ci sono due strutture che contengono lo stesso numero di matricola. Nel secondo vettore V (di dimensione 7) vengono memorizzati dati del tipo: <matricola, esame, voto>. Possono esserci pi record con lo stesso numero di matricola che denotano diversi esami fatti dallo stesso studente. Si scriva un programma che legga i dati in ingresso e li inserisca nei due vettori. Successivamente, per ogni studente con matricola X contenuto nel vettore M, sommi tutti i suoi voti ottenuti negli esami contenuti nel vettore V.

43

#include <stdio.h> #define DIMN 3 #define DIMM 7 typedef struct { int matricola; char Nome[20]; char Cognome[20]; } studente; typedef struct { int matricola; char esame[20]; int voto; } esami;

44

22

10/26/2011

main(){ int i, j, S=0; studente V[DIMN]; esami M[DIMM]; //leggi gli studenti for(i=0;i<DIMN;i++){ printf("Inserisci Matricola, Nome, Cognome\n"); scanf("%d",&V[i].matricola); for(j=0;j<i;j++) trovato=0; if(V[i].matricola==V[j].matricola) { printf(Matricola doppia); i--; trovato=1;} if{trovato==0) scanf("%s",V[i].Nome); scanf("%s",V[i].Cognome); } } //leggi esami for(i=0;i<DIMM;i++){ printf("Inserisci Matricola, Esame, Voto\n"); scanf("%d %s %d ",&M[i].matricola,M[i].esame,&M[i].voto); }
45

//somma for(i=0;i < DIMM;i++) if (E[i].matricola == s.matricola) S = S + E[i].voto; for(i=0; i< DIMN;i++){ S= somma(V[i], M); printf("Studente %s %s\n", V[i].Cognome, V[i].Nome); printf("Somma voti: %d\n",S); } }

46

23

10/26/2011

Esercizio 14
Scrivere un programma che chiede allutente di inserire una matrice 20x30, poi (dopo aver terminato la fase di inserimento) copia gli elementi dispari in una seconda matrice senza lasciare buchi, se non in fondo.

47

#define N 20 #define M 30 int main () { int i=0,j=0,k=0,r=0,mat1[N][M],mat2[N][M]; for(i=0; i<N; i++) for(j=0; j<M; j++) scanf("%d",&mat1[i][j]); for(i=0; i<N; i++) { for(j=0; j<M; j++) { if(mat1[i][j]%2!=0) { mat2[r][k]=mat1[i][j]; k++; if(k==M) { k=0; r++; } } } } return 0; }

48

24

10/26/2011

Esercizio 15
Si considerino due matrici di interi A e B, di uguali dimensioni (R e C, costanti, che indicano il numero di righe e colonne). Diciamo che A domina B se, confrontando i valori in posizioni corrispondenti, risulta che il numero dei valori in A maggiori dei corrispondenti valori in B pi grande del numero di quelli di B maggiori dei corrispondenti in A e inoltre gli elementi corrispondenti non sono mai uguali (se due elementi corrispondenti sono uguali la dominanza non definita). Si codifichi un frammento di codice che riceve le matrici e stampa 1 se la prima domina la seconda, -1 se la seconda domina la prima, 0 altrimenti.

int A[R][C], B[R][C]; ... ... int bilancio = 0, i, j; for ( i=0; i<R; i++ ) { for ( j=0; j<C; j++ ) { if ( A[i][j] == B[i][j] ) { printf(%d,0); return 0; } if ( A[i][j] > B[i][j] ) bilancio++; else bilancio--; } } if ( bilancio > 0 ) printf(%d,1); else if ( bilancio < 0 ) printf(%d,-1); else printf(%d,0); return 0;

25

10/26/2011

Esercizio 16
Definire una struttura dati che descriva le squadre di un torneo di calcio.
Le squadre sono 6, di ogni squadra si devono memorizzare: matricola squadra, nome, citt e tutti giocatori come nome e numero di maglia.

Scrivere una funzione che riceve in ingresso la struttura definita e stampa lelenco dei portieri titolari (i portieri titolari hanno numero di maglia = 1).

typedef struct { char cognome[10]; int numero; } giocatore; typedef struct { int matricola-squadra; char nome[15]; char citt[10]; giocatore formazione[11]; } squadra; squadra squadre-torneo[6];

26

10/26/2011

void stampaPortieri(squadra sq[]) { int i,j; for(i=0;i<6;i++) for(j=0;j<11;j++) if(sq[i].formazione[j].numero==1) printf(\n%s, sq[i].formazione[j].cognome); }

Esercizio 17
Scrivere una funzione che riceve in input due array di N elementi e copia nel secondo gli elementi di valore pari del primo senza lasciare buchi. La funzione restituisce il numero di elementi copiati.

27

10/26/2011

int copiaPari(int A[], int B[]) { int i,j=0; // i usato per scorrere A // j punta sempre al primo elemento libero di B for (i=0; i<N; i++) if(A[i] % 2 ==0) { B[j]=A[i]; j++; } return j; }

Esercizio 18
Scrivere una funzione che riceve in input una matrice di interi di dimensione N*N e un punto cos definito typedef struct {int x; int y;} punto La funzione deve restituire il numero di multipli dellelemento della matrice di cui sono state fornite le coordinate.

28

10/26/2011

int contaMultipli(int M[][N], punto p) { int i,j,mult=0; if (p.x<0 || p.x>N-1 || p.y<0 || p.y>N || M[p.x][p.y] ==0) { printf("errore"); return 0; } for (i=0; i<N; i++) for (j=0; j<N; j++) if(M[i][j] % M[p.x][p.y] ==0) mult++; return mult; }

Esercizio 19
Sia dato un vettore di N 2 elementi. Ogni elemento del vettore un numero intero. Si chiede di progettare e codificare in C un programma che verifichi se, a partire da un elemento di indice i 0 fino alla fine del vettore, ogni elemento abbia valore inferiore alla somma di tutti gli elementi collocati alla sua destra, cio alla somma di tutti gli elementi aventi indice superiore al suo (beninteso questa verifica non s'applica all'ultimo elemento, che non ha niente alla sua destra). Per esempio, il vettore seguente (con N = 5) soddisfa alla condizione in questione, a partire dall'elemento di indice 1 (ma non a partire da quello di indice 0). indice 0 1 2 3 4 elemento 9 3 0 1 4 Il programma chiede allutente il vettore e l'indice i da cui partire con la verifica. Essa stampa 1 se il vettore soddisfa alla condizione cos descritta, 0 altrimenti. Si supponga esista una funzione, int somma(int vett [], int k) che restituisce la somma di tutti gli elementi del vettore vett, a partire da quello di indice k (compreso) fino alla fine del vettore (compresa).

29

10/26/2011

#include <stdio.h> #define N 1000 int main( ) { int j, flag=1, vett[N]; j = i; /*acquisizione dati*/ while ((j <= N - 2) && (flag == 1)) { if (vett [j] < somma(vett, j + 1)) j++; else flag = 0; } printf(%d,flag); return 0; }

30