• 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
252 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 115 wizyt
pytanie zadane 14 marca 2023 w SPOJ przez skyynet Początkujący (410 p.)
0 głosów
1 odpowiedź 1,336 wizyt
pytanie zadane 20 kwietnia 2016 w SPOJ przez Shiro Stary wyjadacz (10,300 p.)
0 głosów
2 odpowiedzi 390 wizyt
pytanie zadane 11 września 2020 w SPOJ przez cupoforanges Początkujący (380 p.)

92,761 zapytań

141,685 odpowiedzi

320,483 komentarzy

62,105 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

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!

...