Desetinná čárka – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Desetinná čárka – C / C++ – Fórum – Programujte.comDesetinná čárka – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Martin
~ Anonymní uživatel
1377 příspěvků
10. 5. 2011   #1
-
0
-

Dobrý den,
dělám základy programování v "Céčku" a mám za úkol vytvořit kalkulačku která bude příjmat i desetinnou čárku
kalkulačka není problém, ale jak na tu desetinno učárku?
Hodil by se mi jakýkoliv TIP, rada, v případě hodně dobré vůle i funkce kterou by příkazový řádek akceptoval čárku i tečku.

Dopředu děkuji, Martin.

Nahlásit jako SPAM
IP: 78.157.144.–
Reklama
Reklama
JoDiK
~ Anonymní uživatel
981 příspěvků
10. 5. 2011   #2
-
0
-

To Martin :
Nevím, ale doteď jsem měl za to, že příkazovému řádku je úplně jedno, co mu napíšeš, přijme klidně i středník, nebo dvojtečku, nebo cokoliv jiného do něj z klávesnice naklapeš. A teprve program, který informace z příkazového řádku vyhodnocuje řeší, co s těma znakama bude dělat... Třeba čárky nahradit tečkama, nebo naopak...

Nahlásit jako SPAM
IP: 88.103.233.–
m->29+6
Super člen
11. 5. 2011   #3
-
0
-

Ak použiješ locale tak by mala funkcia scanf(3p) brať čísla na základe lokalizácie, čo by mohla byť aj čiarka v desatinnom čísle. Ale nie som istý (overiť si to musíš sám) a lokalizácia nie je spoľahlivá. Ak musíš načítať oboje tak asi načítaj čísla ako reťazec a potom nahradzuj čiarky bodkami a načítaj čísla buď cez strtod(3p) alebo sscanf(3p).

Nahlásit jako SPAM
IP: 83.240.51.–
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
13. 5. 2011   #4
-
0
-

mám už sepsaný program která berte jak destinnou čárku tak i tečku a i velké desetinné místa. Ale výsledek mi to nehodí, nevím v čem je chyba


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

int main(int argc, char *argv[])
{
int i;
char num1[1000], num2[1000], result[1000];
scanf("%s",num1);
scanf("%s",num2);
int carry=result[1000]=0;
for (i=999; i>=0; i--)
{
int res=num1[i]-'0' + num2[i]-'0' + carry;
if (res>1000)
{
res-=1000;
carry=1000;
}
else
{
carry=1;
}
result[i]=res+'0';

}

printf("%s*%s=%s\n",num1,num2,result);

system("PAUSE");
return 0;
}

Nahlásit jako SPAM
IP: 78.157.144.–
nervak0
Věrný člen
13. 5. 2011   #5
-
0
-

Ve všem.

Nahlásit jako SPAM
IP: 213.211.51.–
Martin
~ Anonymní uživatel
1377 příspěvků
13. 5. 2011   #6
-
0
-

nervak napsal:
Ve všem.


vždyť to funguje, teda až na ten výsledek :-/

Nahlásit jako SPAM
IP: 78.157.144.–
nervak0
Věrný člen
13. 5. 2011   #7
-
0
-

result[1000]=0
Když má pole 1000 prvků, tak jsou to prvky 0 až 999. Takže tu nulu vkládáš mimo to pole.

for (i=999; i>=0; i--)

int res=num1[i]-'0' + num2[i]-'0' + carry;
Ty do toho stringu zadáváš všech tisíc znaků?

result[i]=res+'0';
Tady zase nastavíš všech tisíc a nezůstane ti místo na ukončovač.

A samotná ta konverze je taky konina.

Nahlásit jako SPAM
IP: 213.211.51.–
nervak0
Věrný člen
13. 5. 2011   #8
-
0
-

#include <stdio.h>

#include <stdlib.h>
#include <string.h>
#include <locale.h>

double string2double(char *s)
{
double d;
char *p = strchr(s, ','), *end;

if (p) *p = '.';

d = strtod(s, &end);
if (*end != 0) d = 0;

return d;
}

int main(int argc, char * argv[])
{
char s1[] = "123.45", s2[] = "123,45";
double d1, d2;

setlocale(LC_NUMERIC, "C");
d1 = string2double(s1);
d2 = string2double(s2);
printf("%f %f\n", d1, d2);
return 0;
}

Nahlásit jako SPAM
IP: 213.211.51.–
Martin
~ Anonymní uživatel
1377 příspěvků
13. 5. 2011   #9
-
0
-

takže ze stringu je normmální číslo abych je mohl sečíst odečist atd ...
ale jak mám přehodit výsledek na string, aby mi hodil veliké číslo s velikým desetinným číslem ?? double mi na to nestačí
sem z toho jelen

Nahlásit jako SPAM
IP: 78.157.144.–
nervak0
Věrný člen
13. 5. 2011   #10
-
0
-

Kalkulačka v základech programování určitě nepotřebuje rozsah/přesnost větší než double.

Nahlásit jako SPAM
IP: 213.211.51.–
Martin
~ Anonymní uživatel
1377 příspěvků
13. 5. 2011   #11
-
0
-

To nervak :
to si taky myslím, ale učitel je jiného názoru.
každopádně moc dík za ten zdroják

Nahlásit jako SPAM
IP: 78.157.144.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 91 hostů

Podobná vlákna

Desetinná čárka u int — založil Lukáš

Desetinná místa — založil lekejs

Desetinná místa — založil Jakub

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý