[C++] Scambio coppia di elementi di un vettore

deangelis
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
P_1_6
Hey non conosco il c++ ma vedendo il tuo codice mi sorge una domanda:

se N >100 che succede?

vict85
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.

"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 :lol:

P_1_6
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?

vict85
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).

P_1_6
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?

vict85
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.

P_1_6
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

deangelis
grazie mille per le risposte.
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.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.