Zadanie " rozbicie liczby na składowe"

0

Cześć,
Pisze z pewnym problemem. Jestem początkującym w programowaniu, uczę się w języku C. Dostałem od prowadzącego w którym program musi rozbić podana liczbę na składowe, wyznaczy jej sumę oraz posortuje je od najmniejszej do największej i wyznaczy medianę. Np liczba 1246.256 składa się z 1, 2, 4, 5, 6, suma tych cyfr to 18 a mediana to 4. Czy znalazłby się ktoś kto mogłby mi pomóc oraz dobrze wytłumaczyć pewne aspekty, ponieważ nie wiem jak zabrać się to tego zadania ? :)

1

Ale w czym konkretnie Ci pomóc? Z którym elementem zadania sobie nie radzisz?

0
Althorion napisał(a):

Ale w czym konkretnie Ci pomóc? Z którym elementem zadania sobie nie radzisz?

W jaki sposób mam wprowadzić moją liczbę tak żebym mógł swobodnie rozbić ją na dane cyfry ?
Czy jeśli będzie już rozbita mam użyć instrukcji if żeby dane cyfry nie powtarzały się ?

1

Możesz przyjąć liczbę od użytkownika jako string, wówczas będziesz ją miał od razu rozbitą na cyfry, jedynie będziesz musiał te cyfry skonwertować do intów. Jeśli jednak z jakiegoś powodu dostajesz od razu liczbę zmiennoprzecinkową, to rozetnij ją na część całkowitą i ułamkową modf, po czym ostatnia cyfra to reszta z dzielenia przez 10, potem podziel przez dziesięć, żeby ją „uciąć” i powtarzaj do skutku.

Nie pisałeś nic wcześniej o wyszukiwaniu powtarzających się cyfr — do czego Ci to potrzebne?

0

Nie pisałeś nic wcześniej o wyszukiwaniu powtarzających się cyfr — do czego Ci to potrzebne

Chodzi mi o to że jeśli będzie liczba 12,212121 to odpowiedź ma być że ta liczba składa się z cyfr 1 i 2 :)

0

https://www.google.com/search?q=rozbicie+liczby+na+cyfry+c%2B%2B+site:4programmers.net

Czy jeśli będzie już rozbita mam użyć instrukcji if żeby dane cyfry nie powtarzały się ?

Rozbijają liczbę na cyfry możesz je umieszczać w tablicy i utworzyć pętlę w której sprawdzasz, czy została już któraś dodana.

1

Mhm. To w C bym zrobił sobie dziesięcioelementową tablicę booli (boole są dostępne od C99 w #include <stdbool.h>), gdzie element 0 oznacza, czy wystąpiła cyfra 0, element 1, czy wystąpiła cyfra 1 itd.

0
Althorion napisał(a):

Mhm. To w C bym zrobił sobie dziesięcioelementową tablicę booli (boole są dostępne od C99 w #include <stdbool.h>), gdzie element 0 oznacza, czy wystąpiła cyfra 0, element 1, czy wystąpiła cyfra 1 itd.
Mogłbyś mi jaśniej wytlumaczyć o co chodzi, nie za bardzo wiem jak miałaby wyglądać składnia takiej tablicy ?
Prowadzący na zajęciach wspominał że najlepiej " wprowadzoną liczbę umieścić w tablicy", lecz nie do końca rozumiem jak to ma wyglądać :/
Chodzi o cos takiego ?

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

int main(int argc, char** argv) {
char liczba [30];```

printf ("Podaj liczbe: ");
scanf ("%f", &liczba);

return (EXIT_SUCCESS);  ```
0

czytałem włąsnie coś o "sortowaniu bąbelkowym" ? czy mogłbym zrobić tak żeby posortować moją tablice właśnie w ten sposób i poźniej wyznaczyć z niej najmniejszą najwieksza wartość mediane oraz sume elementów ? czy to zły pomysł ?

1

Cóż za pokopany język programowania. Nie mogę uwierzyć że kiedyś go lubiłem. Na wszystko trzeba uważać, bo wszystko chce cię zabić. Prawie jak w Javascripcie

#include <stdio.h>

int main()
{
    int digits[10] = {0,0,0,0,0,0,0,0,0,0};
    char number[100];
    int i;
    int l;
    char c;
    
    gets(number);
    l = strlen(number);

    for (i = 0; i < l; ++i) {
        c = number[i];
        if ( '0' <= c && c <= '9' ) {
            digits[c - '0'] |= 1;
        }
    }
    
    for(i = 0; i < 10; ++i) {
        if (digits[i]) {
            putchar(i + '0');
        }
    }

    return 0;
}

Nie daję żadnej gwarancji że to dobry kod.
Nie jest to gotowiec bo ja nie umiem w C.
na pewno brakuje jeszcze sprawdzenia czy to co wczytaliśmy w ogóle jest liczbą

0

Dziekuję, nie zależy mi na gotowym kodzie, pokombinuję z tym kodem co mi wysłałeś, zależy mi na tym żeby się czegos dowiedzieć oraz na wskazówkach jak zrobić to zadanie :)

0
  1. Coś takiego, chociaż chciałbyś ograniczyć długość wczytywanego stringa, tak żeby nie wyszedł nigdy poza tablicę — szczegóły w dokumentacji scanf.
  2. Nie potrzebujesz sortować tablicy, żeby znaleźć medianę — zapoznaj się z algorytmem magicznych piątek.
0
Althorion napisał(a):
  1. Nie potrzebujesz sortować tablicy, żeby znaleźć medianę — zapoznaj się z algorytmem magicznych piątek.

Dokładnie tak.

Btw. robienie histogramu dla wszystkich cyfr, których jest aż 10 to w zasadzie jest już pewien sposób sortowania, np:

#include <stdio.h>
#include <stdlib.h>

int main() {

    int digits[10] = {0,0,0,0,0, 0,0,0,0,0};
    const int MAX_NUMS = 15;

    printf("Losuj:            ");
    for (int i = 0; i < MAX_NUMS; i++) {
        int n = rand() % 10;
        digits[n]++;
        printf(" %d", n);
    }

    printf("\nHistogram:        ");
    for (int i = 0; i < 10; i++) {
        printf(" d%d=%d", i, digits[i]);
    }

    printf("\nRozwiń(posortuj): ");
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < digits[i]; j++) {
            printf(" %d", i);
        }
    }

    printf("\nbye.\n");
}

output:

Losuj:             1 7 4 0 9 4 8 8 2 4 5 5 1 7 1
Histogram:         d0=1 d1=3 d2=1 d3=0 d4=3 d5=2 d6=0 d7=2 d8=2 d9=1
Rozwiń(posortuj):  0 1 1 1 2 4 4 4 5 5 7 7 8 8 9
bye.
0

Dziękuję bardzo za pomoc, może uda mi sie coś wykombinować :)

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