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

Chyba v kodu – C / C++ – Fórum – Programujte.comChyba v kodu – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
marpit0
Stálý člen
1. 12. 2009   #1
-
0
-

//vypocti druhou odmocninu z a pomoci iterace

//x0 = a
//xn = 1/2(xn-1 + (a/xn-1)) n = 0 1 2 3 ...
//xn - xn-1 < 1e-6

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

int main(void)
{
system("title Program pro výpočet odmocniny");
system("color 1a");

float a;
float xn = 0, xm;

printf("Zadejte cislo, ktere chcete odmocnit:\t");
scanf("%f", &a);
getchar();

do
{
xm = xn - 1;
xn = (xm + (a / xm)) * 0.5;
xn++;

}while(xn - xm < 1e-6);

printf ("%f\n", xn);

system("pause");
return 0;
}


Úkolem programu je vypočítat ze zadaného čísla a odmocninu pomocí iterace. Někde tam je chyba, ale netuším kde. Děkuji moc za pomoc.

Nahlásit jako SPAM
IP: 78.102.212.–
MarPit
Reklama
Reklama
liborb
~ Redaktor
+18
Guru
1. 12. 2009   #2
-
0
-
Nahlásit jako SPAM
IP: 85.207.166.–
d.mostek0
Návštěvník
1. 12. 2009   #3
-
0
-

.

Nahlásit jako SPAM
IP: 85.13.98.–
www.dominik-mostek.cz
marpit0
Stálý člen
1. 12. 2009   #4
-
0
-

liborb napsal:
Je tam chybička a nejenom jedna.

xn bude označení pro současný výpočet
xm pro uložený předchozí výpočet

Pokud je n = 0, pak xn se má rovnat a (neboli xn = a; před vstupem do smyčky
- před do), a pak ten výpočet (ve smyčce):



// ulozeni predchoziho vysledku
xm = xn;
// vypocteni dalsi iterace
xn = (xm + (a / xm)) * 0.5;



Takto už by to mohlo fungovat.


http://www.root.cz/clanky/aritmeticke-operace-s-hodnotami-ve-formatu-plovouci-radove-carky/#k06


Udělal jsem to podle tve rady, ale po zadani cisla ten program nic neudělá, ještě se podívám na ten odkaz, co jsi tu vložil.

Nahlásit jako SPAM
IP: 78.102.212.–
MarPit
liborb
~ Redaktor
+18
Guru
1. 12. 2009   #5
-
0
-

Představoval jsem si to nějak takto:




xn = a;

do {
// ulozeni predchoziho vysledku
xm = xn;

// vypocteni dalsi iterace
xn = (xm + (a / xm)) * 0.5;

} while(xn - xm < 1e-6);



Ale teď když koukám na tu podmínku, tak ta bude nejpíše obráceně (předchozí krok - xm - je větší) neboli (xm - xn < 1e-6).

Nahlásit jako SPAM
IP: 85.207.166.–
marpit0
Stálý člen
1. 12. 2009   #6
-
0
-

liborb napsal:
Představoval jsem si to nějak takto:




xn = a;

do {
// ulozeni predchoziho vysledku
xm = xn;

// vypocteni dalsi iterace
xn = (xm + (a / xm)) * 0.5;

} while(xn - xm < 1e-6);



Ale teď když koukám na tu podmínku, tak ta bude nejpíše obráceně
(předchozí krok - xm - je větší) neboli (xm - xn < 1e-6).



Tak to vyjíždí stejný výsledek, jak předtím, že odmocnina například ze 4 je 2.5

Nahlásit jako SPAM
IP: 78.102.212.–
MarPit
liborb
~ Redaktor
+18
Guru
1. 12. 2009   #7
-
0
-

Tak to vyjíždí stejný výsledek, jak předtím, že odmocnina například ze 4 je 2.5



To je jeden průchod (4 + 4/4) * 0,5 neboli 5 * 0,5 = 2,5.

Ta podmínka na konci je obráceně ... jak jsem psal :smile1: .

Nahlásit jako SPAM
IP: 85.207.166.–
marpit0
Stálý člen
1. 12. 2009   #8
-
0
-

To liborb : Já ji dám obráceně, tak nevyjede nic.

Omlouvám se, debil jsem tu já, už tu funguje :) Já jsem tam prohodil xn a xm.

Nahlásit jako SPAM
IP: 78.102.212.–
MarPit
Spectator0
Věrný člen
1. 12. 2009   #9
-
0
-

To marpit : Doporučuji používát názvy proměnných takové, které jasně říkají to co skrývají

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

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ý