[C++] Scambio coppia di elementi di un vettore
ciao a tutti, volevo chiedervi cosa sbaglio in questo programma. grazie mille
// Assegnato un vettore di interi di riempimento N, provvedere a scambiare
// ogni coppia di elementi. Nel caso di N dispari, la posizione dell’ultimo
// elemento resta invariata.
#include <iostream>
#define dim 100
using namespace std;
int main() {
int temp, N, A[dim], B[dim];
cout << "Riempimento=";
cin >> N;
for (int i = 0; i < N; i++) {
cout << "Elemento A[" << i << "]=";
cin >> A[i];
}
cout << "A=[";
for (int i = 0; i < N; i++) {
cout << A[i] << " ";
}
cout << "]" << endl;
//*********************************************************************************************************************************************
for (int i = 0; i < N / 2; i = i + 2) {
temp = A[i];
A[i] = A[i + 1];
A[i + 1] = temp;
}
cout << "A=[";
for (int i = 0; i < N; i++) {
cout << A[i] << " ";
}
cout << "]" << endl;
system("PAUSE");
return 0;
}
Risposte
Hey non conosco il c++ ma vedendo il tuo codice mi sorge una domanda:
se N >100 che succede?
se N >100 che succede?
A parte il dover tenere conto della problematica sollevata da P_1_6, la condizione di fine ciclo deve essere i < N-1 .
Per esempio con \(\displaystyle N=7 \) la condizione viene soffisfatta per \(\displaystyle i = 0, 2, 4 \) mentre ti fermi a \(\displaystyle i = 6 = 7-1 \). Per \(\displaystyle N = 8 \), il valore \(\displaystyle i = 6 \) è invece accettabile.
Succede questo https://en.wikipedia.org/wiki/Buffer_overflow , sempre ovviamente che tu abbia voglia di inserire manualmente più di cento numeri da tastiera
Per esempio con \(\displaystyle N=7 \) la condizione viene soffisfatta per \(\displaystyle i = 0, 2, 4 \) mentre ti fermi a \(\displaystyle i = 6 = 7-1 \). Per \(\displaystyle N = 8 \), il valore \(\displaystyle i = 6 \) è invece accettabile.
"P_1_6":
Hey non conosco il c++ ma vedendo il tuo codice mi sorge una domanda:
se N >100 che succede?
Succede questo https://en.wikipedia.org/wiki/Buffer_overflow , sempre ovviamente che tu abbia voglia di inserire manualmente più di cento numeri da tastiera
Quindi se un software a pagamento viene comprato , aperto e modificato con un buffer overflow nel posto giusto si può causare un Heap overflow. Poi chiuso e reso scaricabile gratuitamente chiunque che sappia della modifica può prendere il controllo dell'intero sistema?
La cosa è un po' più complessa di così. I sistemi operativi hanno delle contromisure per impedire questo tipo di attacchi; seppur non siano sicuramente sufficienti (e non parlo di antivirus e firewall).
Io ho pensato questo:
basta cifrare gli opcodes che partono dall'heap e in caso di istruzioni non aspettate avvertire e bloccare applicazione.
però cifrare=tempo
che ne pensi?
basta cifrare gli opcodes che partono dall'heap e in caso di istruzioni non aspettate avvertire e bloccare applicazione.
però cifrare=tempo
che ne pensi?
Penso di non saperne abbastanza dell'argomento per dare una opinione ragionata. Se ti interessa puoi provare a seguire questo https://www.coursera.org/course/softwaresec ma richiede una conoscenza abbastanza decente del C quindi non saprei dire quanto potresti capire.
grazie
il problema non è conoscere C quello richiede tempo costante mentre l'inglese tempo esponenziale .
Comunque ora do un occhiata con il traduttore.
grazie ancora
P.s. potresti darmi un parere per viewtopic.php?f=15&t=154218
per piacere
il problema non è conoscere C quello richiede tempo costante mentre l'inglese tempo esponenziale .
Comunque ora do un occhiata con il traduttore.
grazie ancora
P.s. potresti darmi un parere per viewtopic.php?f=15&t=154218
per piacere
grazie mille per le risposte.
il programma adesso funziona avendo messo l'uguale, ma ho dovuto cambiare anche il ciclo dello scambio in:
poichè come era impostato prima non mi dava l'ultimo valore.
il programma adesso funziona avendo messo l'uguale, ma ho dovuto cambiare anche il ciclo dello scambio in:
temp=A[N-i-1];
A[N-i-1]=A[i];
A[i]=temp;
poichè come era impostato prima non mi dava l'ultimo valore.