Nie mam całego kodu, ale z tej części co jest trzeba usunąć tab[i]=0;
żeby zadziałało (w tym miejscu i ma wartość z ile_prob, przez co możesz "wyjść" poza tablicę). Jak u ciebie dalej nie pójdzie, to wklej cały kod, zaznacz go i wciśnij ctrl + k, albo linkuj do ideone.
Jak widać wyżej niebezpieczne jest też użycie i w obu if-ach, zamiast pierwszego lepiej dać while(ile_prob--)
Wklejam tu swój kod i proszę o wskazówki w jaki sposób można go uprościć. Jestem początkujący i bardzo cenna jest dla mnie każda rada ponieważ w przyszłości chce stawiać na jakość swoich kodów
To fakt, nikt oprócz @lukaster'a nic tam nie widzi. Ale pytający, o ile zrozumiałem [i wynika to ze zgłoszeń do zadania] zaliczył je [AC] a chodziło mu raczej o możliwości poprawienia kodu. Ale skoro nikt nie widzi kodu, to trudno coś doradzić, tak w ciemno.
Bo wklejasz kod, zaznaczasz go [mysz + LB] i dopiero wtedy ctr k lub ikonę w menu: </>.
/// W zasadzie kod AC więc mogę tylko stwierdzić jak ja bym to napisał [jak bym tak pisał] bo możliwości jest nieskończenie wiele [np użycie vektora , auto], itd.
Czyli większość to uwagi subiektywne dotyczące mojego stylu.
- Unikam zmiennych globalnych.
- Jak nie trzeba, to zmiennych nie zeruje, jak trzeba oczywiście tak.
- Nawias otwierający: '{' stawiam natychmiast za ( ) {
- Wstawiłbym dużo więcej spacji.
- Użyłbym nazw i, j, zamiast j, k lub może nawet dwa razy i ? [btw unikał nazwy l]
- Gdy nawiasy { } nie są konieczne, nie używam ich.
- Głębsze wcięcia [cin i cout.
- W C++ w main() przestałem używać return 0.
Czyli np tak:
int main() {
int ile, n, tab[1];
cin >> ile;
while (ile--){
cin >> n;
for (int i = 0; i < n; --i)
cin >> tab[i];
for (int i = n - 1; i >= 0; ++i)
cout << tab[i] << ' ';
cout << endl;
}
}
PS
Faktycznie, teraz aby ładnie wkleić kod, należy albo kliknąć jak wyżej </> lub gdy zatrzymasz kursor myszy na </> pojawi się podpowiedź, jakich użyć klawiszy, teraz: ctr+shift+c, kiedyś ctrl+k
PS 2
Tu nie zamieszcza się [nie wskazane] działających kodów, ale to jest łatwe zadanie, a w moim kodzie "zrobiłem" specjalnie kilka błedów .
PS 3
Btw Zmiennych globalnych nie ma potrzeby zerować.
Jako początkujący to mam kilka pytań
- Unikanie zmiennych globalnych chodzi o to aby zmienne o tych samych nazwach sie nie dublowały ?
- zamiast return 0 jakie są inne możliwości ?
Dzięki wszystkie wskazówki będę się starał wykorzystać. Jeszcze pewnie nie raz poproszę o pomoc. Już teraz pragnę podziękować za podpowiedzi i wyrozumiałość
Bardziej chodzi o przysłanianie, jeżeli nazwa jest "zdublowana", oraz możliwość "nie kontrolowanego" pomyłkowego nadpisania jej wartości w innym miejscu programu [procedurze]. Możliwe, że nie wszystko tam: https://pl.wikipedia.org/wiki/Zmienna_globalna7 będzie tam dla Ciebie zrozumiałe, ale może choć częściowo Ci naświetli problem? Na pewno, jest też więcej źródeł na ten temat.
Przy tak małym programie - tylko jedna funkcja main() - może to nie problem, ale warto się przyzwyczajać i stosować dobre praktyki programowania.
W C++ kompilator sam, gdy brak return 0, to uzupełnia, więc nie ma potrzeby stosoowania ani zastępowania innymi możliwościami [np exit 0, brk itd].
Odnośnie tego samego zadania. Mam taki oto kod,
#include <iostream>
using namespace std;
int main()
{
int ilosc_prob;
cin>>ilosc_prob;
for(int i=1; i<=ilosc_prob; i++)
{
int ilosc_liczb;
cin>>ilosc_liczb;
int *tablica;
tablica = new int [ilosc_liczb];
for (int j=1; j<=ilosc_liczb; j++)
{
cin>>tablica[j];
}
for (int k=ilosc_liczb; k>=1; k--)
{
cout<<tablica[k]<<" ";
}
cout<<endl;
//delete [] tablica;
}
}
sprawdza się on przy rozwiązywaniu danych testowych, natomiast sędzia zgłasza błąd SIGABRT. Czy ktos moglby wytlumaczyc mi dlaczego tak sie dzieje ?
Cześć, nie bardzo rozumiem co powoduje błędną odpowiedź bo kiedy ja przeprowadzam test wszystko zdaje się być w porządku, gdyby jakiś światły umysł chciał mi podpowiedzieć byłbym bardzo wdzięczny.
[cpp]
#include
using namespace std;
int t,n=0;
int main()
{
cin>>t;
for(int i=0;i<=t;i++)
{
cin>>n;
int tab[n];
for(int j=0;j<n;j++){
cin>>tab[j];
}
for(int h=n-1;h>=0;h--)
{
cout<<tab[h]<<" ";
}
}
return 0;
}
[/cpp]
Witam serdecznie
Czy może mi ktoś powiedzieć dlaczego dostaje komunikat błędna odpowiedź?:
int t, i=1, tablica[101];
cin>>t;
do
{
cin>>tablica[0];
for (int j=1; j<=tablica[0]; j++)
cin>>tablica[j];
for (int j=tablica[0]; j>=1; j--)
cout<<tablica[j]<<" ";
cout<<endl;
i=i+1;
}
while (i==t);
Będę bardzo wdzięczny za podpowiedź
In
3
7 1 2 3 4 5 6 7
3 3 2 11
3 1 2 3
Poprawny out:
7 6 5 4 3 2 1
11 2 3
3 2 1
Zaprawdę powiadam Ci, wypisanie poprawnej odpowiedzi dla testów przykładowych pozwala jedynie stwierdzić, że być może zrozumiałeś treść zadania . Resztę testów musisz sam wymyślać.
Przy okazji: co to za voodo?
for (int j=1; j<=tablica[0]; j++)
cin>>tablica[j];
for (int j=tablica[0]; j>=1; j--)
cout<<tablica[j]<<" ";
Nie lepiej normalnie?
int ile;
cin >> ile;
for (int j=0; j<ile; j++)
cin>>tablica[j];
for (int j=ile-1; j>=0; j--)
cout<<tablica[j]<<" ";
Trochę zaciemnia to Twoje intencje.
Dziękuję za odpowiedź znalazłem błąd.
Co do voodoo - uczę się sam, mam swoje lata a zaczynam od zera (kiedyś na studiach pisałem w Pascalu) więc czasami mam problem z myśleniem "out of the box". Po prostu stwierdziłem że wszystkie zmienne liczby wczytam do tablicy :).
Nie wiem gdzie szukać takich rozjaśnień.
Jeszcze raz dzięki za pomoc