Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare
Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare
Abbiamo messo alla prova il drone Antigravity A1 capace di riprese in 8K a 360° che permette un reframe in post-produzione ad eliche ferme. Il concetto è molto valido, permette al pilota di concentrarsi sul volo e le manovre in tutta sicurezza e decidere con tutta tranquillità come gestire le riprese. La qualità dei video, tuttavia, ha bisogno di uno step in più per essere competitiva
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Dopo oltre 4 anni si rinnova la serie Sony Alpha 7 con la quinta generazione, che porta in dote veramente tante novità a partire dai 30fps e dal nuovo sensore partially stacked da 33Mpixel. L'abbiamo provata per un breve periodo, ecco come è andata dopo averla messa alle strette.
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1
realme e Aston Martin Aramco F1 Team si sono (ri)unite dando alla vita un flagship con chip Snapdragon 8 Elite Gen 5 e design esclusivo ispirato alle monoposto di Formula 1. La Dream Edition introduce la nuova colorazione Lime Essence abbinata al tradizionale Aston Martin Racing Green, decorazioni intercambiabili personalizzate e una confezione a tema F1, intorno a uno smartphone dall'ottima dotazione tecnica con batteria da 7000mAh ricaricabile a 120W e isola fotografica intercambiabile
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


Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare Antigravity A1: drone futuristico per riprese a ...
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator Sony Alpha 7 V, anteprima e novità della ...
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1 realme GT 8 Pro Dream Edition: prestazioni da fl...
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum OVHcloud Summit 2025: le novità del cloud...
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI C...
Una nuova immagine della cometa interste...
'La soluzione a un problema che non esis...
Radeon RX 9000 sì, Ryzen 9000 no:...
Amazon versa 180 milioni al Fisco e canc...
Meta, il Board di Supervisione guarda o...
DJI rivoluziona le consegne aeree: il nu...
Fibercop e Microsoft Italia uniscono per...
App Store Award 2025: scarica le 17 app ...
NVIDIA fa marcia indietro, il supporto P...
Addio definitivo alla GeForce GTX 1080: ...
Numeri record per gli iPhone 17: Apple s...
L'Italia del 2025 raccontata da Google: ...
Piaggio lancia Porter NPE, il pick-up el...
Xiaomi L1 a 153€: il proiettore smart 10...
Dopo Amazon, anche il data center di Gro...
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:48.


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