IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Diskusia – 5. diel - Podmienky (vetvenia) v jazyku C

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Avatar
Neaktivní uživatel:15.9.2014 11:20

Jak jde udělat větvení pomocí switche s textovými příkazy ?

Odpovedať
15.9.2014 11:20
Neaktivní uživatelský účet
Avatar
xxxvodnikxxx
Člen
Avatar
Odpovedá na Neaktivní uživatel
xxxvodnikxxx:15.9.2014 22:22

Myslim, že céčko Stringy v case nepodporuje, ale je možný to řešit např. takhle http://stackoverflow.com/…with-strings

btw Samuel Kodytek - To okno výstupu je z netbeans?
Je možný v nich nějak pod win zprovoznit kompilátor a programovat Céčko ? dík..
Objevil jsem Cintr https://edux.fit.cvut.cz/…tbeans/CIntr
ale nějak mi nešel zprovoznit

Odpovedať
15.9.2014 22:22
Unix- svět, kde chcete být nulou :) (UID)
Avatar
Samuel Kodytek
Tvůrce
Avatar
Odpovedá na Neaktivní uživatel
Samuel Kodytek:16.9.2014 17:44

String (textový řetězec) Céčko nepodporuje ale je v céčku něco jako by String ale tím se chci zabývat později :). potřebuješ na to znát pole.

Odpovedať
16.9.2014 17:44
There is more than one way to screw it
Avatar
Samuel Kodytek
Tvůrce
Avatar
Odpovedá na xxxvodnikxxx
Samuel Kodytek:16.9.2014 17:45

Pořádně jsem nepochopil co potřebuješ? Myslíš nainstalovat kompilátor do netbeanu? Pokud ano tak to máš v prvním tutoriálu ( http://www.itnetwork.cz/…-kompilatoru ) :)

Odpovedať
16.9.2014 17:45
There is more than one way to screw it
Avatar
Johny Petka
Člen
Avatar
Johny Petka:18.4.2016 20:19

Ahoj, prosím o pomoc, mám problém s funkcí sqrt() v jazyce C. Pouzivam
NetBeans IDE 8.1 a Debian.

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

/*
*
*/
int main(int argc, char** argv) {
int a;
double o = sqrt (a);

printf("Zadej cislo, ktere muzu odmocnit : \n");
scanf("%d", &a);
if (a>=0)
printf("Odmocnia cisla %d je %f",a,o);
return (EXIT_SUCCESS);

výstup:

cd '/home/chlup/Net­BeansProjects/tet­s'
/usr/bin/make -f Makefile CONF=Debug
"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
make[1]: Vstupuje se do adresáře „/home/chlup/Net­BeansProjects/tes­t“
"/usr/bin/make" -f nbproject/Makefile-Debug.mk dist/Debug/GNU-Linux/test
make[2]: Vstupuje se do adresáře „/home/chlup/Net­BeansProjects/tes­t“
mkdir -p dist/Debug/GNU-Linux
gcc -o dist/Debug/GNU-Linux/tets build/Debug/GNU-Linux/main.o
build/Debug/GNU-Linux/main.o: In function `main':
/home/chlup/Net­BeansProjects/tet­s/main.c:28: undefined reference to `sqrt'
collect2: error: ld returned 1 exit status
nbproject/Makefile-Debug.mk:62: návod pro cíl „dist/Debug/GNU-Linux/test“ selhal
make[2]: *** [dist/Debug/GNU-Linux/tets] Chyba 1
make[2]: Opouští se adresář „/home/chlup/Net­BeansProjects/tes­t“
nbproject/Makefile-Debug.mk:59: návod pro cíl „.build-conf“ selhal
make[1]: *** [.build-conf] Chyba 2
make[1]: Opouští se adresář „/home/chlup/Net­BeansProjects/tet­s“
nbproject/Makefile-impl.mk:39: návod pro cíl „.build-impl“ selhal
make: *** [.build-impl] Chyba 2

googlil jsem, na par forech jsem nasel, ze muze byt problem s libm.so, jenze
mi nejak uniklo, co s tim libm.so delat, jsem zacatecnik. Dekuji za Vas cas :)

 
Odpovedať
18.4.2016 20:19
Avatar
Libor Šimo (libcosenior):19.4.2016 6:04

Po 1. nemáš uzavretý blok main()
po 2.
int a;
double o = sqrt (a);
je blbosť, pretože a nemáš definované.

Skús to takto:

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

/*
*
*/
int main(int argc, char** argv)
{
    int a;
    //double o = sqrt (a);

    printf("Zadej cislo, ktere muzu odmocnit : \n");
    scanf("%d", &a);
    if (a>=0)
    printf("Odmocnia cisla %d je %f",a , sqrt(a));
    return (EXIT_SUCCESS);
}
Odpovedať
19.4.2016 6:04
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Johny Petka
Člen
Avatar
Odpovedá na Libor Šimo (libcosenior)
Johny Petka:19.4.2016 18:33

Díky moc za reakci :) a omlouvám se, tělo jsem uzavřené měl, neokopíroval jsem složenou závorku. Vyzkušel jsem Tvůj prográmek a přesto mi výstup hází toto :

cd '/home/chlup/Net­BeansProjects/tet­s'
/usr/bin/make -f Makefile CONF=Debug
"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
make[1]: Vstupuje se do adresáře „/home/chlup/Net­BeansProjects/tet­s“
"/usr/bin/make" -f nbproject/Makefile-Debug.mk dist/Debug/GNU-Linux/tets
make[2]: Vstupuje se do adresáře „/home/chlup/Net­BeansProjects/tet­s“
mkdir -p build/Debug/GNU-Linux
rm -f "build/Debug/GNU-Linux/main.o.d"
gcc -c -g -MMD -MP -MF "build/Debug/GNU-Linux/main.o.d" -o build/Debug/GNU-Linux/main.o main.c
mkdir -p dist/Debug/GNU-Linux
gcc -o dist/Debug/GNU-Linux/tets build/Debug/GNU-Linux/main.o
build/Debug/GNU-Linux/main.o: In function `main':
/home/hydra/Net­BeansProjects/tet­s/main.c:29: undefined reference to `sqrt'
collect2: error: ld returned 1 exit status
nbproject/Makefile-Debug.mk:62: návod pro cíl „dist/Debug/GNU-Linux/tets“ selhal
make[2]: *** [dist/Debug/GNU-Linux/tets] Chyba 1
make[2]: Opouští se adresář „/home/chlup/Net­BeansProjects/tet­s“
nbproject/Makefile-Debug.mk:59: návod pro cíl „.build-conf“ selhal
make[1]: *** [.build-conf] Chyba 2
make[1]: Opouští se adresář „/home/chlup/Net­BeansProjects/tet­s“
nbproject/Makefile-impl.mk:39: návod pro cíl „.build-impl“ selhal
make: *** [.build-impl] Chyba 2

BUILD FAILED (exit value 2, total time: 118ms)

 
Odpovedať
19.4.2016 18:33
Avatar
Odpovedá na Johny Petka
Libor Šimo (libcosenior):19.4.2016 18:36

Vykasli sa .na netbeans a nainštaluj si code::blocks.
Pozri sem:h
ttp://www.itnet­work.cz/cplus­plus/cecko-linux/tutorial-c-linux-codeblocks

Editované 19.4.2016 18:37
Odpovedať
19.4.2016 18:36
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Johny Petka
Člen
Avatar
Odpovedá na Libor Šimo (libcosenior)
Johny Petka:19.4.2016 19:46

Funguje, díky moc!!!

 
Odpovedať
19.4.2016 19:46
Avatar
DarkCoder
Člen
Avatar
Odpovedá na Samuel Kodytek
DarkCoder:6.10.2016 1:23

Obecná negace ! není relační operátor ale logický. Operátory && a || jsou rovněž logické, pojem základní nikomu nic neřekne.

Používáme-li funkci, kontroluji nejen její návratový typ ale i typy parametrů které přebírá. Funkce sqrt() opravdu nepřebírá typ i. Argumentem funkce je typ double. Takže buď proměnná a bude typu double nebo je třeba argument přetypovat na double.

double o = sqrt((double)a);

Výraz

(a == 0) je lepší psát jako (!a)  a  (a == 1) je lepší psát jako (a)
printf("Vysledek: %lf", vysledek);

pro typ double se používá %f

else
    printf("Neplatná volba \n");
    printf("\n");
    printf("Dekuji za pouziti kalkulacky");

Pokud není použit blok, je dobré dodržovat odsazování. Odsazení v tomto případě může vést čtenáře k domněnce, že všechny příkazy za else patří k sobě.

scanf("%d", &volba);
switch(volba)
{
    case 1:
        vysledek = a + b;
        break;
    case 2:
        vysledek = a - b;
        break;
    case 3:
        vysledek = a * b;
        break;
    case 4:
        vysledek = a / b;
        break;
}
if ((volba > 0) && (volba < 5))
    printf("Vysledek: %f", vysledek);
else
    printf("Neplatná volba \n");

Kód lze zapsat lépe:

scanf("%d", &volba);
switch(volba)
{
    case 1:
        printf("Vysledek: %f\n", a+b);
        break;
    case 2:
        printf("Vysledek: %f\n", a-b);
        break;
    case 3:
        printf("Vysledek: %f\n", a*b);
        break;
    case 4:
        printf("Vysledek: %f\n", a/b);
        break;
    default: printf("Neplatná volba \n");
}

Není třeba používat proměnnou výsledek, vyhodnocení výrazu lze předat jako argument funkci printf().
Navíc odpadá zbytečné porovnávání na neplatnou volbu.

Odpovedať
6.10.2016 1:23
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!