21 / 80
Mar 2017

Dziękuję za odpowiedź :slight_smile: 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 :slight_smile:

4 months later

witam,
Czy doradzi ktoś początkującej jak zmienić kod dostający SIGSEGV (Segmentation fault) na SPOJ'u by został zaakceptowany? Błąd dot. ograniczonego dostępu do pamięci, ale nic mi to nie mówi :confused:
Oczywiście tak ja w temacie - chodzi o zadanie PP0502B - Tablice
Chyba że należy tutaj użyć wskaźników?
Mam kod zbliżony rozumowaniu do kodu użytkowników: lukaster i wuduchild. Wasze kody dostały AC?

aby nie mieć SIGSEV nie należy używać elementów tablicy z poza jej zakresu :slight_smile:

czyli np. dla:

int tabela[10];

wolno użyć tabela[0], tabela[1], ..., tabela[9] ale nie tabela[-1], czy tabela[10]

Człowieku, naucz się najpierw pisać i mówić, a dopiero potem zajmij się programowaniem. "Mam taki problem nie bardzo rozumie..." Sorry za upierdliowść ale niezmiernie mnie denerwuje powszechny analfabetyzm...

Chętnie zniosę dysleksję, dysgrafię, niegramatyczne i nieortograficzne pytania.

Tylko niech one mają sens, a nie, że sugerują, że zadający pytanie skończył czytanie podręcznika C/C++
na okładce, ale już wstęp był dla niego za trudny

3 months later

może po prostu przetestuj dla przykładowych danych z zadania twoje rozwiązanie na ideone.com17, a sam zobaczysz co jest nie tak

równie dobrze możesz przetestować na swoim komputerze przekierowując wejście i wyjście do pliku

2 months later
import re
def remove_duplicates(values):
    output = []
    seen = set()
    for value in values:
        if value not in seen:
            output.append(value)
            seen.add(value)
    return output

for i in range(0, int(input())):
    num = str(input())

    pattern = re.compile(r'[0-9-]{1,}')
    matches = pattern.finditer(num)

    tab = []
    for match in matches:
        tab.insert(0, match.group())
    tab = remove_duplicates(tab)
    print(*tab)

Powie mi ktoś, gdzie tu ten sędzia widzi “Błędną odpowiedź”?
Input/Output taki sam jak w przykładzie http://pl.spoj.com/problems/PP0502B/1.
Testowane tutaj: https://ideone.com/neYMOG4 oraz w IDE.
Ktoś ma jakieś sugestie? (Od razu mówię że wykluczona jest niespójność kodu między wersją środowiska, w której został napisany a tą, w której jest sprawdzany)

To ma bardzo małe znaczenie, żeby nie powiedzieć, że bez znaczenia. To tylko malutki przykład, jak powinien działać program.

BTW
Skąd wziąłeś pomysł na usuwanie duplikatów? Nic o tym w zadaniu nie napisano.
Dla takiego np testu:
5 1 2 2 2 3

Poprawny out to:
3 2 2 2 1

bez zbędnego dodatkowego kombinowania, usuwania [i udziwniania :wink: ]

Jaki ja jestem teeeeeeeepyyyyy.
Zapamiętam, czytać ze zrozumieniem.
Dzięki wielkie.

6 months later

Czy ktoś mógłby rzucić okiem na wytwór mojej wyobraźni i stwierdzić czemu działa poprawnie dopiero po przekroczeniu pierwszej połowy tablicy. Chciałem ogarnąć to na wskaźnikach.

#include
//dynamiczne alokowanie
using namespace std;
int n;
int main()
{ cout<<"podaj ilosc danych ";
cin>> n;

int *wskaznik;
wskaznik= new int [n];
int *wskaznik2;
wskaznik2= new int [n];

for (int i=0; i<n; i++)
{cin>>wskaznik[i];}

for (int i=0; i<n; i++)
{cout<<wskaznik[i]<<" ";}
cout<<endl;

for (int i=0; i<n; i++)
{wskaznik2[(n-1)-i]=wskaznik[i];
 cout<<wskaznik2[i]<<" ";   }

delete [] wskaznik, wskaznik2;

return 0;

}

dziękuję

Ty poprawisz formatowanie swojego kodu (patrz kilka postów wyżej jak ładnie to zrobił @hartez) lub ewentualnie prześlij go przez ideone, a ja wtedy Ci powiem co zepsułeś.

Czyli chcę żeby Twój kod nie wyglądał tak:
#include
//dynamiczne alokowanie
using namespace std;
int n;
int main()
{ cout<<"podaj ilosc danych ";

a tak:

#include <iostream>
//dynamiczne alokowanie
using namespace std;
int n;
int main()
{
    cout<<"podaj ilosc danych ";

Przeanalizuj ten fragment to znajdziesz odpowiedź na swoje pytanie.

wiem że ten fragment szwankuje, ale nie wiem czemu;
dla mnie wygląda to tak jakby dla pierwszej połowy wyświetlały się adresy zamiast wartości;
próbowałem dorzucić * oraz &, ale nie mogę tego potem skompilować;
głowiłem się nam przedziałem, ale uznałem że jesk OK;
nie ogarniam tych wskaźników

4 redysz

Napisałam przeanalizuj, rozpisz krok po kroku co robisz, gdzie wpusujesz, co wypisujesz, jakie indeksy używane. Możesz przedtym wypełnić tablicę zerami lub inną wartością.

@majormarino

Spójrz na ten kod. Na prawdę masz tam
#include bez niczego?

Bez wcięć programujesz?
Odpiszę za jakieś dwie godziny, a Ty popraw.

Edit

Więc tak:

  1. Co to jest cout<<"podaj ilosc danych ";? Twój program ma wyświetlać tylko i wyłącznie to co jest podane w zadaniu. Twój output ma być identyczny z podanym w zadaniu. Każda literka ma się zgadzać. Nie możesz wypisywać takich rzeczy jak “podaj ilosc danych” bo zostanie to przecież uznane za część odpowiedzi czyli za błędną odpowiedź.

  2. Dlaczego definiujesz n przed int main? W jakim celu? Jeżeli jesteś kolejnym słuchaczem kursu Pana Zelenta (który bardzo upodobał sobie zmienne globalne) to natychmiast zmień kurs. Jeśli mam rację to jest to dla Ciebie najważniejszy punkt i zrób to jak wspomniałem: natychmiast.

  3. Treść zadania:

Najpierw liczba testów t (t ≤ 100). Następnie dla każdego testu liczba n (n ≤ 100) i n liczb oddzielonych spacjami.
Jeszcze raz:
Najpierw liczba testów t (t ≤ 100).
gdzie jest Twój kod obsługujący tę zmienną?

  1. To co wskazała @yula. Podpowiedź: przypisujesz coś do jakiegoś elementu tablicy, a wyświetlasz inny.

  2. Co to robi i po co:

for (int i=0; i<n; i++)
{cin>>wskaznik[i];}

for (int i=0; i<n; i++)
{cout<<wskaznik[i]<<" ";}
cout<<endl;

przecież masz wyświetlić liczby z tablicy w odwrotnej kolejności, a Ty je tutaj wyświetlasz tuż po wpisaniu tak jak zostały podane. W ogóle tego nie powinieneś robić.

  1. Kod ma być ładny, a nie tylko działać. Nie rób takiego czegoś:
for (int i=0; i<n; i++)
{cout<<wskaznik[i]<<" ";}
cout<<endl;

bo to boli innych wokół i ich rodziny. Yuli dzieci płaczą, narbej chodzi zdenerwowany, tarpauwatratar ma depresję, a jaroo gubi się przy dodawaniu.

ten fragment (gdyby w ogóle do czegoś był potrzebny) mógłby wyglądać przejrzyście:

for (int i = 0; i < n; i++)
{
    cout << wskaznik[i] << " ";
}
cout << endl;

są zadania na jak najmniejszą liczbę znaków (challenge), ale to nie jest jedno z nich.
Poprawisz to wszystko i będzie przez chwilę zielono w zakładce status :slight_smile:

mam zaliczone to zadanie na spoju juz dawno
zrobilem petle odwrotna ktora wypisuje mi wartosci z orginalnej tablicy
wiem ze mozna je zrobic na jednej tylko tablicy
chcialem sie dowiedziec jak przepisac wartosci z jednej tablicy do drugiej na wskaznikach bo ucze sie sam z neta (Zelenta ogladalem tez btw i troche zamula ale daje niezle przyklady)

Mozecie mi polecic jakis dobry pdf albo forum o wskaznikach i ogolnie dzialaniach na tablicach takich jak zliczanie elementow, scalanie kopiowanie wycinanie porownywanie wartosci na dwoch tablicach z alokowana pamiecia?