• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wpisywanie n elementow do tablicy i wypisywanie ich w odwrotnej kolejnosci

Object Storage Arubacloud
0 głosów
7,458 wizyt
pytanie zadane 23 czerwca 2017 w C i C++ przez fermix Nowicjusz (200 p.)

Witam, mam mały problem. Napisałem sobie taki oto kod który ma za zadanie określoną liczbę razy wczytać podaną ilość liczb do tablicy oraz wypisać je w odwrotnej kolejności. Program teoretycznie działa ale podczas wypisywania liczb z tablicy poraz pierwszy wypisuje jako pierwszą (ostatnią w tablicy) jakąś wielką liczbę której wcześniej nie wpisywałem. Poniżej dołączam kod i screeny tego co program wypisuje w konsoli. Jest ktoś w stanie wytłumaczyć dlaczego tak się dzieje?

#include <iostream>

using namespace std;
int t,n,j;
int k=0;
int main()
{
    cout << "Wprowadz liczbe testow: " << endl;
    cin >>t;
    if ((t<0)||(t>100))
        {
            cout<<"Wprowadz liczbe od 0 do 100"<<endl;
            cin>>t;
        }
    while(t>0)
        {
        cout<<"Wprowadz liczbe elementow a nastepnie kolejno liczby: "<<endl;
        cin>>n;
        int tablica[(n-1)];
        for(j=0;j<n;j++)
            {
            cin>>tablica[j];
            k++;
            }
        while(k>=0)
            {
            cout<<tablica[k]<<" ";
            k--;
            }
        t--;
        }
    return 0;
}


Z góry dziekuje za odpowiedzi :)

komentarz 23 czerwca 2017 przez X3h Dyskutant (9,540 p.)
Warto zmniejszać ilość kodu ;) http://ideone.com/ssPMiP

1 odpowiedź

0 głosów
odpowiedź 23 czerwca 2017 przez Buby Pasjonat (19,590 p.)
wybrane 23 czerwca 2017 przez fermix
 
Najlepsza

Hej, zauważyłem tutaj 2 problemy. Po pierwsze, skoro masz wprowadzić n elementów, to Twoja tablica powinna mieć wielkość n, a nie (n-1). Oczywiście, indeksujemy od zera, zatem największym indexem będzie (n-1), stąd pewnie ten błąd, który popełnia wielu początkujących.

Poza tym, zauważ, że pętla for, w której zwiększasz wartość zmiennej k, wykonuje się n razy, zatem zmienna k po wyjściu z pętli ma wartość n, a największy indeks, to (n-1).

 

Poprawiłem Twój kod i zamieściłem komentarze co było nie tak. Jeśli coś jest niejasne, to pisz - postaram się wytłumaczyć.

#include <iostream>
 
using namespace std;
int t,n,j;
int k=0;
int main()
{
    cout << "Wprowadz liczbe testow: " << endl;
    cin >>t;
    if ((t<0)||(t>100))
        {
            cout<<"Wprowadz liczbe od 0 do 100"<<endl;
            cin>>t;
        }
    while(t>0)
        {
        cout<<"Wprowadz liczbe elementow a nastepnie kolejno liczby: "<<endl;
        cin>>n;
        int tablica[n]; //Twoja tablica ma n elementow, a nie n-1
        for(j=0;j<n;j++)
            {
            cin>>tablica[j];
            k++;
            }
//k po wyjsciu z petli ma wartosc n, a najwiekszy index to n-1, bo indeksujemy od 0
//zmiejszam k o 1
k--;
        while(k>=0)
            {
            cout<<tablica[k]<<" ";
            k--;
            }
        t--;
        }
    return 0;
}

 

Jeszczę tylko wspomnę o jednej rzeczy - deklaracja tablicy int moja_tablica[jakas zmienna] nie jest zbyt ładna - uważam, że w tym miejscu raczej powinno się stosować dynamiczną alokację pamięci. Niektóre kompilatory mogą tego nawet nie skompilować, jeśli nie posiadają rozszerzenia VLA - variable length array. Miej to na uwadze, podczas dalszej nauki. Pozdrawiam! smiley

komentarz 23 czerwca 2017 przez fermix Nowicjusz (200 p.)
Wielkie dzięki za pomoc, wszystko jasne i klarowne :) Uczę się na własną rękę, także w niektórych momentach takich jak ten jeśli nikt mi nie pokaże palcem to sam nic nie wymyślę :) Jeszcze raz dziękuję ;)
komentarz 23 czerwca 2017 przez Buby Pasjonat (19,590 p.)

Każdy kiedyś zaczynał, nie przejmuj się - kto pyta ten nie błądzi wink

Podobne pytania

0 głosów
2 odpowiedzi 509 wizyt
0 głosów
2 odpowiedzi 575 wizyt
pytanie zadane 12 stycznia 2020 w C i C++ przez dominik195k Obywatel (1,030 p.)
0 głosów
1 odpowiedź 638 wizyt
pytanie zadane 19 lutego 2021 w C i C++ przez NukaNuka56 Obywatel (1,080 p.)

92,575 zapytań

141,424 odpowiedzi

319,650 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...