Codice dei programmi nella directory:

///File: 1.c
/*Scrivere un programma che, riempito un vettore con N numeri pseudocasuali, verifichi quante volte sono presenti i valori. 1,2,3,4,5 */ #include stdio.h #include stdlib.h #include time.h #define MAX 50 int main() { int cont[6] = {0}; int v[MAX] = {0}; int i; srand(time(NULL)); for(i=0; i MAX; i++) { v[i] = rand() % 10 + 1; printf(%d , v[i]); if(v[i] = 1 && v[i] = 5) cont[v[i]]++; } printf(n); for(i=1; i6; i++){ printf(Il numero %d compare %d volten,i, cont[i]); } return 0; }
///(Fine file: 1.c)

///File: TrovoKconPuntatore.c
int trovak
(int m[][MAX], int k) // trova l'elemento k nella matrice e lo ritorna { int *p; p= &m[0][0]; // in p c'e' l'indirizzo del primo elemento della matrice p = p +(k-1); // p punta al elemento k return *p; // ritorna l'elemento }
///(Fine file: TrovoKconPuntatore.c)

///File: FormuleJacobs.txt
Per trovare X e Y
, coordinate dell'elemento K della matrice M (cioe' M[X][Y]) dette R il numero di righe, C il numero di colonne, Jacobs propone la formula: X = K % R Y = (K%C)-(K/C) Funzionano? Se non funzionano, correggetele
///(Fine file: FormuleJacobs.txt)

///File: Aiuto.c
#define R 3 #define C 4 int M[R][C] = {{3,2,6, 8} {1,2,0,-3} .......... }; int trovak(int m[][MAX], int k) // trova l'elemento k nella matrice e lo ritorna { // trova le due formule return M[X][Y]; // ritorna l'elemento } main() { int K; int elem; scanf("%d",&K); elem=trova(m,K); printf("Elemento k = %d\n",elem); return 0; }
///(Fine file: Aiuto.c)

///File: 2-da-completare.c
/*** 2. Dato un file matrice.txt (ad esempio come quello qui sotto, ove i due primi numeri interi stabiliscono rispettivamente le righe e le colonne di una matrice) caricare in una matrice M in memoria il file e poi visualizzare a video: A) la matrice B) gli elementi della colonna N (chiedi N da tastiera) C) quanti elementi della matrice sono divisibili per l’elemento K (Chiedi K da tastiera. Se K=6 e la matrice è quella qui sotto, il valore corrispondente è 0, cioè il sesto numero partendo dall’elemento 0,0) 3 4 2 3 4 5 8 0 7 2 4 4 9 8 ***/ #include <stdio.h> #include <stdlib.h> #define MAX 10 void caricamatrice (int m[MAX][MAX],int dimensione[]) { FILE *f; int i, j, righe,colonne; f= fopen("matrice.txt","r"); // apro il file dove ho la matrice if (f== NULL) { printf("ERRORE! nella apertura del file "); exit(1); } printf("La matrice-->\n"); fscanf(f,"%d %d",&righe,&colonne); dimensione[0]=righe; // per il valore di ritorno della matrice dimensione[1]=colonne; // per il valore di ritorno della matrice for(i=0; i<righe; i++) // riempimento della matrice for(j=0; j<colonne; j++) fscanf(f,"%d",&m[i][j]); fclose (f); } void stampamatrice (int m[MAX][MAX], int righe, int colonne) { int i, j; for(i=0; i<righe; i++) { for(j=0; j<colonne; j++) printf("%3d",m[i][j]);// stampa la matrice printf("\n"); } } void stampacolonna(int m[MAX][MAX],int n, int righe) { int i; for(i=0; i<righe; i++) printf("%d\n",m[i][n-1]); // stampa colonna desiderata } int trovak1 (int m[MAX][MAX], int k, int righe, int colonne) { int elem,i,j,cont=1; // printf(" Da trovak() k=%d, righe=%d, colonne=%d\n",k,righe,colonne); for(i=0; i<righe; i++) for(j=0; j<colonne; j++) { if (cont == k) { elem = m[i][j]; return(elem); } cont++; } return 0; } int trovak2(int m[][MAX], int righe, int colonne, int k) // con calcolo o formula { } int trovak3(int m[][MAX], int righe, int colonne, int k) // trova l'elemento k nella matrice e lo ritorna con calcolo di pointer { int *p; int i; p= &m[0][0]; // in p c'e' l'indirizzo del primo elemento della matrice //............ return *p; // ritorna l'elemento } int trovadivisibili(int m[MAX][MAX],int righe,int colonne, int elem) { int i, j, cont=0; for(i=0; i<righe; i++) for(j=0; j<colonne; j++) if(elem != 0 && m[i][j] % elem == 0) cont++; return cont; } int main () { int m[MAX][MAX]; int righe, colonne; int i,j,elem; int dim[2]; int divisibili=0; int n,k; caricamatrice(m,dim); righe= dim[0]; colonne= dim[0]; stampamatrice(m,righe,colonne); // funzione della stampa matrice printf("Dimmi quale colonna vuoi visualizzare-->"); scanf("%d",&n); stampacolonna(m, n,righe ); // funzione della stampa colonna printf("Dimmi il valore della k--->"); scanf("%d",&k); elem=trovak1(m,k, righe, colonne); // funzione della trova elemnto della matrice attraverso k printf (" dal main() elemento della matrice-->%d\n",elem); printf("\n"); divisibili=trovadivisibili(m,righe,colonne,elem); printf("\nElementi divisibili per %d: %d\n", elem, divisibili); return 0; }
///(Fine file: 2-da-completare.c)

///File: es3-da-completare.c
#include <stdio.h> #include <stdlib.h> #include <limits.h> int main() { // Dichiarazione delle variabili per i conteggi int vocali = 0, consonanti = 0, cifre = 0; int spazi = 0, linee = 0, carattere = 0; int i; // Array per contare la frequenza di ciascuna delle 26 lettere dell'alfabeto (A-Z) int frequenza[26] = {0}; FILE *fin = fopen("testo.txt", "r"); if (fin == NULL) { printf("Errore: Impossibile aprire il file testo.txt\n"); return 1; } printf("\nFile testo.txt:\n"); system("type testo.txt"); printf("\n-------------------------------------\n"); FILE *fout = fopen("testo2.txt", "w"); if (fout == NULL) { printf("Errore: Impossibile creare il file testo2.txt\n"); fclose(fin); // Chiudiamo il primo file prima di uscire return 1; } // Lettura del file carattere per carattere int c; while ((c = fgetc(fin)) != EOF) { carattere++; // Sostituisci la cifra con * nel secondo file di testo if (c >= '0' && c <= '9') { cifre++; } if (c >= 'a' && c <= 'z') c -= 32; if (c >= 'A' && c <= 'Z') { frequenza[c - 'A']++; if (c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U') vocali++; else { consonanti++; //printf("Consonante=%c\n", c); // Scrittura nel file di copia con il codice ASCII (es. #65 al posto di A) //fprintf(fout, ....); } } else { // NON è UNA LETTERA // Gestione dei caratteri speciali ovvero spazi, invio e punteggiatura if (c == ' ') spazi++; else if (c == '\n') linee++; //fputc(c, fout); // Copia il carattere così com'è } } // Controllo di sicurezza se il file contiene testo ma non finisce con un invio bisogna comunque contarla come una linea if (carattere > 0 && c != '\n') { linee++; } int max_freq = 0; int min_freq = 0; // Un valore molto alto come punto di partenza per il minimo // Ciclo per esaminare tutte le 26 lettere dell'alfabeto for (int i = 0; i < 26; i++) { // Cerchiamo la lettera PIÙ frequente (Massimo) if (frequenza[i] > frequenza[max_freq]) max_freq = i; } for (i = 0; i < 26; i++) if (frequenza[i] > 0) min_freq = i; for (i = 0; i < 26 && frequenza[i] > 0; i++) { if (frequenza[i] < frequenza[min_freq] ) min_freq = i; } fclose(fin); fclose(fout); // Stampa a video di tutti i risultati accumulati printf("--- RISULTATI ANALISI DEL PROGRAMMA---\n"); printf("1) Vocali: %d, Consonanti: %d, Cifre: %d\n", vocali, consonanti, cifre); // Stampiamo la lettera più/meno frequente solo se nel file c'era almeno una lettera if (max_freq != 0) { printf("2) Lettera piu' frequente: %c (%d volte)\n", max_freq + 'a', frequenza[max_freq]); printf(" Lettera meno frequente: %c (%d volte)\n", min_freq + 'a', frequenza[min_freq]); } else { printf("2) Nessuna lettera trovata nel file.\n"); } printf("3) Dimensione file: %d byte, Spazi: %d, Linee totali: %d\n", carattere, spazi, linee); printf("4) Copia modificata salvata con successo nel file 'testo2.txt'\n"); printf("\nFile testo2.txt:\n"); system("type testo2.txt"); printf("\n-------------------------------------\n"); return 0; }
///(Fine file: es3-da-completare.c)