/* Progettare un programma C che legge da standard input due interi x e y, due sequenze ordinate di rispettivamente x e y interi e stampa su standard output l'intersezione (ordinata) delle sequenze. */ #include #include void stampaIntersezione(int *s, int *p, int dim1, int dim2); void leggiSequenza(int *s, int dim); int main() { int x,y, *sequenza1, *sequenza2; scanf("%d%d",&x,&y); sequenza1 = (int*)malloc(sizeof(int)*x); sequenza2 = (int*)malloc(sizeof(int)*y); leggiSequenza(sequenza1,x); leggiSequenza(sequenza2,y); stampaIntersezione(sequenza1,sequenza2,x,y); } void leggiSequenza(int *s, int dim) { int i; for(i=0; i<=dim-1; i++) scanf("%d",&s[i]); } void stampaIntersezione(int *s, int *p, int dim1, int dim2) { int i,j,trovato=0; for(i=0; i<=dim1-1; i++) { j=0; trovato = 0; while(j<= dim2 - 1 && !trovato) { if(s[i] == p[j]) { printf("%d\n",s[i]); trovato = 1; } j++; } } } ******** /*Progettare un programma C che legge in preordine da stdin un albero binario T etichettato con caratteri e stampa in inorder su sdtout l'albero ottenuto da T sostituendo tutti i caratteri alfabetici minuscoli con i corrispondenti maiusoli e tutti i caratteri alfabetici maiuscoli con i corrispondenti minuscoli. */ #include #include struct nodotree { struct nodotree * Left; char Info; struct nodotree * Right; }; typedef struct nodotree NodoTree; typedef NodoTree * PtrNodoTree; void stampaInOrdine(PtrNodoTree PtrTree); PtrNodoTree leggiPreOrdine(void), creaElemento(void); void modificaEtichette(PtrNodoTree PtrTree); void main() { PtrNodoTree MyTree; MyTree = leggiPreOrdine(); modificaEtichette(MyTree); stampaInOrdine(MyTree); } PtrNodoTree creaElemento(void) { return (PtrNodoTree)malloc(sizeof(NodoTree)); } PtrNodoTree leggiPreOrdine(void) { PtrNodoTree Nuovo; char val; int NumeroFigli; scanf("%d %c",&NumeroFigli,&val); Nuovo = creaElemento(); Nuovo->Info=val; if(NumeroFigli==2) { Nuovo->Left=leggiPreOrdine(); Nuovo->Right=leggiPreOrdine(); } else if(NumeroFigli==1) { Nuovo->Left=leggiPreOrdine(); Nuovo->Right = NULL; } else { Nuovo->Left=NULL; Nuovo->Right = NULL; } return Nuovo; } void modificaEtichette(PtrNodoTree Tree) { if(Tree!=NULL) { if(islower(Tree->Info)) Tree->Info = toupper(Tree->Info); else if(isupper(Tree->Info)) Tree->Info = tolower(Tree->Info); modificaEtichette(Tree->Left); modificaEtichette(Tree->Right); } } void stampaInOrdine(PtrNodoTree Tree) { if(Tree!=NULL) { stampaInOrdine(Tree->Left); printf("%c\n",Tree->Info); stampaInOrdine(Tree->Right); } } ************************ /* Progettare un programma C che legge da stdin fino ad EOF e stampa in output il numero di occorrenze delle cifre nel testo solo per le cifre che occorrono almeno una volta nel testo. Si puo' assumere che al piu' si leggono 1000 caratteri. */ #include #include #define MAX 1000 #define CIFRE 10 void acquisisciTesto(char * T) { int c,i; for(i=0;i #define MAX 1000 #define NUMCARAT 'z'-'a'+1 void contaOccorrenze(char *T, int *S) { int i; for(i=0;T[i]!='\0';i++) S[T[i]-'a']++; } int sonoUguali(int occorrenze1[],int occorrenze2[]) { int i; for(i=0;i #define MAX 1001 void leggiRiga(char *r,int * dim); void stampaParola(char *r); void stampa_al_contrario(char *r, int dim); int main() { char Riga[MAX]; int dimensione=0; leggiRiga(Riga,&dimensione); stampa_al_contrario(Riga,dimensione); return 0; } void leggiRiga(char *r,int *dim) { int c; c = getchar(); (*dim)++; if(c=='\n'||c==EOF) *r='\0'; else { *r = c; leggiRiga(++r,dim); } } void stampa_al_contrario(char *r, int dim) { int i; for(i=dim;i>=0;i--) { if(r[i]==' ') { stampaParola(r + i + 1); putchar('\n'); } } stampaParola(r + i + 1); putchar('\n'); } void stampaParola(char *r) { if(*r!='\0'&&*r!=' ') { putchar(*r); stampaParola(r+1); } } *************************************** /* Progettare un programma C che legge da standard input una linea di testo di al piu' 1024 caratteri, e stampa su stdout i caratteri alfabetici della linea dopo averli ordinati in ordine alfabetico. Lo studente puo' assumere che i caratteri alfabetici siano tutti minuscoli. */ #include #define MAX 1024 int leggi(char *l); void ordina(char *l, int dim); void stampa(char *l,int dim); int main() { char linea_testo[MAX+1]={0}; int dimensione; dimensione = leggi(linea_testo); ordina(linea_testo, dimensione); stampa(linea_testo,dimensione); } int leggi(char *l) { int i,c; for(i=0; i l[j+1]) { temp = l[j]; l[j] = l[j+1]; l[j+1] = temp; } } void stampa(char *l,int dim) { int i; for(i=0;i<=dim-1;i++) printf("%c",l[i]); } ************************* /*Progettare un programma C che legge da standard input due linee di testo e stampa su sdtout il numero di posizioni in cui le linee differiscono. Vengono considerate solo le posizioni in cui almeno una linea ha un carattere non spazio (diverso da blank, newline, etc). */ #include #define MAX 1000 void leggiRiga(char *r,int lim); void stampaPosDiff(char *r1, char *r2); int main() { char Riga1[MAX] = {0}, Riga2[MAX] = {0}; leggiRiga(Riga1,MAX); leggiRiga(Riga2,MAX); stampaPosDiff(Riga1,Riga2); return 0; } void leggiRiga(char *r,int lim) { int i,c; for(i=0;i #include #define LIMITE 1000 int main() { int vettore[LIMITE] = {0}, *sequenza, i, quanti_valori, valore, min,j; min = 0; scanf("%d",&quanti_valori); sequenza = (int*)malloc(sizeof(int)*quanti_valori); for(i=0; i<=quanti_valori-1; i++) /* acquisisci sequenza di interi */ { scanf("%d",&valore); sequenza[i] = valore; } for(i=0; i<=quanti_valori-1; i++) /*trova min*/ { if(vettore[i] <= min) min = sequenza[i]; } for(i=0; i<=quanti_valori - 1; i++) { vettore[sequenza[i]-min]++; } printf("%d\n",quanti_valori); for(i=0;i<=LIMITE - 1; i++) if(vettore[i]>0) for(j=0; j <=vettore[i]-1; j++) printf("%d\n",i + min); } *************************