fbpx
Skip to main content

LINUX AVANZATO 2007

  • COM_EASYSOCIAL_GUEST_NAME
  • Avatar di COM_EASYSOCIAL_GUEST_NAME
  • Visitatori
  • Visitatori
18 Anni 2 Mesi fa #53740 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic LINUX AVANZATO 2007

soluzione alla prova di programmazione del 23/05/2007


se mi dici di quale si tratta, visto che con le date non la trovo, guardo se l'ho fatta.

Al limite metti direttamente il testo.

ciao

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • COM_EASYSOCIAL_GUEST_NAME
  • Avatar di COM_EASYSOCIAL_GUEST_NAME
  • Visitatori
  • Visitatori
18 Anni 2 Mesi fa #53741 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic LINUX AVANZATO 2007
Eccolo, lo ho trovato.
Questo codice presuppone l'esistenza del file con i nominativi degli studenti
il codice per la creazione è comunque all'interno di questo codice, ma commentato.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <error.h>

struct studente{
	char cognome[21];
	int eta;
	float media;
}typedef studente;

struct st_lista{
	studente std;
	struct st_lista *next;
}typedef st_lista;

studente* MiglioriEnneStudenti(char *,int, int);
int main (int argc, char const* argv[]){

	/* CREAZIONE DEL FILE
	int fd ;
	int i ;
	int nwrite;
	
	fd = open("studenti",O_CREAT|O_WRONLY,0666);
	if(fd<0){
		printf("errore nella creazione del file\n");
		return -1;
	}
	
	studente st[8] = 
    {{"Rossi",		24,		24.56},
	{"Bianchi",		24,		24.56},
	{"Verdi",		30,		29.65},
	{"Blu",			22,		28.30},
	{"Rosa",		19,		27.30},
	{"Gialli",		25,		27.30},
	{"Neri",		24,		25.56},
	{"Viola",		21,		30.00}};
	
	for(  i = 0; i < 8; i += 1 ){
		nwrite = write(fd,&st[i],sizeof(studente));
		if(nwrite < 0){
			printf("errore nella scrittura su file\n");
			return -1;
		}
	}
	
	printf("scrittura completata\n");
	*/
	MiglioriEnneStudenti("studenti",4,25);

	
	printf("\n");
	return 0;
}

studente* MiglioriEnneStudenti(char *file, int numscelti, int maxeta){
	
	
	int fd = open(file,O_RDONLY);
	int fileLen = 0;
	int numStruct =0;
	studente *st;
	st = (studente *)malloc(sizeof(studente));
	studente *res;
	
	float tmp_media = 0;
	int nread ;
	int i ;
	
	if(fd < 0){
		printf("errore nell'apertura del file\n");
		return NULL;
	}
	
	//vediamo quando è grande il file
	fileLen = lseek(fd,0,SEEK_END);
	numStruct = fileLen / sizeof(studente);
	//printf("Ci sono %d strutture\n", numStruct);
	////riportiamo il puntatore all'inizio del file
	lseek(fd,0,SEEK_SET);
	
/*	nread = read( fd, st, sizeof(studente) );
	if(nread < 0){
		printf("errore nella read \n");
		return NULL;
	}*/
	
	studente *tmp;
	tmp = (studente *)malloc(sizeof(studente)*numStruct);
	
	i=0;
	while(read(fd,st,sizeof(studente)) > 0){
		tmp[i]=*st;
		//printf("%s\n", tmp[i].cognome);
		i++;
	}
	
	res = (studente *)malloc(sizeof(studente)*numscelti);
	
	int r = 0;
	int tmp_i=0;
	int tmp_q=0;
	i=0;
	
	while(r<numscelti){
		//ad ogni giro 
		//cerco quello che ha l'eta adatta e il voto piu alto
		for(  i = 0; i < numStruct; i += 1 ){
			if(tmp[i].eta < maxeta){
				if(tmp[i].media > tmp_media){
					tmp_media = tmp[i].media;
					tmp_i = i;
				}
			}
		}
		res[tmp_q]=tmp[tmp_i];
		//printf("%s\t%d\t%f\n", res[tmp_q].cognome ,res[tmp_q].eta, res[tmp_q].media );
		tmp[tmp_i].media = 0;
		tmp_media=0;
		r++;tmp_q++;		
	}
	
	for(  r = 0; r < numscelti; r += 1 ){
		printf("%s\t%d\t%f\n", res[r].cognome ,res[r].eta, res[r].media );
	}
	
	return res;
	
	
}

Si prega Accedi o Crea un account a partecipare alla conversazione.

Di più
18 Anni 2 Mesi fa #53773 da chiara sabbatella
Risposta da chiara sabbatella al topic LINUX AVANZATO 2007
Ciao Ragazzi...il prof mi ha collocato la prova il 26!!! Esiste qualcuno (mi rendo conto che è difficile ma c provo lo stesso a chiedere :D :D) che ce l'ha il 28 o il 2 e che voglia scambiare il giorno con me!!!???

Grazie a tutti!!!

Si prega Accedi o Crea un account a partecipare alla conversazione.

Di più
18 Anni 2 Mesi fa #53850 da nicola bocchini
Risposta da nicola bocchini al topic LINUX AVANZATO 2007
Ciao raga, un informazione per l'orale:

Qualcuno sa se il prof. chiede tutta la tediosa parte della creazione di una distribuzione, insomma non posso saltare nulla??

E sulla inizializzazione del kernel?? sono una trentina se non di più funzioni da ricordare... a parte le prime funzioni di startup 32, la init e la prima fase della start_kernel le altre le posso saltare??

E tutti i piccoli file assembler (boot1.s, boot2.s... ) nella parte della creazione dei dischi di boot è necessario ricordarla.

Vorrei avere qualche neourone libero per ricordarmi meglio le cose più importanti tipo (slab allocator, o radix tree ecc. ecc.) :D

Speriamo bene, anch'io ce l'ho il 26.

Si prega Accedi o Crea un account a partecipare alla conversazione.

Di più
18 Anni 2 Mesi fa #53857 da chiara sabbatella
Risposta da chiara sabbatella al topic LINUX AVANZATO 2007
Guarda nn credo....a rigor di logica lui ha sempre detto che nn vuole che la gente faccia esercizi di memoria ma che impari i concetti.....poi bhoooo tutto è possibile.
Credo cmq che qualcosa, tipo strutture e funzioni + importanti, vadano imparate a memoria ....cosa che per me, per esempio, è impossibile.....
Speriamo bene....in bocca al lupo!!!

Si prega Accedi o Crea un account a partecipare alla conversazione.

Di più
18 Anni 2 Mesi fa #53868 da lorenzo gullotta
Risposta da lorenzo gullotta al topic LINUX AVANZATO 2007
Ciao volevo fare l'in bocca al lupo a tutti quelli che come me hanno la seconda prova oggi, qualcuno ha parlato con lui in questi giorni? sapete qualcosa su probabili argomenti per il programma?

Si prega Accedi o Crea un account a partecipare alla conversazione.