Jazyk C (príklady) - Cykly: Rozdiel medzi revíziami
Riadok 2: | Riadok 2: | ||
[[Kategória:Informatika]] | [[Kategória:Informatika]] | ||
{{Priklady_ZI}} | {{Priklady_ZI}} | ||
+ | __TOC__ | ||
==Obsah== | ==Obsah== | ||
Riadok 52: | Riadok 53: | ||
prikaz1; | prikaz1; | ||
prikaz2; | prikaz2; | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | ==Príklady== | ||
+ | ===Faktúra=== | ||
+ | '''Zadanie:''' | ||
+ | Na faktúre je údaj o počte položiek a samotné položky (položka obsahuje o.i. aj cenu v Sk). Ak viete koľko je na faktúre položiek, navrhnite algoritmus, ktorý zráta celkovú sumu položiek faktúry. Prvý údaj, ktorý načítate bude číselný údaj pocet, ktoré nám hovorí o počte položiek. Následne sa načíta pocet položiek ( – celých čísel symbolizujúcich cenu položky). | ||
+ | |||
+ | '''Analýza problému:''' | ||
+ | Keďže dopredu nikdy nevieme, koľko položiek je na faktúre, musíme použiť cyklus. Po načítaní hodnoty počet, vieme koľko položiek budeme načítavať – teda vieme, koľkokrát sa bude cyklus opakovať. V každom opakovaní cyklu načítame jednu hodnotu a zároveň ju pripočítame do celkovej sumy všetkých položiek. V príklade bude ukázané použitie troch základných typov cyklov. | ||
+ | |||
+ | <source lang="c" line> | ||
+ | #include<stdio.h> | ||
+ | void main() | ||
+ | { | ||
+ | |||
+ | int suma=0,polozka,pocet; | ||
+ | printf(“Zadaj pocet nacitavanych poloziek”); | ||
+ | scanf(“%d”,&pocet); | ||
+ | |||
+ | |||
+ | /* cyklus pre nacitanie vsetkych poloziek */ | ||
+ | |||
+ | |||
+ | printf(“Suma vsetkych poloziek=%d “,suma); | ||
+ | |||
+ | } | ||
+ | |||
+ | // nasledujuce casti kodov treba doplnit (po jednom) do programu | ||
+ | |||
+ | // cyklus while | ||
+ | |||
+ | while(pocet!=0) // cyklus sa opakuje pokial je hodnota pocet rozna od nuly | ||
+ | { | ||
+ | scanf(“%d“,&polozka); | ||
+ | suma+=polozka; | ||
+ | pocet--; // v kazdom cykle znizime pocet o 1 | ||
+ | } | ||
+ | |||
+ | //cyklus do-while | ||
+ | do | ||
+ | { | ||
+ | |||
+ | scanf(“%d“,&polozka); | ||
+ | suma+=polozka; | ||
+ | pocet–-; // v kazdom cykle znizime pocet o 1 | ||
+ | |||
+ | } while(pocet!=0)// cyklus sa opakuje pokial je hodnota pocet rozna od nuly | ||
+ | |||
+ | //cyklus for | ||
+ | for(int i=0 ; i<pocet ; i++) // i je pomocna premenna, na zaciatku ma hodnotu 0, kazdy cyklus zvysi | ||
+ | { // svoju hodnotu o 1, a cyklus opakujeme pokial je i mensie ako pocet | ||
+ | |||
+ | scanf(“%d“,&polozka); | ||
+ | suma+=polozka; | ||
+ | |||
+ | } | ||
+ | |||
+ | //cyklus for (2) | ||
+ | for( ; pocet>0 ; pocet –-) // pozri komentar k cyklu while | ||
+ | { | ||
+ | |||
+ | scanf(“%d“,&polozka); | ||
+ | suma+=polozka; | ||
+ | |||
+ | } | ||
+ | </source> | ||
+ | |||
+ | |||
+ | ===Násobenie=== | ||
+ | '''Zadanie:''' | ||
+ | Úlohou je vynásobiť 2 celé čísla x a y, ale bez použitia operátora *. Dovolené je použiť len operátor sčítania +. | ||
+ | |||
+ | '''Analýza problému:''' | ||
+ | Úloha nájdenia súčinu x*y len pomocou operátora sčítavania sa dá jednoducho naprogramovať, pretože súčin x*y=x+x+...+x, kde x sčítavame y krát. Teda stačí nám vytvoriť cyklus, ktorý sa bude opakovať y krát a v každom cykle sa hodnota x pripočíta do čiastočného výsledku. | ||
+ | |||
+ | <source lang="c" line> | ||
+ | #include<stdio.h> | ||
+ | void main() | ||
+ | { | ||
+ | |||
+ | int vysledok=0,x,y,pom_y; | ||
+ | printf("Zadaj dve cisla"); | ||
+ | scanf("%d %d",&x,&y); | ||
+ | pom_y=y; | ||
+ | while(y>0) | ||
+ | { vysledok+=x; | ||
+ | y–-; | ||
+ | } | ||
+ | printf("%d * %d = %d ",x,pom_y,vysledok); | ||
+ | } | ||
+ | |||
+ | // pouzitie prikazu for | ||
+ | for( ; y>0 ; y–-) | ||
+ | vysledok+=x; | ||
+ | </source> | ||
+ | |||
+ | ===Umocňovanie=== | ||
+ | '''Zadanie:''' | ||
+ | Navrhnite program, ktorý vypočíta mocninovú funkciu ab, pre a≥0, b≥0. Vstup do programu budú dve kladné nezáporné čísla a a b. Výstup bude hodnota ab. Príklad urobte pomocou príkazu while a for. | ||
+ | |||
+ | '''Analýza problému:''' | ||
+ | Tento príklad je veľmi podobný s predchádzajúcim, pretože ab=a*a*…*a, kde a budeme násobiť b krát. | ||
+ | |||
+ | <source lang="c" line> | ||
+ | #include<stdio.h> | ||
+ | void main() | ||
+ | { | ||
+ | |||
+ | int vysledok=1,a,b,tmp_b; | ||
+ | printf("Zadaj dve cisla"); | ||
+ | scanf("%d %d”,&a,&b); | ||
+ | tmp_b=b; | ||
+ | while(b>0) | ||
+ | { vysledok*=a; | ||
+ | b–-; | ||
+ | } | ||
+ | printf("%d * %d = %d ",a,tmp_b,vysledok); | ||
+ | |||
+ | } | ||
+ | |||
+ | // pouzitie prikazu for | ||
+ | for(int i=0 ; i<b ; i++) | ||
+ | vysledok*=a; | ||
+ | </source> | ||
+ | |||
+ | ===Najväčší spoločný deliteľ=== | ||
+ | '''Zadanie:''' | ||
+ | Pri mnohých matematických operáciách je potrebné poznať najväčší spoločný deliteľ (NSD) dvoch čísel. Navrhnite algoritmus pre nájdenie NSD pomocou Euklidovho algoritmu. (Euklidov algoritmus pracuje na princípe opakovaného vzájomného odčítavania vstupných hodnôt a to vždy menší od väčšieho pokiaľ nie sú obe hodnoty rovnaké. Toto číslo je potom NSD.) | ||
+ | |||
+ | '''Analýza problému:''' | ||
+ | Na lepšiu predstavivosť funkcionality tohto algoritmu nám poslúži nasledujúci vývojový diagram. Prvý krok v algoritme (okrem načítania vstupných hodnôt) je urobiť cyklus, ktorý sa bude opakovať, pokiaľ je a a b rôzne. V tele cyklu bude podmienka, kde budeme zisťovať, ktoré z dvoch (a,b) čísel je väčšie. Potom od väčšieho odčítame menšie. | ||
+ | |||
+ | |||
+ | <source lang="c" line> | ||
+ | #include<stdio.h> | ||
+ | void main() | ||
+ | { | ||
+ | |||
+ | int a,b; | ||
+ | int pa=a, pb=b; // pomocne premenne, nie su nutne | ||
+ | printf("Zadaj dve cisla"); | ||
+ | scanf("%d %d",&a,&b); | ||
+ | while(a!=b) | ||
+ | { if(a>b) | ||
+ | a=a-b; | ||
+ | else | ||
+ | b=b-a; | ||
+ | } | ||
+ | printf("nsd(%d, %d) = %d ",pa,pb,a); | ||
+ | |||
+ | } | ||
+ | </source> | ||
+ | |||
+ | ===Test na prvočíslo=== | ||
+ | '''Zadanie:''' | ||
+ | Navrhnite program, ktorý zistí či zadané číslo a je prvočíslo. | ||
+ | |||
+ | '''Analýza problému:''' | ||
+ | Číslo a budeme postupne celočíselne deliť číslami del=2, 3, ...n. Ak pri všetkých deleniach bude nejaký zvyšok, povieme že číslo a je prvočíslo. Hodnotu čísla n určíme nasledovne: Pri každom delení si zapamätáme podiel. Ďalšie delenie robíme iba ak podiel>del. Túto podmienku si dokážeme ľahko odvodiť. Majme napr. a=37. podiel=(37/2)=18. Teda pri zvyšovaní premennej del už nemusíme ísť za hranicu 18, lebo číslo 37 určite nie je deliteľné bezo zvyšku číslom väčším ako 18. Ďalej delíme podiel=(37/3)=10. Tento krok algoritmu nám teda povedal že horná hranica zvyšovania premennej del je 10, lebo neexistuje číslo väčšie ako 10, ktoré by delilo číslo 37 bezo zvyšku. Postupne sa dopracujeme k hranici 6. | ||
+ | |||
+ | Na začiatku programu predpokladáme, že číslo a je prvočíslo (prvocislo=1) , čo sa snažíme v programe vyvrátiť (prvocislo=0). Výstup z algoritmu nám bude hovoriť, či a je prvočíslo. Ak áno, výstup bude 1, ak nie potom bude výstup 0. (Možná úprava: číslo n sa dá vypočítať jednoducho. n=celá časť z a1/2 ). Algoritmus naznačuje nasledujúci vývojový diagram. | ||
+ | |||
+ | '''Ukážka: a=23''' | ||
+ | a del podiel | ||
+ | 23 / 2 = 11 zv 1 | ||
+ | 23 / 3 = 7 zv 2 | ||
+ | 23 / 4 = 5 zv 3 | ||
+ | 23 / 5 = 4 zv 3 del > podiel, koniec, a je prvočíslo | ||
+ | 23 je prvočíslo. | ||
+ | |||
+ | <source lang="c" line> | ||
+ | #include<stdio.h> | ||
+ | void main() | ||
+ | { | ||
+ | |||
+ | int a; | ||
+ | printf(“Zadaj cislo, ktore chces testovat na prvocislo\n”); | ||
+ | |||
+ | scanf("%d",&a); | ||
+ | int del=2,prvocislo=1,podiel,zv; | ||
+ | do | ||
+ | { | ||
+ | |||
+ | podiel=a/del; | ||
+ | zv=a%del; | ||
+ | del++; | ||
+ | if(zv==0) | ||
+ | { | ||
+ | del=podiel+1; | ||
+ | prvocislo=0; | ||
+ | } | ||
+ | |||
+ | }while(podiel>del); | ||
+ | if(prvocislo==1) | ||
+ | printf("%d je prvocislo“,a); | ||
+ | else | ||
+ | printf("%d nie je prvocislo“,a); | ||
+ | |||
+ | } | ||
+ | </source> | ||
+ | |||
+ | ===Výpočet čísla pí=== | ||
+ | '''Zadanie:''' | ||
+ | Existuje nekonečný rad, ktorého súčtom je číslo PÍ. (vzťah PI.1). Ak budeme i zväčšovať až do nekonečna, dostaneme presnú hodnotu čísla PÍ. | ||
+ | |||
+ | Vypočítajte číslo PI čo najpresnejšie. Presnosť výpočtu závisí od toho, pokiaľ budeme zväčšovať číslo i. Nájdite také n (i=0…n) , pri ktorom je výsledok presný na 15 desatinných miest. | ||
+ | |||
+ | '''Analýza problému:''' | ||
+ | Rozpísaním vzťahu PI.1 dostaneme vzťah PI.2. Úlohou je zvoliť vhodné n. Program urobíme tak, že na začiatku sa načíta číslo n a program vypočíta číslo PÍ s daným n. Číslo n musí byť dostatočne veľké, aby hodnota PÍ bola dostatočne presná. | ||
+ | |||
+ | V samotnom výpočte sčítavame zlomky, ktorých menovatele sú iba nepárne čísla. To, aby boli čísla nepárne zabezpečíme tak, že menovateľ bude: 2*i+1. Ak dosadíme ľubovoľné i, dostaneme nepárne číslo. Druh[ vec, ktorú musíme vyriešiť je striedanie znamienok v súčte. Vytvoríme si premennú znamienko, ktorá bude mať hodnotu 1 alebo -1. V každom cykle budeme túto hodnotu meniť. | ||
+ | |||
+ | <source lang="c" line> | ||
+ | #include<stdio.h> | ||
+ | void main() | ||
+ | { | ||
+ | double pi=0; | ||
+ | int znamienko=1; | ||
+ | long int n; | ||
+ | scanf("%ld",&n); | ||
+ | for(int i=0;i<n ;i++) | ||
+ | { | ||
+ | pi+=znamienko*4.0/(2*i+1); | ||
+ | znamienko=-znamienko; | ||
+ | } | ||
+ | printf("PI=%.15f\n",pi); | ||
} | } | ||
</source> | </source> |
Verzia zo dňa a času 16:48, 2. máj 2020
Riešené príklady
zdroj: Juraj Ďuďák, Zbierka úloh z algoritmizácie pre predmet Základy informatiky
ISBN: 978-80-8075-199-9
Obsah
Obsah
V tejto kapitole budú ukázané príklady s použitím cyklov. Na pochopenie týchto príkladov je nutné vedieť syntax a sémantiku príkazov while, do-while a for.
Cyklus while
Cyklus while je cyklus s podmienkou na začiatku. Pri každom opakovaní cyklu sa najskôr vyhodnotí podmienka a v prípade, že je pravdivá cyklus sa vykonáva (resp. vykonáva sa príkaz v cykle)
while(podmienka)
prikaz;
Ak potrebujeme v rámci cyklu vykonať viacero príkazov, treba ich uzatvoriť do bloku. (Toto platí aj pre do-while)
while(podmienka)
{
prikaz1;
prikaz2;
}
Cyklus do while
Cyklus do-while je cyklus s podmienkou na konci. Najskôr sa vykoná telo cyklu (teda prikaz) a na konci syklu sa vyhodnotí pravdivosť podmienky. V prípade ak je podmienka pravdivá, cyklus sa opäť vykoná
do
prikaz;
while(podmienka);
Cyklus for
Cyklus for sa používa najmä v prípadoch, ak dopredu poznáme počet opakovaní cyklu.
for(inicializacia ; podmienka ; vyraz )
prikaz;
Pred samotným spustením cyklu sa vykoná inicializácia. Toto sa vykoná len raz. Cyklus sa bude opakovať, pokiaľ je podmienka pravdivá. Ak je teda podmienka pravdivá, vykoná sa príkaz. Na konci cyklu sa vždy ešte vykoná vyraz. Všetky tri časti (inicializacia, podmienka, vyraz ) sú nepovinné, teda nemusia sa uvádzať.
Ak potrebujeme v rámci cyklu vykonať viacero príkazov, treba ich uzatvoriť do bloku.
for(inicializacia ; podmienka ; vyraz )
{
prikaz1;
prikaz2;
}
Príklady
Faktúra
Zadanie: Na faktúre je údaj o počte položiek a samotné položky (položka obsahuje o.i. aj cenu v Sk). Ak viete koľko je na faktúre položiek, navrhnite algoritmus, ktorý zráta celkovú sumu položiek faktúry. Prvý údaj, ktorý načítate bude číselný údaj pocet, ktoré nám hovorí o počte položiek. Následne sa načíta pocet položiek ( – celých čísel symbolizujúcich cenu položky).
Analýza problému: Keďže dopredu nikdy nevieme, koľko položiek je na faktúre, musíme použiť cyklus. Po načítaní hodnoty počet, vieme koľko položiek budeme načítavať – teda vieme, koľkokrát sa bude cyklus opakovať. V každom opakovaní cyklu načítame jednu hodnotu a zároveň ju pripočítame do celkovej sumy všetkých položiek. V príklade bude ukázané použitie troch základných typov cyklov.
1 #include<stdio.h>
2 void main()
3 {
4
5 int suma=0,polozka,pocet;
6 printf(“Zadaj pocet nacitavanych poloziek”);
7 scanf(“%d”,&pocet);
8
9
10 /* cyklus pre nacitanie vsetkych poloziek */
11
12
13 printf(“Suma vsetkych poloziek=%d “,suma);
14
15 }
16
17 // nasledujuce casti kodov treba doplnit (po jednom) do programu
18
19 // cyklus while
20
21 while(pocet!=0) // cyklus sa opakuje pokial je hodnota pocet rozna od nuly
22 {
23 scanf(“%d“,&polozka);
24 suma+=polozka;
25 pocet--; // v kazdom cykle znizime pocet o 1
26 }
27
28 //cyklus do-while
29 do
30 {
31
32 scanf(“%d“,&polozka);
33 suma+=polozka;
34 pocet–-; // v kazdom cykle znizime pocet o 1
35
36 } while(pocet!=0)// cyklus sa opakuje pokial je hodnota pocet rozna od nuly
37
38 //cyklus for
39 for(int i=0 ; i<pocet ; i++) // i je pomocna premenna, na zaciatku ma hodnotu 0, kazdy cyklus zvysi
40 { // svoju hodnotu o 1, a cyklus opakujeme pokial je i mensie ako pocet
41
42 scanf(“%d“,&polozka);
43 suma+=polozka;
44
45 }
46
47 //cyklus for (2)
48 for( ; pocet>0 ; pocet –-) // pozri komentar k cyklu while
49 {
50
51 scanf(“%d“,&polozka);
52 suma+=polozka;
53
54 }
Násobenie
Zadanie: Úlohou je vynásobiť 2 celé čísla x a y, ale bez použitia operátora *. Dovolené je použiť len operátor sčítania +.
Analýza problému: Úloha nájdenia súčinu x*y len pomocou operátora sčítavania sa dá jednoducho naprogramovať, pretože súčin x*y=x+x+...+x, kde x sčítavame y krát. Teda stačí nám vytvoriť cyklus, ktorý sa bude opakovať y krát a v každom cykle sa hodnota x pripočíta do čiastočného výsledku.
1 #include<stdio.h>
2 void main()
3 {
4
5 int vysledok=0,x,y,pom_y;
6 printf("Zadaj dve cisla");
7 scanf("%d %d",&x,&y);
8 pom_y=y;
9 while(y>0)
10 { vysledok+=x;
11 y–-;
12 }
13 printf("%d * %d = %d ",x,pom_y,vysledok);
14 }
15
16 // pouzitie prikazu for
17 for( ; y>0 ; y–-)
18 vysledok+=x;
Umocňovanie
Zadanie: Navrhnite program, ktorý vypočíta mocninovú funkciu ab, pre a≥0, b≥0. Vstup do programu budú dve kladné nezáporné čísla a a b. Výstup bude hodnota ab. Príklad urobte pomocou príkazu while a for.
Analýza problému: Tento príklad je veľmi podobný s predchádzajúcim, pretože ab=a*a*…*a, kde a budeme násobiť b krát.
1 #include<stdio.h>
2 void main()
3 {
4
5 int vysledok=1,a,b,tmp_b;
6 printf("Zadaj dve cisla");
7 scanf("%d %d”,&a,&b);
8 tmp_b=b;
9 while(b>0)
10 { vysledok*=a;
11 b–-;
12 }
13 printf("%d * %d = %d ",a,tmp_b,vysledok);
14
15 }
16
17 // pouzitie prikazu for
18 for(int i=0 ; i<b ; i++)
19 vysledok*=a;
Najväčší spoločný deliteľ
Zadanie: Pri mnohých matematických operáciách je potrebné poznať najväčší spoločný deliteľ (NSD) dvoch čísel. Navrhnite algoritmus pre nájdenie NSD pomocou Euklidovho algoritmu. (Euklidov algoritmus pracuje na princípe opakovaného vzájomného odčítavania vstupných hodnôt a to vždy menší od väčšieho pokiaľ nie sú obe hodnoty rovnaké. Toto číslo je potom NSD.)
Analýza problému: Na lepšiu predstavivosť funkcionality tohto algoritmu nám poslúži nasledujúci vývojový diagram. Prvý krok v algoritme (okrem načítania vstupných hodnôt) je urobiť cyklus, ktorý sa bude opakovať, pokiaľ je a a b rôzne. V tele cyklu bude podmienka, kde budeme zisťovať, ktoré z dvoch (a,b) čísel je väčšie. Potom od väčšieho odčítame menšie.
1 #include<stdio.h>
2 void main()
3 {
4
5 int a,b;
6 int pa=a, pb=b; // pomocne premenne, nie su nutne
7 printf("Zadaj dve cisla");
8 scanf("%d %d",&a,&b);
9 while(a!=b)
10 { if(a>b)
11 a=a-b;
12 else
13 b=b-a;
14 }
15 printf("nsd(%d, %d) = %d ",pa,pb,a);
16
17 }
Test na prvočíslo
Zadanie: Navrhnite program, ktorý zistí či zadané číslo a je prvočíslo.
Analýza problému: Číslo a budeme postupne celočíselne deliť číslami del=2, 3, ...n. Ak pri všetkých deleniach bude nejaký zvyšok, povieme že číslo a je prvočíslo. Hodnotu čísla n určíme nasledovne: Pri každom delení si zapamätáme podiel. Ďalšie delenie robíme iba ak podiel>del. Túto podmienku si dokážeme ľahko odvodiť. Majme napr. a=37. podiel=(37/2)=18. Teda pri zvyšovaní premennej del už nemusíme ísť za hranicu 18, lebo číslo 37 určite nie je deliteľné bezo zvyšku číslom väčším ako 18. Ďalej delíme podiel=(37/3)=10. Tento krok algoritmu nám teda povedal že horná hranica zvyšovania premennej del je 10, lebo neexistuje číslo väčšie ako 10, ktoré by delilo číslo 37 bezo zvyšku. Postupne sa dopracujeme k hranici 6.
Na začiatku programu predpokladáme, že číslo a je prvočíslo (prvocislo=1) , čo sa snažíme v programe vyvrátiť (prvocislo=0). Výstup z algoritmu nám bude hovoriť, či a je prvočíslo. Ak áno, výstup bude 1, ak nie potom bude výstup 0. (Možná úprava: číslo n sa dá vypočítať jednoducho. n=celá časť z a1/2 ). Algoritmus naznačuje nasledujúci vývojový diagram.
Ukážka: a=23 a del podiel 23 / 2 = 11 zv 1 23 / 3 = 7 zv 2 23 / 4 = 5 zv 3 23 / 5 = 4 zv 3 del > podiel, koniec, a je prvočíslo 23 je prvočíslo.
1 #include<stdio.h>
2 void main()
3 {
4
5 int a;
6 printf(“Zadaj cislo, ktore chces testovat na prvocislo\n”);
7
8 scanf("%d",&a);
9 int del=2,prvocislo=1,podiel,zv;
10 do
11 {
12
13 podiel=a/del;
14 zv=a%del;
15 del++;
16 if(zv==0)
17 {
18 del=podiel+1;
19 prvocislo=0;
20 }
21
22 }while(podiel>del);
23 if(prvocislo==1)
24 printf("%d je prvocislo“,a);
25 else
26 printf("%d nie je prvocislo“,a);
27
28 }
Výpočet čísla pí
Zadanie: Existuje nekonečný rad, ktorého súčtom je číslo PÍ. (vzťah PI.1). Ak budeme i zväčšovať až do nekonečna, dostaneme presnú hodnotu čísla PÍ.
Vypočítajte číslo PI čo najpresnejšie. Presnosť výpočtu závisí od toho, pokiaľ budeme zväčšovať číslo i. Nájdite také n (i=0…n) , pri ktorom je výsledok presný na 15 desatinných miest.
Analýza problému: Rozpísaním vzťahu PI.1 dostaneme vzťah PI.2. Úlohou je zvoliť vhodné n. Program urobíme tak, že na začiatku sa načíta číslo n a program vypočíta číslo PÍ s daným n. Číslo n musí byť dostatočne veľké, aby hodnota PÍ bola dostatočne presná.
V samotnom výpočte sčítavame zlomky, ktorých menovatele sú iba nepárne čísla. To, aby boli čísla nepárne zabezpečíme tak, že menovateľ bude: 2*i+1. Ak dosadíme ľubovoľné i, dostaneme nepárne číslo. Druh[ vec, ktorú musíme vyriešiť je striedanie znamienok v súčte. Vytvoríme si premennú znamienko, ktorá bude mať hodnotu 1 alebo -1. V každom cykle budeme túto hodnotu meniť.
1 #include<stdio.h>
2 void main()
3 {
4 double pi=0;
5 int znamienko=1;
6 long int n;
7 scanf("%ld",&n);
8 for(int i=0;i<n ;i++)
9 {
10 pi+=znamienko*4.0/(2*i+1);
11 znamienko=-znamienko;
12 }
13 printf("PI=%.15f\n",pi);
14 }