Problem ze zmianami kolejności wartości w tablicy

0

Witam, mam pewien problem. Otóż mam za zadanie do tablicy N elementowej wczytać jakieś wartości, zamienić miejscami pierwszy z drugim i wyświetlić zmienioną tablicę np. wpisuję liczby {5,9,4,8,6} a program wypluwa {9,5,8,4,6}. Programik mam napisany jednak ta zamiana nie za bardzo wychodzi i bardzo bym prosił kogoś o w skazanie gdzie jest błąd. Jak wpiszę 2 wartości do tablicy np. {5,9} to dostaje wynik {9,0} czyli druga liczba wchodzi na pierwszą, ale ta pierwsza gdzieś znika na 0:| Poniżej kod programu. Dzięki z góry za pomoc.

 
#include<iostream>
using namespace std;

int main()
{
 int n, i, pomocnicza;
 do 
 {
    cout<<"Ile mam wpisac liczb do tablicy ? "<<endl;
    cin>>n;
    if(n<0)
    cout<<"BLAD MNIEJSZA OD ZERA"<<endl;
  }
 while(n<0);
int tablica[n];
 
for(i=0; i<n; i++)
  {
        cout<<"Podaj wartosc indexu nr: "<<i+1<<endl;
        cin>>tablica[i];  
  }

pomocnicza=0;

for(i=0; i<n; i++)
    {
        pomocnicza=tablica[i];
        tablica[i]=tablica[i+1];
        tablica[i+1]=pomocnicza;
    }


cout<<"wydruk kontrolny tablicy zmienionej"<<endl;
for(i=0;i<n; i++)
   cout<<tablica[i]<<endl;

cin.ignore();
cin.get();
return EXIT_SUCCESS;
}

0

Lepiej sformatuj, to po pierwsze.
Po drugie nie deklarujemy tak tablic dynamicznych(int tablica[n]), tylko przez operator new.
Po trzecie wychodzisz poza zakres. Jesli i bedzie mialo wartość 1, a jako n podasz 2, jak myslisz, co bedzie pod tablica[i+1] ?
PS. Jako warunek w forze daj i<n-1.

0

Ty tutaj nie zamieniasz tylko pierwszej z drugą, ale wykonujesz zamianę n-1 razy.

Zamiast

for(i=0; i<n; i++)
    {
        pomocnicza=tablica[i];
        tablica[i]=tablica[i+1];
        tablica[i+1]=pomocnicza;
    }

Wystarczy

pomocnicza=tablica[0];
tablica[0]=tablica[1];
tablica[1]=pomocnicza;

Po 2 - jeśli z góry nie znasz wielkości tablicy, musisz ją deklarować dynamicznie tzn:

int *tablica = new int[n];

Po 3 - po co Ci

cin.ignore()

na końcu programu?

0

Przecież sam napisał, że musi zamienić tylko pierwszy z drugim elementem.

0

Napisałem, jakbym wpisał 2 wartości {5,9} to mialoby to wyglądac {9,5} jakbym wpisał 7 wartości {2,3,4,5,6,7,8} to mialoby wygladac {3,2,5,4,6,7,8}

Zmieniłem tablicę na stałą wartość powiedzmy 5 tylko że to i tak nic nie działa. Tzn. po zamianie tablicy na statyczną ta operacja działa dla dwóch elementów, ale jak dam 3 albo więcej to już wychodzą dziwne wyniki.

0
#include<iostream>
using namespace std;

int main()
{
 int n, i, pomocnicza;
 int *tablica = new int[n];
 do
 {
    cout<<"Ile mam wpisac liczb do tablicy ? "<<endl;
    cin>>n;
    if(n<0)
    cout<<"BLAD MNIEJSZA OD ZERA"<<endl;
  }
 while(n<0);
 
for(i=0; i<n; i++)
  {
        cout<<"Podaj wartosc indexu nr: "<<i+1<<endl;
        cin>>tablica[i];  
  }

pomocnicza=0;

for(i=0; i<n; i+=2)
    {
        pomocnicza=tablica[i];
        tablica[i]=tablica[i+1];
        tablica[i+1]=pomocnicza;
    }


cout<<"wydruk kontrolny tablicy zmienionej"<<endl;
for(i=0;i<n; i++)
   cout<<tablica[i]<<endl;

cin.ignore();
cin.get();
return EXIT_SUCCESS;
}

powinno działać

0

faktycznie co 2 przeciez pętla musi leciec :) kurde dzieki wielkie za pomoc

0

ale wiecie co... to rozwiązanie dobrze działa, kiedy ilość indexów w tablicy jest parzysta, jak jest nieparzysta to ostatnia pozycja w tablicy przedstawia się kosmicznie ;D np wprowdzam 7 liczb do tablicy {4,5,6,7,8,9,1} a otrzymuje taki wynik {5,4,7,6,9,8,280)

0

Bo tam powinno być i < n-1. Nie zauważyłem wcześniej.

0

Pewnie dlatego, że w takim przypadku wychodzisz poza zakres tej tablicy (możesz dać warunek wyjścia z pętli zamiast i < n to i < n - n%2 - tak na szybko, nie zastanawiałem się nad tym specjalnie)

1 użytkowników online, w tym zalogowanych: 0, gości: 1