Funkcje - problem z parametrami i spr podzielnosci

0

Napisz funkcję, której parametrem jest liczba, a wynikiem działania jest odpowiedź, czy suma cyfr tej liczby jest podzielna przez 3.

Czy ktoś wie jak zrobić to zadanie?

Było cos takiego:

bool spr (int a)
{
if(a%3 == 0)
return true;

else
return false
} 

lecz juz wiem ze jest to zle.

Teraz popatrz się na warunek który napisałeś i zastanów. % to operator reszty z dzielenia.

Ktoś może coś pomóc?

1
bool spr (int a)
{
   int suma = 0;
   
   do
   {
      suma += a%10;
      a/=10;          
   }while(a);  
   
   if((suma % 3)  == 0)
     return true;
 
  else
    return false;
} 
0

Panie i Panowie, nie stosuje się takich konstrukcji:

if(true)
    return true;
else
    return false;

Taki zapis jest po prostu rozwlekły i debilny.

0

A jaki zapis proponujesz?

0

Głupoty gadasz !!!
Poczytaj sobie (jak znasz ang.) http://en.wikibooks.org/wiki/C%2B%2B_Programming/Programming_Languages/C%2B%2B/Code/Style_Conventions lub http://www.codeproject.com

Tam piszą tak jak ja proponuję, oczywiście każdy ma swoje zdanie. Ja piszę tak jak mnie uczyli (ze stronki: videokurs.pl ). Świetny nauczyciel, który ma lata praktyki, według Ciebie źle pisze. Oczywiście jest to temat do dyskusji, jeśli masz kilkunastoletnie doświadczenie to napisz swoją propozycję. A najlepiej niech ktoś z fachowców, się wypowie

0
return ((suma % 3) == 0);
0

Generalnie nie kumam tych przedziwnych wywodów o kursach i kilkunastoletnim doświadczeniu (jakby nie było debili z kilkunastoletnim doświadczeniem, piszących chłamowaty kod), ale @bo napisał o co chodzi.

0

tylko jeśli chcesz, żeby funkcja zwracała

 return ((suma % 3) == 0);

To nie możesz dać

bool spr (int a)

To tak na małym marginesie - bo to dział newbie

0

A to dlaczego?

0

bo "bool" zwraca true albo false i nie może zwrócić wyniku w takiej postaci jak wyżej.

(nie wiem czy dobrze teraz rozumuje ale wynik inny niż 0 będzie przyjmował wartość TRUE a równy 0 będzie przyjmował wartość FALSE.

w razie czego to poprawcie mnie

0

oczywiście masz racje, albo autor tematu chce sprawdzić podzielność, a nie zwracać reszty :]

0

tylko jeśli chcesz, żeby funkcja zwracała

return ((suma % 3) == 0);

To nie możesz dać

bool spr (int a)

W tym przypadku.

0

@pazdzioch131, wyśpij się, przeczytaj cały wątek, przemyśl, a potem się wypowiadaj.

0

Ja chce po prostu aby to bylo dobrze, najlepiej bez użycia bool

0

Sam się wyśpij i przeczytaj!

Ktoś napisał, że idzie zwrócić wartość z tego działania w return to ja napisałem, że jeśli w taki sposób chce się zwrócić wynik działania to nie można używać "BOOL" bo zwraca wynik True albo False a ty mi chcesz wmówić, że mam gdzieś błąd gdzie go nie mam.

a Jeśli chodzi o zadanie to (jeśli to nie problem i musisz dodać każda cyfrę z liczby i sprawdzić czy wynik dzielenia ==3) możesz kazać osobie o wpisanie tej liczby, ale po cyfrze czyli jak ktoś chce wpisać 146520 to każesz mu wpisać:
1(enter-sprawdzenie czy dobra wpisana czyli wieksza badz rowna 0 i mniejsza bądź równa 10-prośba o podanie nastepnej cyfry)

i jeżeli np. ktoś wpisze = koniec
to program wykona sumowanie i dzielenie a następnie zwróci to co chcesz.

Pewnie to masz tylko ćwiczenie wiec nie widzę przeszkody, żeby w taki sposób to obejść.

0

@pazdzioch131 czy ty umiesz czytać? Ale tak choć trochę? Nie odpowiadaj, widzę ze nie...

  1. Autor chce zwrócic informacje o tym "czy suma cyfr danej liczby jest podzielna przez 3 czy nie". Na tak postawione pytanie istnieje odpowiedź TAK lub NIE. Toteż funkcja bool doskonale do tego pasuje.
  2. return !(suma%3) jak najbardziej zwróci nam odpowiedź której oczekujemy.
  3. Rozumiem ze nie potrafisz rozbić liczby na cyfry i ich zsumować żeby takie kombinacje proponować? A może jeszcze zaproponujesz zeby te dane sobie wpisał statycznie do kodu, na wypadek jakby nie umiał pobrać ich z klawiatury? o_O
0

Czyli:

bool spr (int a)
{
   int suma = 0;
 
   do
   {
      suma += a%10;
      a/=10;          
   }while(a);  
 
   if((suma % 3)  == 0)
     return true;
 
  else
    return false;
} 

Ten program powinien byc w takiej postaci??,

0

Nie, bardziej elegancko jest raczej:

bool spr (int a)
{
   int suma = 0;
   do
   {
      suma += a%10;
      a/=10;          
   }while(a);  
   return ((suma % 3)  == 0);
}
0

Wklepuje ten kod w DEVie i blad wyskakuje:
syntax error before "spr"

0

A co jest złego w tym?

bool spr(int a)
{
    return ((a % 3) ==0);
}
0

A możesz pokazać kod który tam wklejasz? Poza tym w C nie ma bool. Kompilujesz to jako C czy C++?
@bo mea culpa tak to jest jak się nie czyta treści ;] oczywiście liczba jest podzielna przez 3 <=> suma cyfr tej liczby jest podzielna przez 3 ;]

0

A może nie ośmieszać się dalej? :> Nie chce zostać zjedzony przez wszystkich "wymiataczy"

1

Kod Ci nie działa bo wkleiłeś go od @Shalom. W jego kodzie brakuje ( .Wlej ten kod od @bo :

#include <iostream>

using namespace std;

bool spr (int a)
{
   int suma = 0;
   do
   {
      suma += a%10;
      a/=10;          
   }while(a);  
   
   return ((suma % 3)  == 0);
}

int main()
{
    system("PAUSE");
    return EXIT_SUCCESS;
}
1

Kod można znacznie bardziej skrócić.

#include <iostream>
 
using namespace std;
 
bool spr (int a)
{ 
   return ((a % 3)  == 0);
   //lub (bardzo nie lubię takiego zapisu)
   return !(a % 3);
}
 
int main()
{
    int x;
    //wczytaj liczbę do zmiennej x
    if(spr(x))
      printf("Suma cyfr dzieli sie przez 3 ");
    else
      printf("Suma cyfr nie dzieli sie przez 3 ");
    //system("PAUSE");
    return EXIT_SUCCESS;
}
0

Wiecie co? Ja chyba przerzuce sie na gotowanie :D Coraz bardziej mnie dołujecie, nie wiedziałem, że moja wiedza na ten temat jest aż tak znikoma...

sZEWA, ZOSTAWILEM CI WIADOMOSC NA PRIV...

0

Z tego co sie dowiedzialem to zadanie daje wynik poprawny jeśli chodzi o treść zadania, ale nie jest z nią zgodny. Bo co by było, gdyby zmienilo sie tresc zadania na
Napisz funkcję, której parametrem jest liczba, a wynikiem działania jest odpowiedź, czy suma cyfr tej liczby jest podzielna przez 7??
I co wy na to panowie? :)

0

Cytuję pierwszy post:

Napisz funkcję, której parametrem jest liczba, a wynikiem działania jest odpowiedź, czy suma cyfr tej liczby jest podzielna przez 3.

Jeśli nie wiesz jak przerobić podane programy by sprawdzały podzielność sumy cyfr przez 7, to nawet gotowanie jest dla Ciebie za trudne.

0

Jeszcze jakby się uprzeć można to skrócić za pomocą negacji: (! (suma % 3) )

za to powinni rozstrzeliwać ;-)

0
bo napisał(a)

Cytuję pierwszy post:

Napisz funkcję, której parametrem jest liczba, a wynikiem działania jest odpowiedź, czy suma cyfr tej liczby jest podzielna przez 3.

Jeśli nie wiesz jak przerobić podane programy by sprawdzały podzielność sumy cyfr przez 7, to nawet gotowanie jest dla Ciebie za trudne.

Oczywiscie kolega jest we wszystkim najlepszy... jak widac, jednak to nie takie proste... przynajmniej dla mnie. Ktos pomoze?

1
#include <iostream>
 
using namespace std;
 
bool spr (int a)
{
   int suma = 0;
   do
   {
      suma += a%10;
      a/=10;          
   }while(a);  
 
   return ((suma % 3)  == 0);
}
 
int main()
{
    system("PAUSE");
    return EXIT_SUCCESS;
}

Dostałeś powyższy kod, przerasta Cię zamiana 3 na 7?
Podpowiem, gdyby chodziło o podzielność przez 35, to należy zamienić 3 na 35.

1 użytkowników online, w tym zalogowanych: 0, gości: 1