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

process exited duo to signal 11 c++

0 głosów
48 wizyt
pytanie zadane 13 czerwca w C i C++ przez RedBull9k Nowicjusz (120 p.)

Witam , próbuję rozwiązać zadanie z byłej olimpiady informatycznej. Tresc nie jest tu wazna, fragment ktory zamieszcze jest jedynie wycinkiem kodu, ale wiem na 100% ze to on nie dziala. Problem przedstawia sie tak ze program dla wiekszosci testow daje poprawne odpowiedzi, jednak czasami pojawia sie komunikat :"process exited duo to signal 11 c++". Chciałbym wiedziec gdzie w kodzie pojawia sie blad, poniewaz wydaje mi sie ze wszystko powinno dzialac bez zarzutu. Prawdopobnie blad znajduje sie w funkcji "Funkcja", ale pewien nie jestem. Z góry dzieki, ponizej zamieszczam kod:

#include <iostream>
#include <bits/stdc++.h>

using namespace std;



struct wektor
{
    double x;
    double y;
};

bool Funkcja(wektor a, wektor b)
{

    if(a.y==0) return 1;
    if(b.y==0) return 0;
    else return ((a.x/a.y)>(b.x/b.y));
}
int main()
{
    long long wynik=0;
    long long x,y;
    x=0; y=0;
    int n;
    cin>>n;
    wektor * lista;
    lista=new wektor[n];
    for(int i=0;i<n;i++)
    {
        cin>>lista[i].x;
        cin>>lista[i].y;
    }
    wektor * pomoc;
    pomoc=new wektor[n];
    for(int i=0;i<n;i++)
    {
        pomoc[i].x=lista[i].x;
        pomoc[i].y=lista[i].y;
    }

    for(int i=0;i<n;i++)
    {
        if(pomoc[i].y<0 || (pomoc[i].y==0 && pomoc[i].x<0))
        {
            x+=pomoc[i].x;
            y+=pomoc[i].y;
            pomoc[i].x=pomoc[i].x*(-1);
            pomoc[i].y=pomoc[i].y*(-1);

        }
        if(x*x+y*y>wynik) wynik=x*x+y*y;
    }
    wektor d;
    vector <wektor> a;
    for(int i=0;i<n;i++)
    {
        if(pomoc[i].x>0)
        {

            d.x=pomoc[i].x;
            d.y=pomoc[i].y;
            a.push_back(d);
        }
    }
    sort(a.begin(),a.end(),Funkcja);




    cout<<wynik;

    return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 13 czerwca przez Chess Maniak (51,510 p.)
edycja 14 czerwca przez Chess

Zamień to:

bool Funkcja(wektor a, wektor b)
{
 
    if(a.y==0) return 1;
    if(b.y==0) return 0;
    else return ((a.x/a.y)>(b.x/b.y));
}

na to:

bool Funkcja(wektor a, wektor b)
{
 
    if(a.y==0) return 1;
    if(b.y==0) { 
       return 0;
    } else return ((a.x/a.y)>(b.x/b.y));
}

Może wychodzisz za dozwolony zakres tablic, czy coś. Może odwołujesz się do niezadeklarowanego miejsca  w pamięci. U mnie na Windows 10 nie wyrzuciło jeszcze takiego błędu, co Tobie.

https://sio2.mimuw.edu.pl/c/oi21-1/forum/2/125/

To mi się wydaje podejrzane:

 for(int i=0;i<n;i++)
    {
        if(pomoc[i].y<0 || (pomoc[i].y==0 && pomoc[i].x<0))
        {
            x+=pomoc[i].x;
            y+=pomoc[i].y;
            pomoc[i].x=pomoc[i].x*(-1);
            pomoc[i].y=pomoc[i].y*(-1);
 
        }
        if(x*x+y*y>wynik) wynik=x*x+y*y;
    }

https://4programmers.net/Forum/Newbie/169390-c++_olimpiada_informatyczna_

komentarz 14 czerwca przez Criss VIP (146,500 p.)
W czym miało by pomóc dodanie niepotrzebnych nawiasów?
komentarz 14 czerwca przez RedBull9k Nowicjusz (120 p.)
Faktycznie, w niczym to nie pomoglo. Pragne dodac ze n<=200000 wiec nie jest to problem dotyczace rezerwacji zbyt duzej ilosci pamieci. Wciaz potrzebuję pomocy ;(
komentarz 14 czerwca przez RedBull9k Nowicjusz (120 p.)

Co jest nie tak z tym drugim przytozonym przez Ciebie fragmentem?

Edit: po usuniecia tego fragmentu mniej testow wywala ten blad ale wciaz.

komentarz 14 czerwca przez RedBull9k Nowicjusz (120 p.)

@Chess, Nawet taki kod daje ten sam blad:

#include <iostream>
#include <bits/stdc++.h>

using namespace std;



struct wektor
{
    double x;
    double y;
};

bool Funkcja(wektor a, wektor b)
{

    if(a.y==0) return 1;
    if(b.y==0) {
       return 0;
    } else return ((a.x/a.y)>(b.x/b.y));
}
int main()
{
    long long wynik=0;
    int n;
    cin>>n;
    wektor * lista;
    lista=new wektor[n];
    for(int i=0;i<n;i++)
    {
        cin>>lista[i].x;
        cin>>lista[i].y;
    }
    wektor d;
    vector <wektor> a;
    a.clear();
    for(int i=0;i<n;i++)
    {

        {

            d.x=lista[i].x;
            d.y=lista[i].y;
            a.push_back(d);
        }
    }
    sort(a.begin(),a.end(),Funkcja);
    delete [] lista;



    cout<<wynik;

    return 0;
}

 

komentarz 14 czerwca przez RedBull9k Nowicjusz (120 p.)

Ten kod nie daje juz bledu. Usuniecie 2 linijek z funkcji Funkcja naprawia go. Pytanie, dlaczego?

Ten kod dziala:

#include <iostream>
#include <bits/stdc++.h>

using namespace std;



struct wektor
{
    double x;
    double y;
};

bool Funkcja(wektor a, wektor b)
{
       
       return ((a.x/a.y)>(b.x/b.y));
}
int main()
{
    long long wynik=0;
    int n;
    cin>>n;
    wektor * lista;
    lista=new wektor[n];
    for(int i=0;i<n;i++)
    {
        cin>>lista[i].x;
        cin>>lista[i].y;
    }
    wektor d;
    vector <wektor> a;
    a.clear();
    for(int i=0;i<n;i++)
    {

        {

            d.x=lista[i].x;
            d.y=lista[i].y;
            a.push_back(d);
        }
    }
    sort(a.begin(),a.end(),Funkcja);
    delete [] lista;



    cout<<wynik;

    return 0;
}

 

komentarz 14 czerwca przez Chess Maniak (51,510 p.)
edycja 14 czerwca przez Chess
if(a.y==0) {
	return 1;
} else if(b.y==0) {
	return 0;
} else {
	return ((a.x/a.y)>(b.x/b.y));
}

Nie wiem, czy oto Ci chodzi, bo Twój wcześniejszy kod dla takich danych:
 

a.y = 0;
b.y = 0;

wyrzucał chyba zawsze zero, bo nie miałeś else if'a i drugi if nadpisywał dane z pierwszego if'a. Skąd bierzesz te wartości do funkcji? cin'em, czy jak. Dlaczego przy wywoływaniu funkcji nie podajesz jej argumentów? Dla testu powywoływuj funkcję Funkcja w różnych miejscach i zobacz jakie wyrzuca wartości dla różnych liczb.

Podobne pytania

0 głosów
1 odpowiedź 87 wizyt
0 głosów
2 odpowiedzi 181 wizyt
pytanie zadane 23 września 2016 w C i C++ przez niezalogowany
0 głosów
1 odpowiedź 46 wizyt
Porady nie od parady
Pytania na temat serwisu SPOJ należy zadawać z odpowiednią kategorią dotyczącą tej strony.SPOJ

54,442 zapytań

98,327 odpowiedzi

202,258 komentarzy

26,743 pasjonatów

Przeglądających: 160
Pasjonatów: 4 Gości: 156

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...