|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Aug 2006
Messaggi: 177
|
Sito con esercizi
ciao, devo sostenere tra poco l'esame di porgrammazione I per il linguaggio C, esiste qualche sito dove ci sono esercizi di riepilogo, per ripassare un po tutti gli argomenti del C, oppure avete voi qualche file dove ci sono?
grazie |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
--------------------------------------- Realizzare un programma "C" che scriva in output il "dump" di un qualunque file specificato come parametro sulla linea di comando. L'output dovrebbe essere una cosa del tipo: Codice:
00000000 FF D8 FF E0 00 10 4A 46 49 46 00 01 01 01 00 48 ......JFIF.....H 00000010 00 48 00 00 FF E1 00 16 45 78 69 66 00 00 4D 4D .H......Exif..MM 00000020 00 2A 00 00 00 08 00 00 00 00 00 00 FF DB 00 43 .*.............C ...ecc... Come possibile miglioria/complicazione, dare la possibilità di specificare sulla linea di comando un offset di partenza e una lunghezza da "dumpare". In questo caso gli offset visualizzati devono comunque essere multipli di 16, cioè ci possono essere dei valori/caratteri non stampati. Esempio: Codice:
00000010 FF E1 00 16 45 78 69 66 00 00 4D 4D ....Exif..MM 00000020 00 2A 00 00 00 08 00 00 00 .*....... Realizzare un programma "C" che legge da un file di testo i dati di una serie di libri. Ogni riga del file è organizzata nel seguente formato. titolo|autori|editore|pagine|anno|isbn Ogni campo è separato dall'altro con un pipe '|'. Esempio: Codice:
The C Programming Language, Second Edition|Brian W. Kernighan, Dennis M. Ritchie|Prentice Hall|274|1988|0131103628 Come possibile miglioria/complicazione, dare la possibilità di specificare che tipo di ordinamento utilizzare, esempio: editore, anno, ecc... --------------------------------------- Per il momento dovrebbero bastarti per un po'. ![]()
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) Ultima modifica di andbin : 18-12-2006 alle 10:07. |
|
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Aug 2006
Messaggi: 177
|
mi servierebbero una serie di esercizi facili su tutti gli argomenti giusto per capire bene i meccanismi.
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Oct 2005
Città: Palermo
Messaggi: 2579
|
qualcosa del tipo leggere dei dati impostati come padri e figli da un file di testo, metterli in delle strutture o liste, farne le delle statistiche e scriverle su un altro file ?
__________________
Utente gran figlio di Jobs ed in via di ubuntizzazione Lippi, perchè non hai convocato loro ? |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Ne vuoi un altro?? Ecco: ----------------------------- Realizzare un programma "C" che gestisca un dizionario inglese-italiano. Le associazioni tra le parole possono essere inserire direttamente nel sorgente (più facile) oppure in un file di testo esterno da caricare a run-time (meno facile). Richiedere in input in modo continuativo (fino all'inserimento di una linea vuota e quindi uscire) una parola inglese e visualizzare la parola italiana corrispondente, se esiste. ----------------------------- Già un esercizio come questo tocca diversi argomenti: input di una linea di testo, gestione delle strutture e degli array, comparazione tra stringhe. Ma se vuoi ne penso altri. ![]()
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: Aug 2006
Messaggi: 177
|
non mi sono spiegato bene
vorrei una serie di esercizi, non complicatissimi che toccassero un po tutti gli argomenti. non un esercizio solo che comprende tutti gli argomenti. esiste qualche sito oppure avete qualche file sul pc con esercizi di riepilogo?? |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Jun 2005
Città: Mestre (VE)
Messaggi: 1415
|
Ma intendi esercizi su come si fa un ciclo FOR, su un IF, sui puntatori, sugli array ... e robe del genere?
![]()
__________________
IN WIN 909 / AMD Ryzen 9 3950X / Gigabyte X570 Aorus Xtreme / 4x8gb G.Skill 3200 / Gigabyte Aorus RTX2080Ti Xterme / 2x Gigabyte Aorus NVMe M.2 1Tb / Corsair AX1200i / full liquid EK - Bitspower / circa 160 trattative nel mercatino |
![]() |
![]() |
![]() |
#8 |
Member
Iscritto dal: Aug 2006
Messaggi: 177
|
si, su tutti i vari argomenti
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2774
|
Non ho capito l'esercizio del dump, i vari valori cosa rappresenterebbero?
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Apr 2005
Città: Resana - TV
Messaggi: 960
|
cercando una definizione di dump con google, tra i vari risultati, saltano fuori questi:
'iao |
![]() |
![]() |
![]() |
#11 | ||
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
(Hazon Garzanti) "fare il dump" di un file, in gergo informatico, significa estrarne i dati e visualizzarli in qualche modo (in genere senza alcuna interpretazione). Vale sia per file generici ma anche per tabelle di database o aree di memoria. Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
||
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2774
|
Dunque la prima colonna è l'offset, cioè la posizione espressa in esadecimale giusto? La seconda e la terza rappresentano il contenuto del file in quell'offset (16 byte), la prima colonna con valori esadecimali e la seconda con caratteri ascii?
E a cosa serve? |
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2774
|
L'ho fatto così ma ho delle domande:
1- come bisogna comportarsi con la stampa dell'EOF? Va bene come ho fatto io? 2- i valori esadecimali vengono stampati in minuscolo, c'è una funzione veloce x renderli maiuscoli? 3- x il resto va bene? Codice:
#include <stdio.h> #include <stdlib.h> long offset; void print_buf(int *buf,FILE *fw); void clear_buf(int *buf); int main(){ FILE *fr,*fw; char path[100]; int buf[16],i; //APERTURA FILE printf("PATH: "); scanf("%s",path); fr=fopen(path,"rb"); if(fr==NULL){ printf("Errore nell'apertura del file\n"); exit(1); } fw=fopen("DUMP.txt","w"); if(fw==NULL){ printf("Errore nell'apertura del file\n"); fclose(fr); exit(1); } //LETTURA FILE 16 BYTE X VOLTA while(!feof(fr)){ clear_buf(buf); //AZZERO IL BUFFER for(i=0;i<16;i++){ buf[i]=fgetc(fr); if(buf[i]==EOF){ buf[i]=0; break; } } print_buf(buf,fw); //SCRIVO SU FILE I BYTE LETTI offset+=16; } fclose(fr); } //FUNZIONE X L'AZZERAMENTO DEL BUFFER void clear_buf(int *buf){ int i; for(i=0;i<16;i++) buf[i]=0; } //FUNZIONE X LA STAMPA DEL BUFFER void print_buf(int *buf,FILE *fw){ int i; char str[9]; //OFFSET sprintf(str,"%08x",offset); fprintf(fw,"%s\t",str); //ESADECIMALE for(i=0;i<16;i++){ sprintf(str,"%02x",buf[i]); fprintf(fw,"%s ",str); } fprintf(fw,"\t"); //ASCII for(i=0;i<16;i++) if(buf[i]<127 && buf[i]>31) fprintf(fw,"%c",buf[i]); else fprintf(fw,".",buf[i]); fprintf(fw,"\n"); } |
![]() |
![]() |
![]() |
#14 | ||
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Quote:
Mai sentito parlare di editor esadecimali?? Hex Workshop, BIEW e altri? Certo .... sono editor più complessi e con molte funzionalità. Ma nulla vieta di realizzare un semplice "file dumper" con un programmino. ![]()
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
||
![]() |
![]() |
![]() |
#15 | ||
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Ovviamente nessun carattere deve essere trattato in modo "speciale". Quote:
Leggersi la documentazione della (f)printf??
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
||
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2774
|
Non pensavo che la soluzione fosse nella printf..
L'EOF se lo stampo così com'è mi stampa "FFFFFFFF" |
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
A quest'ora della sera
![]() Codice:
#include <stdio.h> int main (int argc, char *argv[]) { FILE *f; char buf[16]; size_t offset = 0, len, i; if (argc == 2) { if ((f = fopen (argv[1], "rb")) != NULL) { while ((len = fread (buf, 1, 16, f)) > 0) { printf ("%08X ", offset); for (i = 0; i < 16; i++) printf (i < len ? "%02X " : " ", buf[i] & 0xFF); printf (" "); for (i = 0; i < 16; i++) printf ("%c", i < len ? buf[i] >= 32 && buf[i] <= 126 ? buf[i] : '.' : ' '); printf ("\n"); offset += len; } fclose (f); } else printf ("Error opening file\n"); } else printf ("Usage: %s <filename>\n", argv[0]); return 0; }
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:18.