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

Błąd obliczeniowy

Object Storage Arubacloud
0 głosów
230 wizyt
pytanie zadane 8 lutego 2018 w C i C++ przez Sic Dyskutant (8,510 p.)

Błąd programy ukryty jest w funkcji polega na niewłaściwym doborze typu oto funkcja:

void show(wydatki t2, int n)
{
	double total = 0.0;
	std::cout << "\nWYDATKI\n";
	for(int i=0; i < sezon; i++)
	{
		std::cout << pory[i] << ": " << t2.w[i] << " zl" << std::endl;
		total += t2.w[i];
	}
	std::cout << "Laczne wydatki roczne: " << total << " zl" << std::endl;
}

 

Struktura, która jest w niej zawarta :

struct wydatki { double w[sezon]; };

Problem polega na tym, ze do struktury może należeć tylko i wyłącznie jeden element. Próbowałem ominąć ten punkt tworząc drugi i wprowadzając go jako 'total' struktury 'wydatki' jednak to również nie dało pomyślnego skutku. Proszę o podpowiedź

1
komentarz 8 lutego 2018 przez draghan VIP (106,230 p.)

Problem polega na tym, ze do struktury może należeć tylko i wyłącznie jeden element.

Mógłbyś rozwinąć lub napisać to innymi słowami? Nie rozumiem co ma to oznaczać. :(

2
komentarz 8 lutego 2018 przez criss Mędrzec (172,590 p.)

Błąd programy ukryty jest w funkcji polega na niewłaściwym doborze typu oto funkcja:

ciężko się czyta jak nie używasz interpunkcji popraw to i pamietaj na przyszlosc nikomu nie chce sie odpowiadać na niestarannie napisane pytania dlaczego musze o tym mówić

komentarz 8 lutego 2018 przez Sic Dyskutant (8,510 p.)
W strukturze ma być tylko tablica.
komentarz 8 lutego 2018 przez Sic Dyskutant (8,510 p.)

Program się włącza, jednak wyświetlone wartości wychodzą poza zakres. Funkcja odpowiedzialna za wyświetlenie to tak, której kod przesłałem. Dlaczego jest nieodpowiedni zakres, jeżeli zmienna 'total' jest typu double tak samo jak tablica strukturalna ?

komentarz 8 lutego 2018 przez draghan VIP (106,230 p.)
Pokaż więcej kodu oraz przeklej dokładny komunikat błędu wraz ze wskazaniem, której linii dotyczy. :)
komentarz 8 lutego 2018 przez Sic Dyskutant (8,510 p.)

Oto cały kod:

#include <iostream>
#include <string>

const int sezon = 4;
const std::string pory[sezon] = {"Wiosna", "Lato", "Jesien", "Zima"};

struct wydatki { double w[sezon]; };

void fill(wydatki t1, int n);
void show(wydatki t2, int n);

int main()
{
	wydatki fun;
	fill(fun, sezon);
	show(fun, sezon);
}

void fill(wydatki t1, int n)
{
	for(int i=0; i < sezon; i++)
	{
		std::cout << "Podaj wydatki za okres >> " << pory[i] << ": ";
		std::cin >> t1.w[i];
	}
}

void show(wydatki t2, int n)
{
	double total = 0.0;
	std::cout << "\nWYDATKI\n";
	for(int i=0; i < sezon; i++)
	{
		std::cout << pory[i] << ": " << t2.w[i] << " zl" << std::endl;
		total += t2.w[i];
	}
	std::cout << "Laczne wydatki roczne: " << total << " zl" << std::endl;
}

 

1 odpowiedź

+1 głos
odpowiedź 8 lutego 2018 przez draghan VIP (106,230 p.)

Zupełnie nie wiem, o co chodzi z "niewłaściwym doborem typu".

Kod masz poprawny, z jednym małym "ale". Zapomniałeś, że funkcja zawsze otrzymuje kopię zmiennej jeśli jest przekazana do funkcji jako parametr (z wyłączeniem tablic, które degradują się do wskaźnika). Jeśli chcesz wewnątrz funkcji fill() zmienić wartości zmiennej fun, musisz przekazać ją do funkcji przez referencję:

#include <iostream>
#include <string>

const int sezon = 4;
const std::string pory[sezon] = {"Wiosna", "Lato", "Jesien", "Zima"};

struct wydatki { double w[sezon]; };

void fill(wydatki &t1, int n);
void show(wydatki t2, int n);

int main()
{
    wydatki fun;
    fill(fun, sezon);
    show(fun, sezon);
    std::cin.get();
    std::cin.get();
    std::cin.get();
}

void fill(wydatki &t1, int n)
{
    for(int i=0; i < sezon; i++)
    {
        std::cout << "Podaj wydatki za okres >> " << pory[i] << ": ";
        std::cin >> t1.w[i];
    }
}

void show(wydatki t2, int n)
{
    double total = 0.0;
    std::cout << "\nWYDATKI\n";
    for(int i=0; i < sezon; i++)
    {
        std::cout << pory[i] << ": " << t2.w[i] << " zl" << std::endl;
        total += t2.w[i];
    }
    std::cout << "Laczne wydatki roczne: " << total << " zl" << std::endl;
}

 

Podobne pytania

0 głosów
1 odpowiedź 668 wizyt
pytanie zadane 25 lutego 2019 w HTML i CSS przez nichu Nowicjusz (140 p.)

92,536 zapytań

141,377 odpowiedzi

319,456 komentarzy

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

...