Problem z przybliżeniem wyniku tablicy

Problem z przybliżeniem wyniku tablicy
Wayne
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 3 lata
  • Postów:31
0

Witam, opis mojego problemu jest zawarty w tytule - "Problem z przybliżeniem wyniku tablicy", no więc ujmując to dokładniej mam taką funkcje(wklejam tutaj jedynie jej fragment):

Kopiuj
void zlicz()
{
	int liczba1;
	int liczba2;
	int losowanie;
	int ins;
	int punktacja = 0;
	while (true) {
		srand(time(NULL));

		liczba1 = rand() % 100 + 1;
		liczba2 = rand() % 100 + 1;
		losowanie = rand() % 4 + 0;

		if (losowanie == 3 && liczba1 < liczba2)
		{
			int temp;
			temp = liczba1;
			liczba1 = liczba2;
			liczba2 = temp;
			cout << "Zamienilem licznik z mianownikiem" <<endl;

		}
		cout << "Zmienna losowanie wynosi: " << losowanie <<endl;
		double tab[] = { liczba1 + liczba2,liczba1 - liczba2,liczba1 * liczba2,liczba1 / liczba2 };
		string wstawznak[] = { "+","-","*","/" };
		tab[losowanie];
		cout << liczba1;
		cout << wstawznak[losowanie];
		cout << liczba2;
		cout << "=" << endl;
		cout << "zmienna losowanie " << losowanie << endl;
		cout << "wynik: " << tab[losowanie] << endl;
		cin >> ins;
		if(losowanie==3) 
		{
			cout << "przed" << tab[losowanie] << endl;
			tab[losowanie]=ceil(tab[losowanie]);
			cout << "wynik"<<tab[losowanie];
			getchar();
			getchar();
		}
}

Problem leży w tym, że dla tablicy zawierającej "liczba1/liczba2"-tab[3] chce, aby poprawnym wynikiem byla liczba przyblizona o zasade ceil. - Funkcja ceil
Funkcja ceil zaokrągla liczby zawsze w górę. Tak więc, liczba np. 3.0001 zostanie zaokrąglona do 4.
.

edytowany 1x, ostatnio: Wayne
AK
Określasz te funkcje niepoprawnie, to i trudno zagwarantować bezbłędność dalszej logiki. Słowa SĄ WAŻNE
Wayne
@AnyKtokolwiek: Dużo mi to nie mówi xD Większych błędów w kodzie nie widze :>
lion137
"Cały problem polega na tym, że chce przypisać przybliżony wynik tablicy z dzieleniem do tab'a ale program nie wypisuje tego jakby wykonywał przybliżenia." WTF? Co chcesz zrobić? Napisz to jaśniej.
Wayne
@lion137: Teraz chyba jest lepiej
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:3 minuty
  • Postów:4930
2

Co Chcesz zaokrąglać, wszędzie w tej tablicy Masz liczby całkowite: najpierw Wykonujesz działania na liczbach całkowitych, a potem je Rzutujesz na double, co już jest za późno; liczba1/liczba2, np., zawsze będzie całkowite. Zadeklaruj je [liczba1 i liczba2], jako zmiennoprzecinkowe.


_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:dzień
1

wg mnie wystarczy:

Kopiuj
double tab[] = { liczba1 + liczba2,liczba1 - liczba2,liczba1 * liczba2,ceil((double)liczba1 / liczba2)};

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:3 minuty
0
Kopiuj
while (true) {
        srand(time(NULL));

złe użycie srand. srand(time(NULL)); powinno się wywołać raz na początku.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
Wayne
Jeżeli user zgadnie liczbe, to program musi wylosować kolejną więc dlaczego tylko raz ?
MarekR22
popatrz na to zawsze wychodzi to samo (powolność użytkownika ratuje twój kod). Pogooglaj o co chodzi.
Wayne
Już to naprawiłem, dzięki wielkie za pomoc.( główny problem i ten z użyciem srand przed while'a)
Wayne
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 3 lata
  • Postów:31
0
lion137 napisał(a):

Co Chcesz zaokrąglać, wszędzie w tej tablicy Masz liczby całkowite: najpierw Wykonujesz działania na liczbach całkowitych, a potem je Rzutujesz na double, co już jest za późno; liczba1/liczba2, np., zawsze będzie całkowite. Zadeklaruj je [liczba1 i liczba2], jako zmiennoprzecinkowe.

Miałeś racje, myślałem, że jeżeli liczby są jako int, a ich wynik jest zapisany w double to wynik zostanie wypisany jako double. Jednakże wszystko jest już jasne, dziękuje za pomoc.

edytowany 2x, ostatnio: Wayne

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.