Chemický program – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Chemický program – C / C++ – Fórum – Programujte.comChemický program – C / C++ – Fórum – Programujte.com

 

Adam
~ Anonymní uživatel
176 příspěvků
1. 10. 2011   #1
-
0
-

Dobrý den,

Nevím si rady s jedním programem, který má vlastně ukázat jak má vypadat rovnice do chemie. Uživatel zadá např:  dusičnan stříbrný a program mu má vyhodit AgNO3 (trojka je dolní index). Funguje to tak, že zadá jméno prvního prvku (to je dusík), koncovku prvního prvku(ičný) a pak druhý prvek a jeho koncovku.  Vytvořil jsem proto 60 proměnných prvků PSP, do kterých jsem inicializoval určitý název prvku.  Cykly by pak zajistily to, jestli do vstupu nezadal uživatel hovadiny, a funkce pak s proměnnými, kde by se zkontrolované vstupy uložili, pracovala a vyhodila výsledek.   Jenže jak to bývá, vždycky je v něčem háček. Jakmile uživatel zadá první prvek, tak mi jej cyklus ve funkci nechce zkontrolovat. Jestli bude true tak by se něco na to, že to funguje mělo vypsat, ale nejde to. Prosím vás proto o radu.

Zde je kód:

#include <stdio.h>
//program ma za ukol prevest nazev vzorce na vzorec

char vstup1(char vstup);

int main()
{
    //ctyry zakladni promenne, ktere ziskaji n8zev vzorce od uzivatele
    char prvniprvek[] = "";
    char koncovka1[] = "";
    char druhyprvek[] = "";
    char koncovka2[] = "";
   
    //dve vedlejsi promenne, ktere zjisti co uzivatel zadal
    char prvek1[] = "";
    char prvek2[] = "";
   
    //promenne pro koncovky
    char ny[] = "ny";
    char naty[] = "naty";
    char ity[] = "ity";
    char icity[] = "icity";
    char ecny[] = "ecny";
    char icny[] = "icny";
    char ovy[] = "ovy";
    char isty[] = "isty";
    char icely[] = "icely";
   
    //prvky, ktere se budou pouzivat
    char h[] = "vodik";
    char li[] = "lithium";
    char be[] = "beryllium";
    char na[] = "sodik";
    char mg[] = "horcik";
    char k[] = "draslik";
    char ca[] = "vapnik";
    char sc[] = "skandium";
    char rb[] = "rubidium";
    char sr[] = "stroncium";
    char y[] = "yttrium";
    char cs[] = "cesium";
    char ba[] = "baryum";
    char la[] = "lanthan";
    char fr[] = "francium";
    char ra[] = "radium";
    char ac[] = "aktinium";
    char ti[] = "titan";
    char v[] = "vanad";
    char cr[] = "chrom";
    char mn[] = "mangan";
    char fe[] = "zalezo";
    char co[] = "kobalt";
    char ni[] = "nikl";
    char cu[] = "med";
    char zn[] = "zinek";
    char zr[] = "zirkonium";
    char nb[] = "niob";
    char mo[] = "molybden";
    char tc[] = "technecium";
    char ru[] = "ruthenium";
    char rh[] = "rhodium";
    char pd[] = "palladium";
    char ag[] = "stribro";
    char cd[] = "kadmium";
    char he[] = "helium";
    char b[] = "bor";
    char c[] = "uhlik";
    char n[] = "dusik";
    char o[] = "kyslik";
    char f[] = "fluor";
    char ne[] = "neon";
    char al[] = "hlinik";
    char si[] = "kremik";
    char p[] = "fosfor";
    char s[] = "sira";
    char cl[] = "chlor";
    char ar[] = "argon";
    char ga[] = "gallium";
    char ge[] = "germanium";
    char as[] = "arsen";
    char se[] = "selen";
    char br[] = "brom";
    char kr[] = "krypton";
    char in[] = "indium";
    char sn[] = "cin";
    char sb[] = "antimon";
    char te[] = "tellur";
    char i[] = "jod";
    char xe[] = "xenon";
       
    //ziskani dat od uzivatele
    printf("Zadejte prvni prvek: ");
    scanf("%s", &prvniprvek);
    printf("Zadejte koncovku prvniho prvku: ");
    scanf("%s", &koncovka1);
    printf("Zadejte druhy prvek: ");
    scanf("%s", &druhyprvek);
    printf("Zadejte koncovku druheho prvku: ");
    printf("%s",&koncovka2);
   
   
   
    getchar();
    getchar();
    getchar();
    getchar();
    return 0;  
}

char vstup1(char vstup)
{
     while(prvniprvek == h)
    {
                   printf("%s", vstup1("vodik")); 
    }
   
    while( prvniprvek == li)
    {
    }
   
    while(prvniprvek == be)
    {
    }
   
    while(prvniprvek == na)
    {
    }
   
    while(prvniprvek == mg)
    {
    }
   
    while(prvniprvek == k)
    {
    }
   
    while(prvniprvek == ca)
    {
    }
   
    while( prvniprvek == sc)
    {
    }
   
    while(prvniprvek == rb)
    {
    }
   
    while(prvniprvek == sr)
    {
    }
   
    while(prvniprvek == y)
    {
    }
   
    while(prvniprvek == cs)
    {
    }
   
    while(prvniprvek == ba)
    {
    }
   
    while(prvniprvek == la)
    {
    }
   
    while(prvniprvek == fr)
    {
    }
   
    while(prvniprvek == ra)
    {
    }
   
    while(prvniprvek == ac)
    {
    }

Nahlásit jako SPAM
IP: 81.91.220.–
street punk+1
Návštěvník
1. 10. 2011   #2
-
0
-

Nechcel si dať namiesto toho while náhodou if ?..Podla tej jednej ukážky s vodíkom usudzuje, že ty nechceš volačo meniť v cykle, ale chceš jednoducho vykonať jeden príkaz, keď sa == niečomu. A to by som dokonca nepoužil to if a else if, ale príkaz switch()

Nahlásit jako SPAM
IP: 188.112.69.–
KIIV
~ Moderátor
+43
God of flame
1. 10. 2011   #3
-
0
-

#2 street punk
myslis ze mu bude switch na retezce k necemu dobrej?

Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
crazy
~ Moderátor
+10
Grafoman
1. 10. 2011   #4
-
+1
-
Zajímavé

#1 Adam
hlavně řetězce nemůžeš porovnávat řetezec==řetětec2... ale musíš použít fci strcmp...

Nahlásit jako SPAM
IP: 89.190.90.–
All you need is vision and time.
Adam
~ Anonymní uživatel
176 příspěvků
3. 10. 2011   #5
-
0
-

#4 crazy
Jak to myslíte. 

Nahlásit jako SPAM
IP: 81.91.220.–
KIIV
~ Moderátor
+43
God of flame
3. 10. 2011   #6
-
0
-

#5 Adam
retezec je jen adresa nekde v pameti... kdyz srovnavas:     retezec1 == retezec2  tak se muzou rovnat jen v jednom jedinem pripade - kdyz jsou na stejnem miste v pameti... (tj. retezec2 bude:    char * retezec2 = retezec1)

pak je mimochodem uplna zbytecnost pripravovat si promenne jako    char neco[] = ""  .... k cemu je prazdna promenna do ktery uz nic nemuzes dat? (a pokud das tak prepises neco jineho, co je za ni)

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Thomasso0
Newbie
3. 10. 2011   #7
-
0
-

Musíš připojit knihovnu:

#include <string.h>

A pak napsat:

if (strcmp(retezec1, retezec2) == 0) {
  prikaz;
}
Nahlásit jako SPAM
IP: 80.188.117.–
Adam
~ Anonymní uživatel
176 příspěvků
3. 10. 2011   #8
-
0
-

#6 KIIV
Díky, takže sem ty proměnné vlastně vytvářel zbytečně. I když sem pouhý začátečník tak sem nevěděl rozdíl mezi řetězcem a textovým řetězcem.

Nahlásit jako SPAM
IP: 81.91.220.–
crazy
~ Moderátor
+10
Grafoman
3. 10. 2011   #9
-
0
-

#8 Adam
jaký je tedy rozdíl mezi řetězcem a text. řetězcem? (ten první má být řetězec čeho?)

Nahlásit jako SPAM
IP: 147.32.113.–
All you need is vision and time.
Adam
~ Anonymní uživatel
176 příspěvků
3. 10. 2011   #10
-
0
-

#9 crazy
O tom, o kterém mluvil pan Adam

Nahlásit jako SPAM
IP: 81.91.220.–
KIIV
~ Moderátor
+43
God of flame
3. 10. 2011   #11
-
0
-

kazdopadne pokud mas na vyber tak bych zvolil spis c++, tridu string na retezce (to uz ma definovanej operator ==) a slovnik map - asociativni pole klic->hodnota... z toho by se uz dalo poskladat neco mensiho...

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Adam
~ Anonymní uživatel
176 příspěvků
4. 10. 2011   #12
-
0
-

#11 KIIV
Dobře. Jen mi ještě řekněte, jestli se dá v programu Dev C vytvořit program napsaný v C++

Nahlásit jako SPAM
IP: 81.91.220.–
yaqwsx+9
Posthunter
4. 10. 2011   #13
-
0
-

#12 Adam
Ano, dá.

Nahlásit jako SPAM
IP: 85.160.66.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
Adam
~ Anonymní uživatel
176 příspěvků
4. 10. 2011   #14
-
0
-

#13 yaqwsx
Diky všem za odpvěď.

Nahlásit jako SPAM
IP: 81.91.220.–
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, 77 hostů

Podobná vlákna

C# program — založil Tomas.P

Program — založil opi10

Program — založil Jan Burant

Program — založil dakine

Moderátoři diskuze

 

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