



















Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Il file contiene alcuni sottoprogrammi scritti in C: i sottoprogrammi spaziano da sottoprogrammi generici e utilizzabili in diversi ambiti a sottoprogrammi specifici riguardanti le liste dinamiche. Gli estratti di codice presenti sono tutti commentati e perfettamente funzionanti. Particolarmente consigliati per l'esame di laboratorio del corso di Informatica A del professor Fuggetta al primo anno di Ingegneria Fisica in cui tale file può essere liberamente utilizzato.
Tipologia: Dispense
1 / 27
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!




















#include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> //solo per liste dinamiche: #include <stdio.h> #include <stdlib.h> //per malloc typedef struct nodo { int dato; struct nodo *next; } node_t; typedef node_t *ptrNode; //così d'ora in poi invece di scrivere "node_t *pippo" posso scrivere "ptrNode pippo" _____________INDICE_____________ MENU int menu(void); MAIN PER ARRAY DI STRUTTURE E VARIE OPZIONI E WHILE DI SCELTA con SWITCH int main(int argc, char *argv[]); AGGIUNGI FILE(S) (il secondo sottoprogramma richiede il primo) file_t nuovoFile(); int insFiles(file_t file[], int n_file); RANDOM INSERISCI ARRAY DI NUMERI da tastiera (negativo per uscire) SOTTOPROGRAMMI PUSH E POP PER LA GESTIONE DELLE PILE void push ( char stack[], char item, int *top, int max_size); char pop (char stack[], int *top);
void cancellaCarattereMultiplo (char frase[]); TROVA UNA PAROLA E LA CANCELLA UNA VOLTA (vedi sotto per cancella multiplo) void cancellaParola (char frase[]); TROVA UNA PAROLA E LA CANCELLA TUTTE LE VOLTE void cancellaParolaMultiplo (char frase[]); TROVA UNA PAROLA IN UNA FRASE E LA RENDE MAIUSCOLA void maiuscoloParola(char frase[]); TROVA UNA PAROLA IN UNA FRASE E LA RENDE minuscola void minuscoloParola(char frase[]); TROVA UNA PAROLA IN UNA FRASE E LA INVERTE void invertiParola(char frase[]); void invertiParola(char text[], char word[], int dimText, int dimWord); STAMPA LA STRINGA E POI LA STESSA STRINGA INVERTITA void stampaStringaInvertita(char stringa); STAMPA PARTENDO DALL''ULTIMA LE PAROLE INSERITE DALL''UTENTE void reverse_input_words(int n); int verificaPalindromo(char stringa[], int len); RIORDINA ALFABETICAMENTE UN ARRAY DI STRINGHE int riordina(char parole[][L], int n_parole); BUBBLESORT: riordinare elementi array monodimensionale void bubbleSort(double /!/ array[], int dim_array); SELECTIONSORT: riordinare elementi array monodimensionale void selectionSort(double /!*/ array[], int dim_array); TROVA MCD TRA DUE NUMERI m ED n
ptrNode ordinaListaRicorsivo(ptrNode testa); ORDINA LISTA CON BUBBLESORT IN MODO OTTIMIZZATO ptrNode ordinaLista(ptrNode testa); PUSH IN LISTA CON DOPPIO PUNTATORE void push(ptrElemento testa, char elemento); POP IN LISTA CON DOPPIO PUNTATORE int /!*/ pop(ptrNode *testa); _____________PROGRAMMI_____________ MENU int menu(void) { int scelta; system("cls"); printf("Quale funzione vuoi usare?\n"); printf("1) \n"); printf("2) \n"); printf("3) \n"); printf(">> "); scanf("%d", &scelta); return scelta; }
E WHILE DI SCELTA con SWITCH int main(int argc, char *argv[]) { file_t file[N]; int n_file = 0; //numero di file inseriti n_file += insFiles(file, n_file); printf("File totali inseriti: %d", n_file); int scelta; while (1) { scelta = menu(); system("cls"); switch(scelta) { //o direttamente: switch(menu()) { case 1: //blocco 1 break; case 2: //blocco 2 break; case 3: //blocco 3 break; case 4: //blocco 4 break; default: return 0; } printf("\n\n"); system("PAUSE"); } return 0; }
#include <time.h> #include <stdlib.h> srand(time(NULL)); //solo all’inizio del main int r = rand(); //genera un int casuale da 0 a RANDMAX int g = rand() % 20; //genera un int casuale da 0 a 19
INSERISCI ARRAY DI NUMERI da tastiera (negativo per uscire) int array[N]; int n_elementi = 0; int inserito; printf("Inserire un primo elemento: "); scanf("%d", &inserito); while (n_elementi < N && inserito >= 0) { array[n_elementi] = inserito; n_elementi++; printf("Inserire un altro elemento (-1 per uscire): "); scanf("%d", &inserito); }
void push ( char stack[], // input/output - la pila char item, // input - valore da inserire nella pila int top, // input/output - puntatore a variabile contenente l'indice della cima int max_size) { // input - dimensione massima della pila if (top < max_size - 1) { ++(top); stack[top] = item; } } #DEFINE STACK_EMPTY 'LETTERA' char pop ( char stack[], // input/output - la pila int top) { // input/output - puntatore a variabile contenente l'indice della cima char item; if (top >= 0) { item = stack[top]; --(top); } else { item = STACK_EMPTY; } return item; }
TROVA UNA PAROLA E LA CANCELLA UNA VOLTA (vedi sotto per cancella multiplo) void cancellaParola (char frase[]) { //alternativamente: metto \0 a primo carattere parola e poi strcat(indirizzo_frase, indirizzo_parola + len_parola) char parola[20]; int i, len_parola = 0; printf("Quale parola vuoi eliminare? "); scanf("%s", parola); len_parola = (int)strlen(parola); if (strstr(frase/da dove ho già controllato nella frase/, parola) /indirizzo inizio parola/ != NULL) { for ( i=(int)(strstr(frase, parola) - &frase[0]) /indice inizio parola/; i < (int)strlen(frase) - len_parola + 1 /copio anche \0/; i++) { frase[i] = frase[i+len_parola]; } } printf("\n--%s--\n", frase); }
void cancellaParolaMultiplo (char frase[]) { //alternativamente: metto \0 a primo carattere parola e poi strcat(indirizzo_frase, indirizzo_parola + len_parola) char parola[20]; int i, len_parola = 0; char inizio_parola = 0; printf("Quale parola vuoi eliminare? "); scanf("%s", parola); len_parola = (int)strlen(parola); inizio_parola = strstr(frase, parola); if (inizio_parola == NULL) return; do { for ( i=(int)(strstr(frase, parola) - &frase[0]) /indice inizio parola/; i < (int)strlen(frase) - len_parola + 1 /copio anche \0/; i++) { frase[i] = frase[i+len_parola]; } } while (strstr(inizio_parola/da dove ho già controllato nella frase/, parola) /indirizzo inizio parola*/ != NULL); printf("\n--%s--\n", frase); }
TROVA UNA PAROLA IN UNA FRASE E LA RENDE minuscola void minuscoloParola(char frase[]) { char parola[20]; int i, len_parola = 0; char inizio_parola = 0; printf("Quale parola vuoi rendere minuscola? "); scanf("%s", parola); len_parola = (int)strlen(parola); inizio_parola = strstr(frase, parola); while (inizio_parola != NULL) { for (i=0; i<len_parola; i++) { if((inizio_parola + i) >= 'A' && *(inizio_parola + i) <= 'Z') { *(inizio_parola + i) = *(inizio_parola + i) + ('a' - 'A'); } } inizio_parola = strstr(inizio_parola + len_parola, parola); } printf("\n--%s--\n", frase); }
void invertiParola(char frase[]) { char parola[20]; int i, len_parola = 0; char inizio_parola = 0; printf("Quale parola vuoi invertire? "); scanf("%s", parola); len_parola = (int)strlen(parola); inizio_parola = strstr(frase, parola); while (inizio_parola != NULL) { //se voglio sia parola isolata: if(((inizio_parola - 1) == ' ' || inizio_parola == frase) && (((inizio_parola + len_parola) == ' ' ) || ((inizio_parola + len_parola) == '\0' ))) for (i=0; i<len_parola; i++) { (inizio_parola + i) = parola[len_parola - 1 - i]; } inizio_parola = strstr(inizio_parola + len_parola, parola); } printf("\n--%s--\n", frase); } void invertiParola(char text[], char word[], int dimText, int dimWord) { int i; int j; char occorrenza; char temp; occorrenza = strstr(text, word); while(occorrenza != NULL) { if(((occorrenza - 1) == ' ' || occorrenza == text) && (((occorrenza + dimWord) == ' ' ) || (*(occorrenza + dimWord) == '\0' ))) { for(i=0; i<dimWord; i++) { *(occorrenza + i) = word[dimWord - 1 - i]; } } occorrenza = strstr(occorrenza + dimWord, word); } }
int verificaPalindromo(char stringa[], int len) { if (len == 0 || len == 1) return TRUE; else if (stringa[0] != stringa[len-1]) return FALSE; else { return verificaPalindromo(&stringa[1], len - 2); } }
RIORDINA ALFABETICAMENTE UN ARRAY DI STRINGHE int riordina(char parole[][L], int n_parole) { int i; char temp[L]; if (n_parole <= 1) return 0; for (i=0; i<n_parole-1; i++) { if (strcmp(parole[i], parole[i+1]) > 0) { strcpy(temp, parole[i]); strcpy(parole[i], parole[i+1]); strcpy(parole[i+1], temp); } } riordina(parole, n_parole-1); }
BUBBLESORT: riordinare elementi array monodimensionale NB: cambia tipo array e temp SE STRINGA: togli secondo parametro e metti int dim_array = (int)strlen(array); void bubbleSort(double /!/ array[], int dim_array) { int ultimoScambio = dim_array; int i = 0; double /!/ temp; dim_array--; while (ultimoScambio > 0) { ultimoScambio = 0; for (i=0; i < dim_array; i++) { if (array[i] > array[i+1]) { temp = array[i]; array[i] = array[i+1]; array[i+1] = temp; ultimoScambio = i; } } dim_array = ultimoScambio; } }
TROVA MCD TRA DUE NUMERI m ED n int trovaMCD(int m, int n) { if (m % n == 0) { return n; } else { return trovaMCD(n, m % n); } } TROVA mcm TRA DUE NUMERI m E n mcm = m * n / trovaMCD(m, n);
int contaPositivi(int array[], int n_elementi) { if (n_elementi==0) return 0; else if (array[0] > 0) { return 1 + contaPositivi(&array[1], n_elementi - 1); } else { return contaPositivi(&array[1], n_elementi - 1); } }
int main(int argc(), char *argv[]) { ptrNode testaMain = NULL; testaMain = inserimentoInTesta(testaMain, 3); testaMain = inserimentoInTesta(testaMain, 10); testaMain = inserimentoInFondo(testaMain, 22); stampaLista(testaMain); testaMain = invertiLista(testaMain); printf("\n"); testaMain = rimuoviPrimaOccorrenza(testaMain, 34); stampaLista(testaMain); return 0; } void stampaLista(ptrNode testa) { if (testa == NULL) { printf("\n"); return; } printf("%-5d ", testa->dato); //printf("| %5d e %-5d |", testa->numero1, testa->numero2); stampaLista(testa->next); }