logo Thecsea.it



Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License



scolastica » esercizi » quarta superiore » php

Testo dell'esercizio

effettuare le seguenti operazioni su un file :
- creazione
- ordinamento
- ricerca
i dati sono memorizzati nel seguente modo : "nome-eta" dove il campo nome è grande 20 caratteri e il campo eta 2 caratteri

mostra soluzione

<?php
/*
CLAUDIO CARDINALE 4AI
effettuare le seguenti operazioni su un file :
- creazione
- ordinamento
- ricerca
i dati sono memorizzati nel seguente modo : "nome-eta" dove il campo nome è grande 20 caratteri e il campo eta 2 caratteri
*/
print "1) creazione file\n2) ordina prima versione\n3) ordina seconda versione\n4) ricerca\nscelta : ";
fscanf(STDIN, "%d", $scelta);
switch($scelta){
	case 1:
		crea();
		break;
	case 2:
		ordina();
		break;
	case 3:
		ordina2();
		break;
	case 4:
		cerca();
		break;
	default:
		print "scelta non valida\n";
}

function crea(){
	$f = fopen("persone", "w") or die("errore nell'apertura del file\n");
	
	print "quante persone : ";
	fscanf(STDIN, "%d", $n);
	for($i=0; $i<$n; $i++){
		print "nome numero ".($i+1)." : ";
		fscanf(STDIN, "%s", $nome);
		print "eta di $nome : ";
		fscanf(STDIN, "%d", $eta);
		fputs($f, str_pad($nome,20)."-".str_pad($eta,2)."\n");
	}
	
	fclose($f);
}

function ordina(){
	$f = fopen("persone", "r+") or die("errore nell'apertura del file\n");
	
	fseek($f, 0, 2);
	$n = ftell($f)/24;
	fseek($f, 0);
	do{
		$k = 0;
		for($i=0; $i<$n-1; $i++){
			$str = explode("-", fgets($f));
			$str2 = explode("-", fgets($f));
			if($str[0]>$str2[0]){
				fseek($f, 24*$i);
				fputs($f, implode("-", $str2));
				fputs($f, implode("-",$str));
				$k = $i+1;
			}
			fseek($f, 24*$i+24);
		}
		$n = $k;
		fseek($f, 0);
	}while($k);
	
	fclose($f);
}

function ordina2(){
	$f = fopen("persone", "r+") or die("errore nell'apertura del file\n");
	
	fseek($f, 0, 2);
	$n = ftell($f)/24;
	fseek($f, 0);
	do{
		$k = 0;
		$str = explode("-", fgets($f));
		for($i=1; $i<$n; $i++){
			$str2 = explode("-", fgets($f));
			if($str[0]>$str2[0]){
				fseek($f, 24*$i-24);
				fputs($f, implode("-", $str2));
				fputs($f, implode("-", $str));
				$k = $i+1;
			}else
				$str=$str2;
			fseek($f, 24*$i+24);
		}
		$n = $k;
		fseek($f, 0);
	}while($k);
	
	fclose($f);
}

function cerca(){
	print "nome da cercare : ";
	fscanf(STDIN, "%s", $ele);
	$ele = str_pad($ele, 20);
	
	$f = fopen("persone", "r") or die("errore nell'apertura del file\n");
	
	$alto = 0;
	fseek($f, 0, 2);
	$basso = ftell($f);
	$pos = -1;
	do{
		$i = ((int)(($alto/24+$basso/24)/2)*24);
		fseek($f, $i);
		if(($cor = fread($f,20)) == $ele)
			$pos = $i;
		else if($cor <$ele)
			$alto = $i+24;
		else
			$basso = $i-24;
	}while($alto<=$basso && $pos==-1);
	
	if($pos>=0){
		fseek($f, $pos);
		print fgets($f);
	}else
		print "nome non trovato\n";
	
	fclose($f);
}
?>

torna



Copyright © 2004-2024 thecsea.it (Claudio Cardinale - [email protected])! Tutti i diritti riservati. - contattaci