Wypisanie cyfry jedności

0

Cześć, zaczęłam programować niedawno. Mam problem z takim jednym zadaniem - ,,Cyfra Jedności''. Zadanie polega na:
*wypisaniu słownie cyfrę jedności liczby n.
ma wypisać:
"zero" jeżeli cyfra jedności n to 0
"jeden" jeżeli cyfra jedności n to 1
"dwa" jeżeli cyfra jedności n to 2
"trzy" jeżeli cyfra jedności n to 3
"cztery" jeżeli cyfra jedności n to 4
"piec" jeżeli cyfra jedności n to 5
"inna" jeżeli cyfra jedności n jest większa niż 5
*
Mój problem konkretnie polega na komendzie, która właśnie wypisuje tą ,,cyfrę jedności". W internecie nie mogę nic znaleźć, a nawet jak znajdę to jest to dla mnie niezrozumiałe.
Czekam na odp.

5

Cyfrę wyznaczysz robiąc % 10 ("modulo 10"), a wyświetlisz za pomocą switch - czyli coś w stylu: switch (n % 10) { case 0: /* ... */ case 1: /* ... */ ... }.

0

czy zamiast switch mogę użyć po prostu cout<< ? Czy mówiąc ,,wyświetlisz'' miałeś coś innego na myśli?

2

Prawie, prawie!

switch (...) {
  case 0:
    cout << "zero";
    break;

  case 1:
    /* ... */

  /* ... */
}
5

Zacznijmy od początku: czy rozumiesz, co to jest cyfra jedności? Jest to najmniej znacząca cyfra w liczbe, liczona „razy jeden” — stąd nazwa. Np. jak masz liczbę 123 (sto dwadzieścia trzy), to cyfrą jedności jest 3, a sama liczba to 100 · 1 + 10 · 2 + 1 · 3. Cyfra jedności to 3, cyfra dziesiątek to 2, a cyfra setek — 1. Podobnie, w liczbie 5612871245 cyfra jedności to 5, w liczbie 88, w liczbie 0 — 0, w liczbie -7511, w liczbie -55, itd.

Jak ją wyznaczyć? Na początkek musisz przekonwertować liczbę na nieujemną — wartością bezwzględną, z std::abs, a potem wyznaczyć resztę z dzielenia przez dziesięć — operatorem %. Potem potrzebujesz jakiejś instrukcji warunkowej — switch jest naturalnym wyborem, żeby uniknąć drabinki ifów. Samo wypisanie zrealizujesz na przykład std::cout.

0

Okej. Dziękuję wam bardzo! Spróbuję wykorzystać wasze rady, i zobaczymy co z tego wyjdzie. :)

0

jeszcze pytanko, do @Patryk27 . Co właściwie oznacza polecenie case?

4

Przeczytaj sobie — na przykład w zamieszczonym przeze mnie linku wyżej — o instrukcji switch, to będziesz wiedział. tl;dr; wygląda ona tak:

switch (wyrażenie) {
  case wartość_1:
    // co się dzieje, gdy wyrażenie == wartość_1
    break;
  case wartość_2:
    // co się dzieje, gdy wyrażenie == wartość_2
    break;
  default:
    // co się dzieje, gdy żadne z powyższych
0

aha, okej. Spróbuję

0

a no tak... Pomieszało mi się z tym jak się pisze int main()
Poprawiłam teraz to, tyle że zamiast błędu kodu wypisuje mi nie to co trzeba. Bierze pod uwagę ,,całą liczbę'' a nie tak jak miało być ,,cyfrę jedności''

0
#include <iostream>

using namespace std;

int main()
{
    int n;
    cin>>n;
    switch (n) {
       case 0:
       cout<<"zero";
       break;

        case 1:
        cout<< "jeden";
        break;
        
        case 2:
        cout<<"dwa";
        break;
        
        case 3:
        cout<<"trzy";
        break;
        
        case 4:
        cout<<"cztery";
        break;
        
        case 5:
        cout<<"piec";
        break;
        
        default:
        cout<<"inna";
        break;
        
}

    return 0;
}
1

Gdzie masz operację modulo?

0
Patryk27 napisał(a):

Gdzie masz operację modulo?

nie wiedziałam gdzie go dać. Może po case?

3

Przecież już w pierwszym poście podałem konkretny kod 👀

0

no tak... sorry... Jestem jakaś zagubiona dzisiaj...

0

Dziękuję bardzo! Uważam, że zadanie jest wykonane poprawnie. Zobaczę we wtorek co na to mój wykładowca/nauczyciel.

1

To ja dorzucę od siebie swoje dwa grosze - polecam nie używać switch nigdy :D Moim zdaniem albo lepiej zostawić 10 ifów i zmienną, a jeśli już chcemy próbować to robić jakoś "lepiej" to wtedy zamienić na mapę lub jakieś inne odpowiednie rozwiązanie.

2
#include <iostream>
#include <iterator>
using namespace std;

int main()
{
	static const char *digits[]={"zero","jeden","dwa","trzy","cztery","pięć","sześć","siedem","osiem","dziewięć"};
	cout<<"Podaj liczbę: ";
   	istream_iterator<unsigned> uin(cin);
	unsigned value=(*uin)%10;
	cout<<(value<=5?digits[value]:"inna")<<endl;
	return 0;
}

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