1 / 8
Jan 2021

Cześć, mam mały problem z wykonaniem zadania ‘PP0604A - Średnia arytmetyczna’. W CB output jest prawidłowy, natomiast spoj oraz ideone wyrzucają mi błąd SIGBUS i nie bardzo wiem o co chodzi :thinking: proszę o jakieś sugestie, gdyż z perspektywy mojej aktualnej wiedzy trochę ciężko mi rozszyfrować anglojęzyczne forum w tym zakresie :roll_eyes:

#include

using namespace std;

int p; //ilosc petli
int x;

int main()
{
cin >> p;
float l[x]; //tablica liczb wprowadzonych przez uzytkownika
for (int z=0; z<p; z++)
{
cin >> x;
float suma = 0;
for(int j=0; j<x; ++j)
{
cin >> l[j];
suma+=l[j];
}
float srednia = suma/x;
float rabs[x]; //roznica bezwzgledna
for(int i=0; i<x; i++)
{
if (srednia>l[i])
{
rabs[i] = srednia-l[i];
}
else if (srednia<l[i])
{
rabs[i] = srednia-l[i];
rabs[i] = rabs[i]*(-1);
}
}
int iens[2]; //indeks elementu bedacego najblizej sredniej
iens[0] = 0;
iens[1] = 0;
for(int y=0; y<x; y++)
{
if (rabs[iens[0]]==rabs[y+1])
{
iens[1]=y+1;
}
else if (rabs[y]<rabs[iens[0]])
{
iens[0]=y;
}
}
cout << l[iens[0]] << endl;
}
return 0;
}

  • created

    Jan '21
  • last reply

    Jan '21
  • 7

    replies

  • 842

    views

  • 5

    users

  • 3

    links

Mhm, więc jak powinienem się zabrać do utworzenia tablicy, o wielkości podanej przez użytkownika :thinking:?

  1. Skorzystanie z tablicy dynamicznej. To jest troszeczkę bardziej zaawansowane. Powinieneś mieć podstawową wiedzę o wskaźnikach i dynamicznej alokacji pamięci.
  2. Skorzystanie z kontenera vector. To rozwiązanie jest najprostsze.

Trochę dziwne jest, że nie wiesz, że rozmiar statycznej tablicy w C++ musi być znany już na etapie kompilacji. Chyba zacząłeś kodować bez poczytania teorii.

Aktualnie tak wygląda mój kod i nie rozumiem, dlaczego dostaje błędną odpowiedź’ skoro na ideone output się zgadza :thinking:

#include

using namespace std;

int main()
{
int p; //ilosc petli
cin >> p;
for (int z=0; z<p; z++)
{
int x;
cin >> x;
float *l; //liczby
l = new float [x];
float suma = 0;
for(int i=0; i<x; ++i)
{
cin >>l[i];
suma+=l[i];
}
float srednia = suma/x;
float rabs; //roznica bezwzgledna
rabs = new float [x];
for(int i=0; i<x; i++)
{
if (srednia>l[i])
{
rabs[i] = srednia-l[i];
}
else if (srednia<l[i])
{
rabs[i] = srednia-l[i];
rabs[i] = rabs[i]
(-1);
}
}
int *iens = new int; //indeks elementu bedacego najblizej sredniej
for(int y=0; y<x; y++)
{
if (y==0)
{
*iens=y;
}
else if (rabs[y]<rabs[*iens])
{
*iens=y;
}
}
cout << l[*iens] << endl;
delete [] l;
delete [] rabs;
delete [] iens;
}
return 0;
}

  1. Dziwny ten wskaźnik

ale jak dziala to trudno
2. czy w tej linii jest mnozenie ?

  1. Edit myslalem ze znalazlem, ale musialbym potestowac. Brak wciec jednak zniecheca do testowania.