Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Hyundai Ioniq 9: dopo due settimane di test non avremmo voluto restituirla
Hyundai Ioniq 9: dopo due settimane di test non avremmo voluto restituirla
Una ammiraglia elettrica, da sei o sette posti, con il comfort di viaggio come missione assoluta. Un'auto non per tutti, ma di cui ti innamori dopo pochi giorni, ecco com'è andata la nostra prova di lunga durata
LG UltraGear evo GM9: 27 pollici, 5K, Mini LED e Dual Mode
LG UltraGear evo GM9: 27 pollici, 5K, Mini LED e Dual Mode
Hyper Mini LED con 2.304 zone, DisplayPort 2.1 e Dual Mode: 5K a 165 Hz oppure QHD a 330 Hz: LG propone un monitor da gioco ma dalla buona versatilità creativa, con prestazioni interessanti e un listino di 1.220 euro. Peccato l'alimentatore ingombrante
Motorola edge 70 Fusion FIFA World Cup 26 Edition: un ottimo smartphone per i fan del calcio
Motorola edge 70 Fusion FIFA World Cup 26 Edition: un ottimo smartphone per i fan del calcio
Motorola edge 70 Fusion FIFA World Cup 26 Edition porta la maglia iridata su uno smartphone accessibile: display Extreme AMOLED da 6,78 pollici a 144Hz, fotocamera Sony LYTIA 710 con moto ai, Snapdragon 7s Gen 3 abbinato a 8GB di RAM, batteria da 5200 mAh con ricarica TurboPower a 68W e certificazione IP68/IP69, il tutto in una veste PANTONE Silhouette con logo dorato a 24 carati, moto buds bass incluse in confezione e contenuti software dedicati ai Mondiali 2026
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-08-2007, 20:25   #1
k_mishima
Member
 
Iscritto dal: Jan 2007
Messaggi: 173
[C] Raddoppiamento ricorsivo con swapping sui dati

Ciao a tutti, devo fare quest'esercizio per un esame a settembre ma mi sono bloccato sulla seconda richiesta.

Scrivere function C per calcolare una somma di molti addendi mediante raddoppiamento ricorsivo:
• (a) [liv.1] usando un array in memoria;
• (b) [liv.2] usando un array in un file solo parzialmente in memoria (con swapping di dati).

Per ora ho scritto questo codice, funzionante.
Codice:
#include<stdio.h>
int somma_ric(int array[],int primo,int ultimo);
main()
{
//Dichiarazione
	int array[100];
	int primo,ultimo;
	int n,i, somma;

//Input
	printf("Digita quanti sono i valori da sommare ");
	scanf("%d",&n);

//Ciclo in input, legge n dati
	for(i=0;i<n;i++)
	{
		printf("Digita il %d valore da sommare ", i+1);
		scanf("%d",&array[i]);
	}
	
	primo=0;
	ultimo=n-1;

//Chiamata function ricorsiva    
	somma=somma_ric(array,primo,ultimo);	

//Output
	printf("\nLa somma e' %d\n",somma);
	
	system("pause");
}


/*Function che effettua la somma tramite raddoppiamento ricorsivo di n valori dell'array
In input prende l'array, il primo elemento della porzione di array desiderata e l'ultimo*/
int somma_ric(int array[],int primo,int ultimo)
{
	int mediano;
	int somma;

//Nell'istanza banale il primo e l'ultimo sono adiacenti e la somma è data dalla somma di questi due
	if((ultimo-primo)==1)
	{
		somma=array[primo]+array[ultimo];
		
		return somma;
	}

//Negli altri casi si effettua la ricorsione
	else
	{
        
/*Se l'ultimo e il primo sono però lo stesso elemento si restituisce semplicemente
 l'elemento stesso */

		if(ultimo==primo)
			return array[primo];

///Negli altri casi si trova l'elemento mediano e si effettua il raddoppiamento ricorsivo
		else
		{
			mediano=(primo+ultimo)/2;
			
			somma=somma_ric(array,primo,mediano)+somma_ric(array,mediano+1,ultimo);
			
			return somma;
		}
	}	
}
Le mie domande sono
1 Cos'è uno swapping di dati e come si fa?
2 Il termine "raddoppiamento ricorsivo", l'ho cercato su internet ma non ho trovato una definizione, me la dareste voi? Nell'esercizio sono andato un po' a intuito, ho fatto 2 ricorsioni. Si intende questo per raddoppiamento?

Vi ringrazio anticipatamente per le vostre risposte
k_mishima è offline   Rispondi citando il messaggio o parte di esso
Old 17-08-2007, 15:02   #2
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Mi dispiace, ma anche io non ho idea cosa significhi "raddoppiamento ricorsivo". "Swapping di dati" forse si riferisce al classico swap con variabile di appoggio.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 17-08-2007, 16:39   #3
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
In effetti e' davvero curioso.
Lavorando di fantasia, potrebbe essere che ti chiede di dividere un array in due array piu' piccoli e via dicendo? "Raddoppiamento ricorsivo" potrebbe significare semplicemente questo, no?

Swapping di dati immagino semplicemente che si tratta di caricare/scaricare la porzione di array su cui ti interessa lavorare dal file che la contiene...
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 17-08-2007, 16:56   #4
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da sottovento Guarda i messaggi
In effetti e' davvero curioso.
Lavorando di fantasia, potrebbe essere che ti chiede di dividere un array in due array piu' piccoli e via dicendo? "Raddoppiamento ricorsivo" potrebbe significare semplicemente questo, no?
si, anche perché la seconda funzione mi sembra uno sconquassato tentativo di somma tramite divide et impera (credo che volesse dire quello il "raddoppiamento ricorsivo").
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 18-08-2007, 02:37   #5
k_mishima
Member
 
Iscritto dal: Jan 2007
Messaggi: 173
Grazie per le risposte.

Allora per il raddoppiamento ricorsivo ci ho preso? Che fortuna

Per lo swapping, non ho capito, perchè non ho proprio idea di cosa sia, è la prima volta che sento questo termine, me lo spieghereste in maniera semplice?
Devo forse mettere l'array in un file c a parte e caricarlo? (Non so come)
k_mishima è offline   Rispondi citando il messaggio o parte di esso
Old 20-08-2007, 20:01   #6
k_mishima
Member
 
Iscritto dal: Jan 2007
Messaggi: 173
up
k_mishima è offline   Rispondi citando il messaggio o parte di esso
Old 20-08-2007, 22:11   #7
AngeL)
Senior Member
 
L'Avatar di AngeL)
 
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
che io sappia, uno swapping è questo:
Codice:
int a = 10;
int b = 20;
int temp = a;
a = b;
b = temp;
ma non penso sia questociò che s'intende
AngeL) è offline   Rispondi citando il messaggio o parte di esso
Old 21-08-2007, 11:28   #8
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
Quote:
Originariamente inviato da AngeL) Guarda i messaggi
che io sappia, uno swapping è questo:
Codice:
int a = 10;
int b = 20;
int temp = a;
a = b;
b = temp;
ma non penso sia questociò che s'intende
Non penso intenda questo ma piuttosto lo swap derivante dall' utilizzo nei sistemi operativi di aumentare la capacità della memoria volatile attraverso altri supporti(esempio fare swap su disco quando la Ram non basta).Per cui leggendo la traccia ipotizzo una cosa del genere:
memorizzare un array su un file e caricarne in una variabile solo una porzione per volta.
Una cosa del genere

ipotizziamo che nel file c sia un array di dimensione 100.
Ne carico 10 celle per volte in un array e lavoro..finche ho utilizzato tutto l' array...
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 21-08-2007, 13:47   #9
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da nuovoUtente86 Guarda i messaggi
Non penso intenda questo ma piuttosto lo swap derivante dall' utilizzo nei sistemi operativi di aumentare la capacità della memoria volatile attraverso altri supporti(esempio fare swap su disco quando la Ram non basta).Per cui leggendo la traccia ipotizzo una cosa del genere:
memorizzare un array su un file e caricarne in una variabile solo una porzione per volta.
Una cosa del genere

ipotizziamo che nel file c sia un array di dimensione 100.
Ne carico 10 celle per volte in un array e lavoro..finche ho utilizzato tutto l' array...
si ma abbi pazienza, è una vera e propria idiozia, è inutile fare tutto sto lavoro se poi tanto ci pensa già il sistema operativo che tra l'altro non è neanche detto che metta i dati fisicamente sul disco visto che è lui a decidere quali pagine devono restare in memoria fisica e quali devono essere swappate su disco... su Windows la cosa è programmabile ma dubito fortemente che un esercizio di quella portata richieda l'uso di API Win32...

diciamo piuttosto che a scrivere il testo di quell'esercizio dev'essere stata una donna
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 21-08-2007, 14:24   #10
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
Quote:
Originariamente inviato da 71104 Guarda i messaggi
si ma abbi pazienza, è una vera e propria idiozia, è inutile fare tutto sto lavoro se poi tanto ci pensa già il sistema operativo che tra l'altro non è neanche detto che metta i dati fisicamente sul disco visto che è lui a decidere quali pagine devono restare in memoria fisica e quali devono essere swappate su disco... su Windows la cosa è programmabile ma dubito fortemente che un esercizio di quella portata richieda l'uso di API Win32...

diciamo piuttosto che a scrivere il testo di quell'esercizio dev'essere stata una donna
si l' esercizio non ha molto senso.Quello che dicevo io però non prevede l' interagire con le api native del sistema,ma in modo piu banale deve essere lui a simulare uno swap sulla grandezza dell' array.

Tanto per curiosità,su che livello in windows è programmabile lo swap?
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 21-08-2007, 15:35   #11
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da nuovoUtente86 Guarda i messaggi
si l' esercizio non ha molto senso.Quello che dicevo io però non prevede l' interagire con le api native del sistema,ma in modo piu banale deve essere lui a simulare uno swap sulla grandezza dell' array.

Tanto per curiosità,su che livello in windows è programmabile lo swap?
stavo parlando molto in generale. di fattori che influenzano lo swap su disco in Windows per ora mi vengono in mente i seguenti:
- le pagine possono essere bloccate in memoria fisica con VirtualLock e poi sbloccate con VirtualUnlock
- è possibile regolare la quota per il "working set" di ciascun processo, cioè la quantità massima di memoria allocata che può stare in memoria fisica
- i drivers spesso necessitano di allocare memoria residente per vari motivi, per esempio perché devono accedervi in dei momenti in cui l'interrupt del page fault è mascherata (IRQL <= DISPATCH_LEVEL), o perché le routines che vi accedono potrebbero essere richiamate indirettamente dall'algoritmo stesso di swap; di conseguenza esiste il pool non paginato.

ma non è detto che non ce ne siano altri. per esempio se il testo dell'esercizio si riferisse realmente allo swap come lo effettua il sistema operativo, e se fosse assennato usare API Win32 per risolverlo, io aprirei il file utilizzando i flag FILE_FLAG_NO_BUFFERING e FILE_FLAG_WRITE_THROUGH (vedi CreateFile) in maniera tale da rendere effettiva qualsiasi scrittura sul file (così avrei la certezza di provocare uno swap effettivo, anche se come ho detto è una discreta idiozia).
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 21-08-2007, 16:06   #12
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
Quote:
Originariamente inviato da 71104 Guarda i messaggi
stavo parlando molto in generale. di fattori che influenzano lo swap su disco in Windows per ora mi vengono in mente i seguenti:
- le pagine possono essere bloccate in memoria fisica con VirtualLock e poi sbloccate con VirtualUnlock
- è possibile regolare la quota per il "working set" di ciascun processo, cioè la quantità massima di memoria allocata che può stare in memoria fisica
- i drivers spesso necessitano di allocare memoria residente per vari motivi, per esempio perché devono accedervi in dei momenti in cui l'interrupt del page fault è mascherata (IRQL <= DISPATCH_LEVEL), o perché le routines che vi accedono potrebbero essere richiamate indirettamente dall'algoritmo stesso di swap; di conseguenza esiste il pool non paginato.).
cos' è un pool non paginato?

Quote:

ma non è detto che non ce ne siano altri. per esempio se il testo dell'esercizio si riferisse realmente allo swap come lo effettua il sistema operativo, e se fosse assennato usare API Win32 per risolverlo, io aprirei il file utilizzando i flag FILE_FLAG_NO_BUFFERING e FILE_FLAG_WRITE_THROUGH (vedi CreateFile) in maniera tale da rendere effettiva qualsiasi scrittura sul file (così avrei la certezza di provocare uno swap effettivo, anche se come ho detto è una discreta idiozia).
tempo fa mi ponevo una domanda del genere,forse mi h indirettamente risposto,in questo caso intendi che se un file in ram viene modificato la scrittura avviene subito sul disco?
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 21-08-2007, 19:16   #13
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da nuovoUtente86 Guarda i messaggi
cos' è un pool non paginato?
il pool non paginato. ce n'è uno solo in tutto il sistema, anche se il Task Manager indica una quota per ogni processo (i drivers spesso agiscono nel contesto di processi arbitrari e quindi per ciascun processo risulta una quantità di memoria allocata nel nonpaged pool).

il pool non paginato è il monnezzaio dove i drivers e i componenti kernel-mode allocano memoria perennemente residente; è un heap i cui frames fisici non vengono mai swappati. è chiaramente una risorsa di sistema piuttosto esigua, percui i drivers devono farne un uso limitato ed utilizzare il pool paginato ogni volta che sia possibile.
per allocare un blocco di memoria nel pool non paginato bisogna chiamare la funzione ExAllocatePoolWithTag passandole il valore NonPagedPool.

Quote:
tempo fa mi ponevo una domanda del genere,forse mi h indirettamente risposto,in questo caso intendi che se un file in ram viene modificato la scrittura avviene subito sul disco?
intendo che chiamando WriteFile su un HANDLE creato dalla CreateFile con quei due flag la scrittura ha effetto immediato sul disco, cioè di fatto in runtime vedrai il disco lavorare e il led accendersi. infatti mi pare anche che in questi casi la WriteFile fallisce se la dimensione del buffer da scrivere non è un multiplo della dimensione di un settore del disco.

Ultima modifica di 71104 : 21-08-2007 alle 19:19.
71104 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Hyundai Ioniq 9: dopo due settimane di test non avremmo voluto restituirla Hyundai Ioniq 9: dopo due settimane di test non ...
LG UltraGear evo GM9: 27 pollici, 5K, Mini LED e Dual Mode LG UltraGear evo GM9: 27 pollici, 5K, Mini LED e...
Motorola edge 70 Fusion FIFA World Cup 26 Edition: un ottimo smartphone per i fan del calcio Motorola edge 70 Fusion FIFA World Cup 26 Editio...
Renault 5 elettrica al giudizio definitivo: solo stupore iniziale o premi meritati? Renault 5 elettrica al giudizio definitivo: solo...
HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix HONOR CHOICE Projector Air Pro: piccolo, portati...
Prezzi iPhone 17 in aumento: gli ultimi ...
Edge segue Chrome: a rischio molte esten...
Studi su batteri e archaea: la vita sull...
Claude Code, le diverse sessioni ora par...
I sistemi di sicurezza attuali non basta...
iPhone, nuove indiscrezioni sul modello ...
Le iconiche Sony WH-1000XM4 stanno per t...
TV 55 pollici in offerta: Xiaomi 4K a 32...
Robot per le piscine in offerta su Amazo...
Nessun downgrade a Vera e Rubin Ultra, s...
Ho costruito un agente IA locale dentro ...
TOP 10 Amazon del weekend, si inizia col...
Google sta costruendo un data center da ...
SSD NVMe 4TB in offerta: Acer Predator e...
Robot aspirapolvere in offerta su Amazon...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 18:27.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v