Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto
be quiet! debutta nel settore mouse da gaming con Dark Perk Ergo e Dark Perk Sym: due modelli gemelli per specifiche, con polling rate di 8.000 Hz anche in wireless, sensore PixArt PAW3950 da 32.000 DPI e autonomia dichiarata fino a 110 ore. Nel test, a 8.000 Hz si arriva a circa 30 ore reali, con ricarica completa in un'ora e mezza
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker
Analizziamo nel dettaglio DJI RS 5, l'ultimo arrivato della famiglia Ronin progettato per videomaker solisti e piccoli studi. Tra tracciamento intelligente migliorato e ricarica ultra rapida, scopriamo come questo gimbal eleva la qualità delle produzioni.
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming
AMD Ryzen 7 9850X3D è la nuova CPU gaming di riferimento grazie alla 3D V-Cache di seconda generazione e frequenze fino a 5,6 GHz. Nei test offre prestazioni superiori a 9800X3D e 7800X3D, confermando la leadership AMD nel gaming su PC.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-08-2007, 21: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, 16: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, 17: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, 17: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, 03: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, 21: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, 23: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, 12: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, 14: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, 15: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, 16: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, 17: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, 20: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 20:19.
71104 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto Dark Perk Ergo e Sym provati tra wireless, softw...
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker DJI RS 5: stabilizzazione e tracking intelligent...
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequen...
Le soluzioni FSP per il 2026: potenza e IA al centro Le soluzioni FSP per il 2026: potenza e IA al ce...
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa AWS annuncia European Sovereign Cloud, il cloud ...
Nimbus Innovation Awards 2026: le miglio...
SSD Samsung contraffatto, ma Windows e C...
Enrique Lores, CEO e presidente di HP, l...
SoftBank e Intel preparano la 'memoria d...
Il blocco dei porno per i minori è...
AMD: i nuovi processori Zen 6 saranno (i...
Ancora aumenti per le schede video Radeo...
Sonos presenta Amp Multi a ISE 2026: il ...
Una funzione esclusiva dei Pixel potrebb...
La Cina vieta ufficialmente le maniglie ...
HP e lavoro ibrido: le nuove cuffie Poly...
MSI sta lavorando a un dissipatore ottim...
27 offerte Amazon, le prime 5 in elenco ...
Il telescopio spaziale James Webb ha cre...
Il reboot di Painkiller tenta il rilanci...
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: 17:59.


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