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

SPOJ Zadanie: Tablice

Object Storage Arubacloud
0 głosów
210 wizyt
pytanie zadane 7 czerwca 2023 w SPOJ przez PTRKK Nowicjusz (200 p.)

Witam, mam problem z zadaniem pt. "Tablice" w SPOJU, a mianowicie przy pierwszej iteracji pętla wykonuje się poprawnie, lecz przy kolejnych odczytuje tylko cout << "Podaj liczby: "; co może być tego przyczyną?

Z góry dziękuje za pomoc.

#include <iostream>


using namespace std;

int t;
int ile;
int liczby[1];


int main()
{
    cout << "Ile testow?" << endl;
    cin >> t;
    cout << "Ile liczb w tablicy?" << endl;
    cin >> ile;

    for(int i=0; i<=t; i++)
    {
        cout << "Podaj liczby: ";

        for(int i=1; i<=ile; i++)
        {
            cin >> liczby[i];
        }

        for(int i=ile; i>=1; i--)
        {
            cout << liczby[ile] << endl;
            ile--;
        }
    }
    return 0;
}

 

komentarz 8 czerwca 2023 przez Oscar Nałogowiec (29,320 p.)

Tablica zadeklarowana o rozmiarze 1 a jedziesz po niej bez umiaru.

O wartosc ile pytasz sie raz, a potem (nie bardzo rozumiem po co) dekrementujesz w pętli i wychodzi 0 i z taką wartością wchodzi w nastepne obiegi pętli.

3 odpowiedzi

0 głosów
odpowiedź 8 czerwca 2023 przez pasjonat_algorytmiki Pasjonat (19,540 p.)
- Nie dałeś linka do treści zadania, więc nie znam treści

- W pętli z lini 18 używasz int i, a potem w liniach 22 i 27 piszesz też int i i sie gubi

- zapewne w pętli w linii 18 powinno być < zamiast <=.

- w 24 linii robisz cin >> liczby[i], a w 8 linii zadeklarowałeś tablice liczby jako 1 elementową, zakładając, że ta pętla wykonuje się więcej niż raz to też się wywala.

- linie od  27 do 31 też nie mają zbytnio sensu, w sensie raczej nie powodują blędu, ale po co robisz w 30 linii ile--?
komentarz 8 czerwca 2023 przez PTRKK Nowicjusz (200 p.)

Przepraszam za nie podanie treści. 

-Czyli tylko w jednej pętli muszę deklarować int?

-Zadeklarowałem tablice jako 1-elementową, ponieważ nie wiem jak sprawić by user deklarował rozmiar tablicy z palca w konsoli :c

-w 30 linii dekrementowałem "ile" ponieważ w innym wypadku program wypisywał wartość z 1 elementu tablicy np. liczby[5]

Bardzo dziękuję za odpowiedź, program cały do przebudowy :D

Na dole podsyłam treść zadania

PP0502B - Tablice

 

Odwróć kolejność elementów w tablicy.

Wejście

Najpierw liczba testów t (t ≤ 100). Następnie dla każdego testu liczba n (n ≤ 100) i n liczb oddzielonych spacjami.

Wyjście

Dla każdego testu n liczb w porządku odwrotnym niż na wejściu.

Przykład

Wejście:
2
7 1 2 3 4 5 6 7
3 3 2 11

Wyjście:
7 6 5 4 3 2 1
11 2 3
0 głosów
odpowiedź 8 czerwca 2023 przez PTRKK Nowicjusz (200 p.)
A jest możliwość zadeklarowania rozmiaru tablicy z cina? Tzn. chciałbym żeby rozmiar tablicy deklarował user podając wartość w konsoli. W pętli dekrementowałem "ile" ponieważ w innym wypadku program wypisywał wartość wyłącznie z 1 elementu tablicy np. liczby[5].
komentarz 8 czerwca 2023 przez pasjonat_algorytmiki Pasjonat (19,540 p.)

Robisz tak:

int n = 0;
cin >> n;

int liczby[n];

I masz tablicę n elementową.

komentarz 8 czerwca 2023 przez Whistleroosh Maniak (56,980 p.)
Variable Length Array nie jest częscią standardu c++. O ile ten kod zadziała na gcc to chyba wywali się na msvc. Lepiej alokować takie tablice dynamicznie.
komentarz 8 czerwca 2023 przez pasjonat_algorytmiki Pasjonat (19,540 p.)
Albo używać vectorów
komentarz 8 czerwca 2023 przez PTRKK Nowicjusz (200 p.)
Właśnie miałem pytać czy nie byłoby lepiej w tym zadaniu użyć vectorów. Z vectorami jeszcze nie miałem styczności, ale nie wydają się jakoś skomplikowane. Wieczorem usiąde jeszcze raz do kodu. Jeszcze raz dzięki za pomoc!
0 głosów
odpowiedź 8 czerwca 2023 przez PTRKK Nowicjusz (200 p.)

Ostatecznie nie użyłem vectorów, ale chyba wszystko działa :D

#include <iostream>

using namespace std;




int main()
{
    int t;
    cout << "Ile testow?" << endl;
    cin >> t;
    int n;
    cout << "Ile liczb?" << endl;
    cin >> n;
    int liczby[n];

    for(int i=t; i>0; i--)
    {

        for(int j=1; j<=n; j++)
        {
            cin >> liczby[j];
        }

         for(int k=n; k>0; k--)
         {
             cout << liczby[k] << endl;
         }

    }



    return 0;
}

 

komentarz 9 czerwca 2023 przez Great Stary wyjadacz (12,360 p.)
SPOJ nie przyjmie tego kodu. Wczytaj n w pętli i nie wypisuj zbędnych rzeczy na std::cout.
komentarz 9 czerwca 2023 przez PTRKK Nowicjusz (200 p.)
Tak, wiem że couty zbędne, pisałem je dla siebie dla czytelności. :)

Podobne pytania

0 głosów
0 odpowiedzi 112 wizyt
pytanie zadane 14 marca 2023 w SPOJ przez skyynet Początkujący (410 p.)
0 głosów
1 odpowiedź 1,328 wizyt
pytanie zadane 20 kwietnia 2016 w SPOJ przez Shiro Stary wyjadacz (10,300 p.)
0 głosów
2 odpowiedzi 375 wizyt
pytanie zadane 11 września 2020 w SPOJ przez cupoforanges Początkujący (380 p.)

92,579 zapytań

141,429 odpowiedzi

319,657 komentarzy

61,962 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!

...