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

Wczytywanie określoną ilość liczb do tablicy w jednej lini. Zadanie ze SPOJU "Tablice" C++

Object Storage Arubacloud
0 głosów
2,666 wizyt
pytanie zadane 14 lipca 2017 w C i C++ przez Poczprogramista123 Bywalec (2,900 p.)

Witam. Napisze krótko i na temat a mianowicie nie wiem jak wczytać określoną ilość liczb w JEDNEJ LINI. Wkleję treść zadania by było jaśniej.

Wejście

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

Wyjście

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

Przykład

Wejście:
2 // ile razy ma to się powtórzyć 
7  1 2 3 4 5 6 7 << o to mi chodzi
3  3 2 11

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

Całą resztę wiem jak zrobić, tylko jak napisać by program wczytywał te liczby do tablicy w JEDNEJ LINI to już nie. Coś mi  świtało z łańcuchami i wiem, że zapis getlinie(cin,tablica) by ten problem rozwiązał tylko jak zrobić, by pobierał te liczby do pewnego momentu? (wiem że po kliknięciu entera, ale właśnie by np.: wczytywał do 7 liczb w jednej lini) 

Z góry dzieki ;)

2 odpowiedzi

0 głosów
odpowiedź 14 lipca 2017 przez Bosswell Nałogowiec (36,470 p.)
Nie musisz kombinować.

Podanie 1 2 3 4 5 6 ze spacjami jest równe podaniu

1

2

3

4

5

6

z enterami
komentarz 14 lipca 2017 przez Poczprogramista123 Bywalec (2,900 p.)
Tylko właśnie cały problem polega na tym, że ( nwm czy znasz tą strone) ten sędzia nie zatwierdzi ci tego kodu jeśli te liczby nie będą w jednej lini :(
komentarz 14 lipca 2017 przez Bosswell Nałogowiec (36,470 p.)
pokaz mi twój kod
komentarz 14 lipca 2017 przez Bosswell Nałogowiec (36,470 p.)
ten sędzia jest wyrozumiały pod tym względem i z pewnością zatwierdzi ;)
komentarz 14 lipca 2017 przez Poczprogramista123 Bywalec (2,900 p.)
Wyśle jak bd mógł. Spróbuje, ale wątpie. Dzięki.
komentarz 15 lipca 2017 przez Poczprogramista123 Bywalec (2,900 p.)
Z góry mówie że zagmatwany ten kod ale no dopiero zaczynam. Program działa bez problemu i głównie chodziło mi o ten fragment gdzie zaznaczyłem komentarzem. Jeszcze dodam że ten sędzia mi tego kodu nie zatwierdził pisząc(SIGSEGV). Jeśli wiesz o co chodzi, był bym wdzięczny jak byś napisał :)
komentarz 15 lipca 2017 przez Poczprogramista123 Bywalec (2,900 p.)
#include <iostream>

using namespace std;

int main()
{
int l,ile[100],licznik=0,indeks,indeks1=-1,liczby[100],zm=0,zm1=0,zm2=0,zm3;
cin>>l; // ile razy bd wypisywac liczby i ile razy to wszystko ma siê powtórzyc

   for(int i=0;i<l;i++)// petla pobierajaca liczby do tablicy
   {
       cin>>ile[i];cout<<endl; // pobiera ile bd liczb
        for(int a=0;a<ile[i];a++)
          {   indeks1++;
              cin>>liczby[indeks1]; // I TUTAJ MI CHODZILO BY POBIERAC W JEDNEJ LINI
          }cout<<endl;
   }
for(int b=0;b<l;b++)// petla wypisujaca liczby z tablicy w odwroconej kolejnosci
{
    if (zm1!=ile[licznik]) // wiem ¿e mega skomplikowane i amatorskie ale ucze sie XD
    {for(int a=0;a<=ile[licznik];a++)// wazne ze dziala :)
    { if (zm!=a)
    {   zm++;
        indeks=zm;
        } else {indeks=a;zm++;}
        liczby[indeks];
        if(indeks==ile[licznik]+zm2) { break;}
    }}

     zm=indeks-1;
     zm1=indeks;
     zm2=indeks;
cout<<endl;
    for(int b=0;b<ile[licznik];b++) {cout<<liczby[zm]; zm--;}

     if((zm==-1) ||(zm==zm3))// zmienia indeks tablice tak by zaczynal sie od nowej opcji
    {
    zm=zm1;
    zm3=zm-1;
    zm1=0;
    licznik++;

    }
}

return(0);
}

 

komentarz 15 lipca 2017 przez Bosswell Nałogowiec (36,470 p.)
Mozna to zapisać o wiele przejrzyściej, ale do tego sam dojdziesz z czasem ;)

Co do problemu który tu szukasz. Jak już pisałem, ta linia jest dobrze i nie tam tkwi problem.

Do testowania polecam używać ideone.com.

Tutaj masz już twój kod z danymi wejściowymi jakie są w zadaniu https://ideone.com/GnBee3

Jak można zauważyć, wprowadzanie danych (z odstępami używając spacji, a nie entera, działa). Oprócz tego, powinien Ci się rzucić w oczy twój błąd. Jeśli spojrzysz na 'stdout'.
komentarz 16 lipca 2017 przez Poczprogramista123 Bywalec (2,900 p.)
Dzieki wielkie i faktycznie miałeś racje. Pozdrawiam
komentarz 17 lipca 2017 przez Poczprogramista123 Bywalec (2,900 p.)
Poprawiłem i działa wszystko ok, tylko ten sędzia nie przyjmuje kodu pisząć (SIGSEGV), zgaduje że chodzi o zbyt duże zagmatwanie w kodzie XD
0 głosów
odpowiedź 14 lipca 2017 przez mokrowski Mędrzec (155,460 p.)
#include <iostream>
#include <algorithm>
#include <iterator>
#include <memory>

int main() {
    unsigned number_of_tests; 
    unsigned numbers_count;
    std::cin >> number_of_tests;

    for(auto test_number = 0U;
            test_number < number_of_tests;
            ++test_number) {
        std::cin >> numbers_count;
        auto table = std::make_unique<int[]>(numbers_count);

        std::copy_n(std::istream_iterator<int>(std::cin),
            numbers_count, table.get()); 
        // Process ...
    }
}

Użyj copy_n() z algorytmów.

komentarz 14 lipca 2017 przez Poczprogramista123 Bywalec (2,900 p.)
Dzięki
komentarz 14 lipca 2017 przez 10kw10 Pasjonat (22,880 p.)
bez sensu
komentarz 15 lipca 2017 przez mokrowski Mędrzec (155,460 p.)

No :-) Jak by nie było "wymagania tablica" tylko normalny kontener, nie było by narzutu w kodzie i rozwiązanie mogło by wyglądać tak (nie zaglądać jeśli chcesz rozwiązać sam):

#include <iostream>
#include <algorithm>
#include <iterator>
#include <vector>

int main() {
    unsigned number_of_tests; 
    unsigned numbers_count;
    std::cin >> number_of_tests;

    std::vector<int> values;

    while(number_of_tests-->0) {
        std::cin >> numbers_count;
        std::copy_n(std::istream_iterator<int>(std::cin),
            numbers_count, std::back_inserter(values)); 
        std::copy(values.crbegin(), values.crend(),
            std::ostream_iterator<int>(std::cout," "));
        values.clear();
    }
}

 

komentarz 15 lipca 2017 przez 10kw10 Pasjonat (22,880 p.)
Tu wystarczy zwykly cin...
komentarz 15 lipca 2017 przez mokrowski Mędrzec (155,460 p.)
edycja 15 lipca 2017 przez mokrowski
Ale zrozum... Ja nie chcę podawać "zwykłego cin" bo skończy się tym co zawsze. Problemami z +/- 1 w pętli for, brakiem lub nadmiarowym new/delete. A tak kolega może zerknie do algorytmów, zorientuje się co to za "zjawisko" iterator, dowie się do czego służy unique_ptr lub make_unique :-) A może zapyta dlaczego tak, a może zapyta co znaczy błąd który popełni? :-)

Może zaproponuj np. rozwiązanie z rekurencją ogonową bez stosowania zwykłych iteracji a nie narzekasz że "coś jest bez sensu" i że idolem każdego "powinien być Lenin". Rozwiązać problem można przecież na bardzo różne sposoby :-)
komentarz 16 lipca 2017 przez Poczprogramista123 Bywalec (2,900 p.)
Troche za mola jeszcze wiem o programowaniu i takie zapisy sa mi zupelnie opce ale sprobuje :)
komentarz 16 lipca 2017 przez Poczprogramista123 Bywalec (2,900 p.)
Zrozumiem pewnie za pare miesiecy ale to przy okazji zapytam. Skad zdobyc ta wiedze bo w dotychczasowych odcinka Pana MZ na YT takie zapisy nie wystepowaly ( jestem na odc 14)
komentarz 16 lipca 2017 przez mokrowski Mędrzec (155,460 p.)
Radzę jak najszybciej przenieść swoje zainteresowania z tutoriali (lepszych lub gorszych) na książki. Dokładnie i systematycznie wykonać ćwiczenia i robić mikro i średnie projekty. Polecam książki:

Stephen Prata Szkoła programowania C++ lub Bjarne Stroustrup Język C++ Kompendium wiedzy w zależności od poziomu wiedzy przed czytaniem oraz Nicolai M. Josuttis C++. Biblioteka standardowa. Podręcznik programisty. Ta druga książka zapoznaje z biblioteką standardową i pozwala szybciej i z mniejszą ilością błędów programować.

Poza tym tworzenie mikro i średnich projektów z określonym celem oraz narzuceniem sobie technik programowania które będziesz stosował. Np. "nie użyję a nie razu new/delete jawnie w kodzie" lub "ograniczę jak się da konstrukcje for i if na korzyść polimorfizmu i algorytmów". Wyrobisz sobie wtedy elastyczność w stosowaniu języka i znajomość kontenerów/algorytmów biblioteki standardowej.
komentarz 17 lipca 2017 przez Poczprogramista123 Bywalec (2,900 p.)
Wielkie dzięki. Co do książek to posiadam jedną "symfonia c++ standard" autor. Jerzy Grębosz. Jeśli znasz tą książkę to ona również jest godna uwagi?
komentarz 17 lipca 2017 przez mokrowski Mędrzec (155,460 p.)
Nie.

Podobne pytania

0 głosów
1 odpowiedź 108 wizyt
pytanie zadane 28 stycznia 2017 w Java przez Patryk Rafał Bywalec (2,700 p.)
+1 głos
1 odpowiedź 197 wizyt
0 głosów
1 odpowiedź 571 wizyt
pytanie zadane 24 stycznia 2020 w C i C++ przez Jan Patryk Kowalski Obywatel (1,880 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

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

...