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 ? :)
Ale w czym konkretnie Ci pomóc? Z którym elementem zadania sobie nie radzisz?
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ę ?
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?
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 :)
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.
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.
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); ```
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ł ?
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ą
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 :)
- Coś takiego, chociaż chciałbyś ograniczyć długość wczytywanego stringa, tak żeby nie wyszedł nigdy poza tablicę — szczegóły w dokumentacji
scanf
. - Nie potrzebujesz sortować tablicy, żeby znaleźć medianę — zapoznaj się z algorytmem magicznych piątek.
Althorion napisał(a):
- 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.
Dziękuję bardzo za pomoc, może uda mi sie coś wykombinować :)