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)