NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Problém se spuštěním programu

V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
David Švec
Člen
Avatar
David Švec:24.1.2018 17:27

Zdravím,
napsal jsem program na výpočet kvadr. rovnice a rozhodl jsem se, že bych ho zkusil zkompilovat. No, kompilace proběhla v pořádku, ale když chci ten program spustit napíše to chybu (viz obrázek). Cygwin jsem přeinstaloval, ale bez úspěchu.. poradí mi někdo co dělat? :)

 
Odpovědět
24.1.2018 17:27
Avatar
Erik Šťastný:24.1.2018 17:43

Protože jsi v programu použil něco z knihovny cygwin1.dll a tím pádem ji musíš dodávat společně se svým exe

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
24.1.2018 17:43
Avatar
David Švec
Člen
Avatar
David Švec:24.1.2018 17:57

aha, děkuji zkopíoval jsem tam ten soubor a už to "funguje".. nevím, kde mám chybu protože při komilaci nic nenastalo.. Když se ten program spustím, tak se normálně načte, ale když tam chci zadat tu rovnici a zmáčknu enter, tak se program vypne.. :/

 
Nahoru Odpovědět
24.1.2018 17:57
Avatar
Odpovídá na David Švec
Erik Šťastný:24.1.2018 18:03

No pokud nespadne s žádnou chybou, tak je možná tvá logická chyba. Nebo je možné, že se tiše ukončí, protože mu chybí nějaká další knihovna.

Zkus si to odkrokovat v IDE :)

Editováno 24.1.2018 18:04
 
Nahoru Odpovědět
24.1.2018 18:03
Avatar
David Švec
Člen
Avatar
Odpovídá na Erik Šťastný
David Švec:24.1.2018 18:09

v IDE funguje všechno v pořádku. Nevím no.. když jsem si zkusil zkompilovat Hello World, tak ten když se spustil, tak se za vteřinu zase vypl.. :) nevím co mám špatně.

 
Nahoru Odpovědět
24.1.2018 18:09
Avatar
Odpovídá na David Švec
Erik Šťastný:24.1.2018 18:10

Pokud to v IDE funguje, vsadil bych na to chybějící DLL, nicméně ten Hello word je divný, pošli kód. :)

Editováno 24.1.2018 18:11
 
Nahoru Odpovědět
24.1.2018 18:10
Avatar
David Švec
Člen
Avatar
David Švec:24.1.2018 18:30

vím, že to šlo napsat lépe, ale jsem začátečník, prosím schovívavost, jediné v čem jsemsi jistý je spravnost kodu. :)

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * File:   main.c
 * Author: David
 *
 * Created on 21. ledna 2018, 16:52
 */

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

/*
 *
 */
int main(int argc, char** argv) {
    double a, b, c, cast1, cast2, diskriminant, x1, x2, x12, x;
    printf("Zadej rovnici: ");
    scanf("%lfx2%lfx%lf", &a, &b, &c);
    printf("\n");
    if (((a == 0) & (b == 0) & (c == 0)) || ((a == 0)& (b != 0) & (c == 0)) || ((a != 0) & (b == 0) & (c == 0)))
    {
        printf("Toto není rovnice! Řešením jsou všechna reálná čísla.");
    }
    if ((a == 0) & (b == 0) & (c != 0))
    {
        printf("Rovnice nemá řešení!");
    }
    if ((a == 0) & (b != 0) & (c != 0))
    {
        x = (-c)/b;
        printf("Zadal jsi nulový koeficient 'a' => jedná se o lineární rovnici.\n");
        printf("Výpočet:\n");
        printf("%gx + %g = 0\n", b, c);
        printf("x = %g", x);
    }
    if ((a != 0) & (b == 0) & (c != 0))
    {
        printf("Zadal jsi nulový koeficient 'b' => jedná se o ryze kvadratickou rovnici.\n");
        printf("Výpočet:\n");
        if (c < 0)
        {
            x1 = c/a;
            x2 = -(c/a);
            printf("Rovnice má dva různé reálné kořeny.\n");
            printf("%gx2%g = 0\n", a, c);
            printf("x1 = %g\n", x1);
            printf("x2 = %g", x2);
        }
        if (c > 0)
        {
            x1 = sqrt(c/a);
            x2 = - sqrt(c/a);
            printf("Rovnice má dva různé KOMPLEXNÍ kořeny.\n");
            printf("%gx2 + %g = 0\n", a, c);
            printf("x1 = %gi\n", x1);
            printf("x2 = %gi", x2);
        }
    }
    if (((a != 0) & (b > 0) & (c == 0)) || ((a != 0) & (b < 0) & (c == 0)))
    {
        x1 = 0;
        x2 = -(b/a);
        printf("Zadal jsi nulový koeficient 'c' => jedná se o kvadratickou rovnici bez absolutního členu.\n");
        printf("Výpočet:\n");
        if (b > 0)
        {
            printf("%gx2 + %gx = 0\n", a, b);
            printf("x1 = %g\n", x1);
            printf("x2 = %g\n", x2);
        }
        if (b < 0)
        {
            printf("%gx2%gx = 0\n", a, b);
            printf("x1 = %g\n", x1);
            printf("x2 = %g\n", x2);
        }
    }
    if ((a != 0) & (b != 0) & (c != 0))
    {
        diskriminant = (b * b) - (4 * a * c);
        printf("Výpočet:\n");
        printf("D = (%g)^2 - 4*(%g)*(%g)\n", b, a, c);
        printf("D = %g\n", diskriminant);
        if (diskriminant < 0)
        {
            cast1 = (-b)/(2 * a);
            cast2 = (sqrt(abs(diskriminant)))/(2 * a);
            printf("D < 0\n");
            printf("√D = %gi\n", sqrt(abs(diskriminant)));
            printf("Rovnice má dva různé KOMPLEXNÍ kořeny.\n");
            printf("x1 = (-(%g) + √%g)/(2 * (%g))\n", b, diskriminant, a);
            printf("x2 = (-(%g) - √%g)/(2 * (%g))\n", b, diskriminant, a);
            printf("x1 = %g + %gi\n", cast1, cast2);
            printf("x2 = %g - %gi", cast1, cast2);
        }
        if (diskriminant == 0)
        {
            x12 = (-b)/(2 * a);
            printf("D = 0\n");
            printf("Rovnice má jeden dvojnásobný kořen.\n");
            printf("x12 = -(%g)/(2 * (%g))\n", b, a);
            printf("x12 = %g", x12);
        }
        if (diskriminant > 0)
        {
            x1 = (-b + sqrt(diskriminant))/(2 * a);
            x2 = (-b - sqrt(diskriminant))/(2 * a);
            printf("D > 0\n");
            printf("√D = %g\n", sqrt(diskriminant));
            printf("Rovnice má dva různé reálné kořeny\n");
            printf("x1 = (-(%g) + √%g)/(2 * (%g))\n", b, diskriminant, a);
            printf("x2 = (-(%g) - √%g)/(2 * (%g))\n", b, diskriminant, a);
            printf("x1 = %g\n", x1);
            printf("x2 = %g", x2);
        }
    }
    return (EXIT_SUCCESS);
}
 
Nahoru Odpovědět
24.1.2018 18:30
Avatar
Odpovídá na David Švec
Erik Šťastný:24.1.2018 18:48

No a jsme doma, program ti dělá přesně to co máš v kódu a chová se správně.

Všechno to spočítá, vyprintuje a pak se zavře, proto vidíš jen brobliknutí okna :)

Editováno 24.1.2018 18:48
 
Nahoru Odpovědět
24.1.2018 18:48
Avatar
David Švec
Člen
Avatar
David Švec:24.1.2018 18:55

aha, a jak mám udělat to aby to dělalo jako v IDE?

 
Nahoru Odpovědět
24.1.2018 18:55
Avatar
Martin Petrovaj
Tvůrce
Avatar
Martin Petrovaj:24.1.2018 18:58

Stačí už len na koniec pred return dopísať

printf("Stlac Enter pre ukoncenie\n");
getchar();

Program tak bude musieť čakať na stlačenie niektorej klávesy predtým, než dôjde k returnu a zavrie sa.

Nezabudni Elisse označiť niektorú odpoveď za riešenie, keď to v niektorom svojom vlákne po vyriešení problému spravíš, veľmi tým daného človeka potešíš :-)

Editováno 24.1.2018 18:59
Nahoru Odpovědět
24.1.2018 18:58
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
Odpovídá na David Švec
Erik Šťastný:24.1.2018 18:59

v IDE se ti to určitě ukončí taky, jen tam ti asi zůstane ten output ukázaný :)

hoď si na konec něco z těchto možností.

Editováno 24.1.2018 19:01
 
Nahoru Odpovědět
24.1.2018 18:59
Avatar
David Švec
Člen
Avatar
David Švec:24.1.2018 19:04

Děkuji vám oběma, vůbec mě nenapadlo něco takového,, :) Díky fakt moc :)

PS: Některou z Elissových odpovědí určitě označím, ale i ty Martine jsi mi pomohl. :)

Editováno 24.1.2018 19:06
 
Nahoru Odpovědět
24.1.2018 19:04
Avatar
DarkCoder
Člen
Avatar
Odpovídá na David Švec
DarkCoder:24.1.2018 19:09

Jsi si jist že používáš správný typ součinu? (operátor &)

Nahoru Odpovědět
24.1.2018 19:09
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na David Švec
Matúš Olejník:24.1.2018 19:09

Pred return daj napr. dva krát getchar() takže program bude čakať na stlačenie nejakej klávesy pred tým než sa ukončí

Nahoru Odpovědět
24.1.2018 19:09
/* I am not sure why this works but it fixes the problem */
Avatar
Matúš Olejník:24.1.2018 19:10

Sorry za spam som cez mobil a nemal som obnovenú stránku :-)

Nahoru Odpovědět
24.1.2018 19:10
/* I am not sure why this works but it fixes the problem */
Avatar
David Švec
Člen
Avatar
Odpovídá na DarkCoder
David Švec:24.1.2018 19:24

No, až nyní jsem si všiml, že je správně '&&' místo '&', a navíc mě to fungovalo, tak jsem to nepotřeboval měnit.. :) Každopádně pro správnost to radši opravím :), děkuji za upozornění :)

 
Nahoru Odpovědět
24.1.2018 19:24
Avatar
DarkCoder
Člen
Avatar
Odpovídá na David Švec
DarkCoder:24.1.2018 19:51

Ne radši, to musíš opravit. Logický součin a bitový součin je úplně něco jiného. Výsledkem logického součinu AND je buď 0 nebo 1. Kdežto výsledkem bitového součinu je hodnota, která vzniká provedením logické operace AND nad všemi bity každého operandu.

Např.

Mějme dvě celočíselné hodnoty 77 a 198. Binární podoba obou čísel je následující:

77 01001101
198 11000110
68 01000100

Provedením logického součinu AND nad všemi bity (bitový součin) dostáváme hodnotu 68.

Logický součin čísel 77 a 198 a tedy spojením dvou pravdivých výrazů (výraz je pravdivý je-li nenulový) dostáváme hodnotu 1.

Výpis výsledku bitového a logického součinu, viz. kód:

printf("%d %d\n", 77 && 198, 77 & 198);
Editováno 24.1.2018 19:52
Nahoru Odpovědět
24.1.2018 19:51
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
David Švec
Člen
Avatar
Odpovídá na DarkCoder
David Švec:24.1.2018 22:26

Děkuji za objasnění této problematiky. :) Už je mi to jasné.

 
Nahoru Odpovědět
24.1.2018 22:26
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 18 zpráv z 18.