polecenie do zadania jest takie aby jakąś liczbe całkowitą (w centymerach) którą poda użytkownik wyświetlić w metrach, centymetrach i decymetrach. Jakie należy wprowadzić polecenia aby wyświetliły mi się liczby w podanych jednostkach ? np. 1234cm to 12m,3dm i4cm
Napisz program, który będzie zamieniał cm na inne jednostki.
Nie rozumiem problemu. Proste mnożenie.
using System;
class MainClass
{
public static void Main (string[] args)
{
int centymetry = 120;
int metry = centymetry / 100;
int reszta = centymetry % 100;
if(reszta == 0)
{
Console.WriteLine(centymetry + " centymetrów to: ");
Console.WriteLine(metry + " metrów.");
}
else
{
int decymetry = reszta / 10;
int reszta2 = reszta % 10;
if(reszta2 == 0)
{
Console.WriteLine(centymetry + " centymetrów to: ");
Console.Write(metry + " metrów i");
Console.Write(decymetry + " decymetrów.");
}
else
{
Console.WriteLine(centymetry + " centymetrów to: ");
Console.Write(metry + " metrów,");
Console.Write(decymetry + " decymetrów i ");
Console.Write(reszta2 + " centymetrów");
}
}
}
}
Zmienna length oznacza ilosc cm
...
//pomijam kwestię wczytania
int m = length / 100; // Przypisujemy zmiennej m wartość dzielenia podanej długości przez 100 (ponieważ 1m = 100cm)
length = length - (m * 100); // Odejmujemy od podanej długości ilość metrów (wyrażoną w cm dlatego mnożymy to przez 100)
int dm = length / 10; // Przypisujemy zmiennej m wartość dzielenia podanej długości przez 10 (ponieważ 1dm = 10cm)
int cm = length % 10; // Przypisujemy zmiennej cm wartośc dzielenia modulo (reszty z dzielenia przez daną liczbę)
...
///pomijam kwestię wyprowadzenia danych
tak się tego nie robi. Mimo, że jest dobrze!
ostream& PrintDistanceUnits(ostream& out, int distanceInCm)
{
static struct {
const int unit;
const char * const name;
} units[] = {
{ 100000, " km"},
{ 100, " m"},
{ 10, " dm"},
{ 1, " cm"},
};
static const int unitsCount = sizeof(units)/sizeof(units[0]);
for (int i=0; i<unitsCount; ++i)
{
int distanceInCurentUinit = distanceInCm/units[i].unit;
distanceInCm %= units[i].unit;
if (distanceInCurentUinit) {
out << ' ' << distanceInCurentUinit << units[i].name;
}
}
return out;
}
Dzięki temu można dowolnie modyfikować zestaw jednostek zmieniając tylko stałe dane, a nie sam kod.
Przykładowo zrób to samo dla prefiksów jednostek od terra do nano.
Witam
Przepisałem kod podany przez MarekR22 w C. Proszę o sprawdzenie poprawności.
#include <stdio.h>
struct unit
{
const unsigned int unit;
const char *name;
}jednostka;
int main()
{
unsigned int DistanceInCm;
unsigned int DistanceInCurrentUnit = 0;
int i = 0;
struct unit jednostka[]=
{
{100000, " km"},
{100, " m"},
{10, " dm"},
{1, "cm"},
};
const int UnitsCount = sizeof(jednostka)/sizeof(jednostka[0]);
printf("Wprowadz dystans w cm: \n");
scanf("%u",&DistanceInCm);
printf("Dystans wynosi: ");
for(i=0;i<UnitsCount;i++)
{
DistanceInCurrentUnit=DistanceInCm/jednostka[i].unit;
DistanceInCm%=jednostka[i].unit;
if(DistanceInCurrentUnit)
printf("%d - %s ",DistanceInCurrentUnit,jednostka[i].name);
}
return 0;
}
Pomijam poprawnośc wprowadzania danych i przekroczenie zakresu.
MarekR22 pisałem też podobne programy do przeliczania ilości dni na lata miesiące tygodnie, albo innych jednostek, ale nie pomyślałem zeby te dane na sztywno umieścic w strukturze. Podałeś kawał dobrego, tłustego i logicznego kodu. Podoba mi się ten kod. Mam do Ciebie prośbę jeśli masz jakieś zadania z programowania czy mógłbyś proszę wysłac mi kilka do rozwiązania i udzielic kilku wskazówek. Albo podac materiały do nauki programowania z których korzystałeś, bo pomimo, że algorytm nie jest skomplikowany, to Twój kod nie jest trywailny.
Pozdrawiam