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.
Člen
Zobrazeno 18 zpráv z 18.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
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
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.. :/
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
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ě.
Pokud to v IDE funguje, vsadil bych na to chybějící DLL, nicméně ten Hello word je divný, pošli kód.
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);
}
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
aha, a jak mám udělat to aby to dělalo jako v IDE?
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šíš
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í.
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.
Jsi si jist že používáš správný typ součinu? (operátor &)
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čí
Sorry za spam som cez mobil a nemal som obnovenú stránku
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í
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);
Děkuji za objasnění této problematiky. Už je mi to jasné.
Zobrazeno 18 zpráv z 18.