Torna indietro   Hardware Upgrade Forum > Software > Programmazione

L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint
Abbiamo intervistato Sumit Dhawan, CEO di Proofpoint, per capire come stia cambiando il mondo della sicurezza con l'avvento dell'intelligenza artificiale e con il ritmo sempre più serrato a cui vengono trovate vulnerabilità nel software. Un problema significativo, che richiederà del tempo per essere risolto (o quantomeno arginato)
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
La parola d'ordine al Nextcloud Summit 2026, che si è tenuto a Monaco, è stata "sovranità". Non come è spesso usato questo termine in politica ma, al contrario, come capacità positiva di decidere il proprio destino tecnologico, con modalità collaborative e aperte. L'Europa dice già molto nel mondo open source, che viene visto come mezzo per ottenere la tanto agognata autonomia digitale
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più
Dreame X60 Pro Ultra Complete implementa due bracci estensibili, per spazzola e moccio, che si spingono ben oltre quanto visto sino ad oggi permettendo una pulizia di casa ancor più capillare e precisa
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 28-06-2006, 10:49   #1
AngeL)
Senior Member
 
L'Avatar di AngeL)
 
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
[C++] Domande varie per un codice

stamattina ho scritto questo codice per fare le cose scritte nel commento a inizio codice.
le domande che vi faccio sono dopo il codicino di 101 righe
Codice:
/*Definire l’algoritmo per leggere un numero noto(N) di numeri reali e
contare:
1)	quelli maggiori/minori di numero prefissato
2)	quelli positivi
3)	quelli divisibili per  numero prefissato
    (avendo a disposizione l’operatore %) 
*/
#include <iostream>
using namespace std;

int main()
{
int n;
cout << "Quanti numeri reali desidera immettere?: ";
cin >> n;
int arr[n];
int pos[n];
int divx[n];
int M[n];
int m[n];
int Mm;
int x;
int i;
int currparr=0;
int currpM=0;
int currpm=0;
int currpp=0;
int currpd=0;
	for(i=0;i<=n;i++)
	{
	cout << "Inserisca il " << n << "esimo numero: ";
	cin >> arr[i];
	pos[i]=0;
	divx[i]=0;
	M[i]=0;
	m[i]=0;
	}
cout << "Inserisca il numero, del quale verranno calcolati i numeri"
     << " maggiori e minori presenti nella sequenza immessa.\n"
	 << "Il numero non deve essere uguale a nessuno dei numeri"
	 << " presenti nella sequenza.\n";
cin >> Mm;
cout << "Inserisca il numero del quale verranno calcolati i divisori"
     << " presenti nella sequenza immessa.\n";
cin >> x;

	do
	{
		if(arr[currparr]>Mm)
		{
		M[currpM]=arr[currparr];
		}
		if(arr[currparr]<Mm)
		{
		m[currpm]=arr[currparr];
		}
	currparr++;
	}while(currparr==49);
currparr=0;
	do
	{
		if(arr[currparr]>0)
		{
		pos[currpp]=arr[currparr];
		}
	currparr++;
	}while(currparr==49);
currparr=0;
	do
	{
		if(arr[currparr]%x==0)
		{
		divx[currpd]=arr[currparr];
		}
	currparr++;
	}while(currparr==49);
cout << "I numeri maggiori di "<< Mm << " presenti nella sequenza sono:\n";
	for(i=0;i<=currpM;i++)
	{
	cout << M[i] << ", ";
	}
cout << endl;
cout << "I numeri minori di " << Mm << " presenti nella sequenza sono:\n";
	for(i=0;i<=currpm;i++)
	{
	cout << m[i] << ", ";
	}
cout << endl;
cout << "I numeri positivi presenti nella sequenza sono:\n";
	for(i=0;i<=currpp;i++)
	{
	cout << pos[i] << ", ";
	}
cout << endl;
cout << "I numeri divisibili per " << x << " sono:\n";
	for(i=0;i<=currpd;i++)
	{
	cout << divx[i] << ", ";
	}
cout << endl;
}
1)come faccio a creare un array di n valori se non posso usare una variabile?
posso definire una costante cosi?-> const x=n; ?//dove n e la variabile che contiene la quantta di numeri che deve avere l'array

2)esiste una funzione che restituisce la prima posizione che ha valore 0 dell'array?, cosi da evitarmi curr(ent)p(os)arr, ecc ecc? (se non esiste ho pensato di crearla io, dandole il nome dell'array come argomento e facendole restituire la prima posizione che contiene 0(es. currp(divx) )

3) come posso accorciare questo codice?

4)se avete qualche consiglio che non rientra nelle 3 domande postatelo pure

grazie 1000 in anticipo.

Ultima modifica di AngeL) : 28-06-2006 alle 10:53.
AngeL) è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2006, 10:59   #2
Andlea
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 357
1 - Non ho capito la domanda. Cosa devi fare esattamente? creare un vettore di n variabili conoscendo n soloa runtime? puoi farlo
Dichiarare una costante che contiene una variabile è un paradosso e non capisco a cosa serva
Usa direttamente n.

2 - Premetto che non capisco perchè usi dei do while incrementando manualmente l'iteratore dell'array quando puoi usare un normale ciclo for come fai sopra e sotto.
La funzione devi fartela, è banale
Codice:
int Nomefunzione(int *v, int n){
for(int i = 0; i < n; i++)
if(v[i]==0) return i;
}
3 - Non ho guardato tutto, ma puoi tranquillamente dichiarare più variabili in una riga
invece di
Codice:
int a;
int b;
puoi fare
Codice:
int a, b;
oppure in:
Codice:
	for(i=0;i<=n;i++)
	{
	cout << "Inserisca il " << n << "esimo numero: ";
	cin >> arr[i];
	pos[i]=0;
	divx[i]=0;
	M[i]=0;
	m[i]=0;
	}
Nel primo cout ci va i, non n
inoltre se pos, divx, M ed m li azzeri, puoi farlo fuori dal for usando memset();

Questo
Codice:
do
	{
		if(arr[currparr]>Mm)
		{
		M[currpM]=arr[currparr];
		}
		if(arr[currparr]<Mm)
		{
		m[currpm]=arr[currparr];
		}
	currparr++;
	}while(currparr==49);
Puoi riassumerlo così:
Codice:
for(int i = 0; i < n; i++){
        if(arr[i]>Mm)
         	M[i]=arr[i];
	if(arr[i]<Mm)
	       m[i]=arr[i];
}
ecc....
Se hai una solo istruzione in un blocco if o for, puoi evitare le parentesi
Inoltre quel 50 cosa sarebbe?

Ultima modifica di Andlea : 28-06-2006 alle 11:06.
Andlea è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2006, 11:10   #3
AngeL)
Senior Member
 
L'Avatar di AngeL)
 
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
ehm... quel 50 era il codice che stavo scrivendo pensando che la variabile fosse 50 che scemo...
correggo tutto, grazie 10³
AngeL) è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2006, 11:11   #4
AngeL)
Senior Member
 
L'Avatar di AngeL)
 
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
la prima domanda e come faccio a dichiarare un array se so da quante parti è composto solo a runtime?
AngeL) è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2006, 11:13   #5
Andlea
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 357
Ah ok, ora ho visto meglio il codice ed ho capito
Codice:
int *arr = new int[n], *pos = new int[n], *divx = new int[n];
int *M = new int[n], *m = new int[n];
Andlea è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2006, 11:16   #6
AngeL)
Senior Member
 
L'Avatar di AngeL)
 
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
cosa significa int *arr= new int[n]?

e perche alla fnzione dell'array devo passare l'array per riferimento?
AngeL) è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2006, 11:21   #7
Andlea
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 357
DAlla teoria un array è una sequenza di celle di memoria
La variabile con cui fai riferimento a quello spazio di memoria è di fatto un puntatore al primo elemento.
C++ permette di istanziare in ogni momento memoria
int *variabile; quindi dichiara un puntatore
new int[n] dice di istanziare memopria per n int
con l'operatore = si associa l'indirizzo restituito da new al puntatore.

Quindi è chiaro che per passare il vettore ad una funzione sarà necessario passare solo l'indirizzo di memoria.
Inoltre in C i vettori vengono passati solo per riferimento, mai per copia.
Tienine conto, perchè facendo modifiche sul puntatore passato come parametro, modifichi il vettore originale.

Prima di andare sul compilatore questi concetti andrebbero studiati meglio.
Andlea è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2006, 11:24   #8
AngeL)
Senior Member
 
L'Avatar di AngeL)
 
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
lo faro, grazie
AngeL) è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2006, 11:30   #9
AngeL)
Senior Member
 
L'Avatar di AngeL)
 
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
memset lo devo usare cosi?
Codice:
for(i=0;i<=n;i++)
{
memset(arr[i],0,0);
}
AngeL) è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2006, 12:22   #10
AngeL)
Senior Member
 
L'Avatar di AngeL)
 
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
Quote:
Originariamente inviato da Andlea
Codice:
for(int i = 0; i < n; i++){
        if(arr[i]>Mm)
         	M[i]=arr[i];
	if(arr[i]<Mm)
	       m[i]=arr[i];
}
se non sbaglio li c'è un errore, perche se il primo num maggiore di Mm in arr è al numero 20, verra scritto nella cella n.20 di M, mentre dovrebbe essere nella 0. questo dovrebbe essere corretto:
Codice:
for(int i = 0; i < n; i++){
        if(arr[i]>Mm)
         	M[nextpos(&M,n)]=arr[i];
	if(arr[i]<Mm)
	       m[nextpos(&m,n)]=arr[i];
}
AngeL) è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2006, 12:43   #11
Andlea
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 357
Quote:
Originariamente inviato da AngeL)
memset lo devo usare cosi?
Codice:
for(i=0;i<=n;i++)
{
memset(arr[i],0,0);
}
No, così non avrebbe utilità, basterebbe fare arr[i]=0;
Va usato così
memset(arr, 0, sizeof(int*)*n);
Senza for, in questo modo scrive tutte le n celle con uno 0.
Il primo parametro è il valore, il secondo è la dimensione della zona di memoria da settare

Per la seconda porzione di codice era solo per farti vedere più o meno come fare, non ho controllato gli indici
Andlea è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2006, 12:49   #12
Andlea
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 357
Ah, cosa che avrei dovuto dire subito.... se devi soltanto mostrare i valori, a che ti serve segnarteli in 4 vettori diversi??
Il programma si può riassumere così:


<codice per acquisire i dati>
printf("Numeri maggiori di Mn\n");
for(int i = 0; i < n; i++)
if(arr[i] > Mn) printf("%d ", arr[i]);

printf("\nNumeri minori di Mn\n");
for(int i = 0; i < n; i++)
if(arr[i] < Mn) printf("%d ", arr[i]);

printf("\nNumeri positivi\n");
for(int i = 0; i < n; i++)
if(arr[i] > 0) printf("%d ", arr[i]);

printf("\nNumeri divisibili per x\n");
for(int i = 0; i < n; i++)
if(arr[i]%x==0) printf("%d ", arr[i]);

fine
Andlea è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2006, 12:55   #13
Andlea
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 357
Codice:
#include <iostream>
using namespace std;

int main(){
int n, Mm, x;
cout << "Quanti numeri reali desidera immettere?: ";
cin >> n;
int *arr = new int[n];

for(int i=0;i<n;i++){
	cout << "Inserisca il numero" << i+1;
	cin >> arr[i];
}

cout << "Inserisca il numero, del quale verranno calcolati i numeri"
     << " maggiori e minori presenti nella sequenza immessa.\n"
	 << "Il numero non deve essere uguale a nessuno dei numeri"
	 << " presenti nella sequenza.\n";
cin >> Mm;
cout << "Inserisca il numero del quale verranno calcolati i divisori"
     << " presenti nella sequenza immessa.\n";
cin >> x;

printf("Numeri maggiori di Mn\n"); 
for(int i = 0; i < n; i++) 
if(arr[i] > Mm) printf("%d ", arr[i]); 

printf("\nNumeri minori di Mn\n"); 
for(int i = 0; i < n; i++) 
if(arr[i] < Mm) printf("%d ", arr[i]); 

printf("\nNumeri positivi\n"); 
for(int i = 0; i < n; i++) 
if(arr[i] > 0) printf("%d ", arr[i]); 

printf("\nNumeri divisibili per x\n"); 
for(int i = 0; i < n; i++) 
if(arr[i]%x==0) printf("%d ", arr[i]);

printf("fatto");
}
Andlea è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2006, 13:14   #14
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da Andlea
Va usato così
memset(arr, 0, sizeof(int*)*n);
ocio che hai messo sizeof(int*) ma é sizeof(int)
arr non é un array di puntatori ad int.
Tu magari hai fatto un errore di distrazione o di copia/incolla ma AngeL) non lo sa.
E gli va di culo che al 99% int e int * hanno la stessa sizeof
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2006, 14:24   #15
Andlea
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 357
acc, vero non me ne ero accorto
Andlea è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint L'IA cambia tutte le regole della sicurezza tra ...
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026 L'Europa conta nella tecnologia e può ess...
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più Dreame X60 Pro Ultra Complete: i bracci si esten...
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati TCL 65C8L, la recensione del SQD-Mini LED da 440...
MSI Maestro 500 Wireless: ANC e 90 ore di autonomia a 70 euro MSI Maestro 500 Wireless: ANC e 90 ore di autono...
Apple MacBook Neo 13'' con chip A18 Pro ...
Insieme a Leica SL3-P presentate le otti...
La Cina svilupperà anche il razzo...
Rocket Lab e la missione Victus Haze per...
Starship: Ship 40 ha eseguito uno static...
I nuovi Samsung Galaxy Watch 9 si mostra...
Einsten aveva ragione, di nuovo: captate...
Top 10 offerte Amazon: 5 sono partite qu...
AI Conf 2026: l'intelligenza artificiale...
Samsung Galaxy S26 scende a 711,49€: un ...
Dopo il maxi blackout, la Spagna cambia ...
Costa meno di un MacBook e fa molto di p...
Ecco tutti i robot aspirapolvere rimasti...
Più partite da seguire in contemporanea?...
389€ sono veramente pochi per questo PC ...
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: 12:12.


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