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

funkcja przegladajaca ciag liczb c++

Object Storage Arubacloud
0 głosów
1,204 wizyt
pytanie zadane 16 stycznia 2018 w C i C++ przez acero_m Początkujący (390 p.)

Cześć Wam

Pracuje nad programem który wyszukuje w ciągu liczb całkowitych pierwszego elementu którego suma cyfr o wartościach parzystych jest mniejsza od iloczynu cyfr o wartościach nieparzystych. Przekazuję wypełniona przez użytkownika tablice do funkcji void funkcja_szukaj w której kolejno rozbijam liczbę na cyfry i sumuję bądź mnożę jej cyfry, jednak cyfry nie wliczają mi się do sumy, ani do iloczynu. Poniżej zamieszczam fragment kodu odpowiedzialnego za odnalezienie szukanej liczby. Liczę na wskazówki w jaki sposób mogę poprawić instrukcje if lub umieścić druga pętle for.

void funkcja_szukaj(int tablica[], int LiczbaElementow)
{

    int jednosci, dziesiatki, setki, tysiace, d_tysiecy;
    int a, b, c, d, e; // cyfry parzyste
    int na, nb, nc, nd, ne; // cyfry nieparzyste
    int suma, iloczyn;

    do
    for (int i=0; i<=LiczbaElementow; i++)
    {
        jednosci = tablica[i]%10;
        dziesiatki = tablica[i]/10%10;
        setki = tablica[i]/100%10;
        tysiace = tablica[i]/1000%10;
        d_tysiecy = tablica[i]/10000%10;
        // cout  <<d_tysiecy<<" "<<tysiace<<" "<<setki<<" "<<dziesiatki<<" "<<jednosci << endl;
        //linijka wyzej dodana tylko po to aby sprawdzic czy rozbija liczbe na cyfry

         if (jednosci%2==0)
                jednosci = a;
            else
                jednosci = na;

        if (dziesiatki%2==0)
                dziesiatki = b;
            else
                dziesiatki = nb;

        if (setki%2==0)
                setki = c;
            else
                setki = nc;

        if (tysiace%2==0)
                tysiace = d;
            else
                tysiace = nd;

        if (d_tysiecy%2==0)
                d_tysiecy = e;
            else
                d_tysiecy = ne;

        suma = a+b+c+d+e;
        iloczyn = na*nb*nc*nd*ne;
    }
    while (suma > iloczyn);  
    cout <<"pierwsza liczba spelniajaca kryteria to: "<< tablica[i] << endl;
}

 

2 odpowiedzi

+2 głosów
odpowiedź 16 stycznia 2018 przez nik Obywatel (1,640 p.)
edycja 16 stycznia 2018 przez nik
Za jedności przypisujesz a, zamiast za a przypisac jednosc, dlatego suma wychodzi niepoprawna.
komentarz 17 stycznia 2018 przez acero_m Początkujący (390 p.)
dzieki, spodziewalem sie, ze blad jest w szczegolach
+1 głos
odpowiedź 16 stycznia 2018 przez niezalogowany

Dostałeś już odpowiedź, ale w kodzie widać inny problem. Gdy programujesz staraj się unikać powtarzania kodu (zasada DRY). Zobacz robisz 17 zmiennych na przechowanie różnych wartości i kod wcale nie jest uniwersalny. Teraz obsługuje tylko liczby do 99999. Jak będziesz chciał poszerzyć zasięg o np 2 cyfry będziesz musiał ręcznie dodać kolejne zmienne. Dodać kolejne ich obliczenia i kolejne ify z takim samym warunkiem i %2 i to nie koniec! Zostaje jeszcze edycja sumy i iloczynu. 

Zobacz taki kod:

#include <iostream>
using namespace std;

void funkcja_szukaj(int tablica[], int LiczbaElementow)
{
	for (int i = 0; i < LiczbaElementow; ++i)
	{
		int suma_parzystych = 0; // zmienna jest lokalna wewnatrz petli for wiec przy przy kazdym cyklu wartosc zmiennej bedzie 0
		int iloczyn_nieparzystych = 1; // element neutralny dla mnozenia
		int liczba = tablica[i]; // tak, aby nie modyfikowac elementow tablicy

		do
		{
			int cyfra = liczba % 10;
			if (cyfra % 2 == 0)
			{
				suma_parzystych += cyfra;
			}
			else
			{
				iloczyn_nieparzystych *= cyfra;
			}
			liczba /= 10;
		} while (liczba > 0);

		//cout << tablica[i] << "\t" << suma_parzystych << " " << iloczyn_nieparzystych << "\n";
		if (suma_parzystych < iloczyn_nieparzystych)
		{
			cout << "Pierwsza liczba spelniajaca kryteria to: " << tablica[i] << endl;
			return; // przerwanie dzialania funkcji
		}
	}
		
	cout << "Nie znaleziono takiej liczby \n";
}

int main()
{
	const int size = 5;
	int tab[size] = { 2211, 8835, 422222235, 0, 5252 };
	funkcja_szukaj(tab, size);
}

Wystarczyły tylko 4 zmienne, a kodu jest zdecydowanie mniej. 

komentarz 17 stycznia 2018 przez acero_m Początkujący (390 p.)
dzięki wielkie, na początku chciałem żeby mój kod w tej funkcji był podobny do Twojej poprawki ale nie wiedziałem jak to zoptymalizować, bardzo mi pomogłeś

Podobne pytania

0 głosów
1 odpowiedź 110 wizyt
pytanie zadane 4 maja 2019 w C i C++ przez DobryKurczak Bywalec (2,320 p.)
0 głosów
0 odpowiedzi 99 wizyt
0 głosów
0 odpowiedzi 227 wizyt
pytanie zadane 15 czerwca 2021 w C i C++ przez pawel_000 Początkujący (450 p.)

92,563 zapytań

141,413 odpowiedzi

319,590 komentarzy

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

...