4 - Cykly

1. Ciferný součet

Vizualizace: link

#include <stdio.h>
 
int main() 
{
    int x, y;
    int c = 0;
    int r;
 
    printf("Zadej cislo k provedeni ciferneho souctu: ");
    r = scanf("%i", &x);
 
    if (r == 0)
    {
        return 100;
    }
 
    y = x;
 
    while (x > 0)
    {
        c += x % 10;
        x /= 10;
    }
 
    printf("Ciferny soucet cisla %i je %i\n", y, c);
 
    return 0;
}

2. Collatzova posloupnost

Vizualizace: link

#include <stdio.h>
 
int main() 
{
    int x;
    int r;
 
    printf("Zadej pocatecni cislo Collatzovy posloupnosti: ");
    r = scanf("%i", &x);
 
    if (r == 0)
    {
        return 100;
    }
 
    while (x != 1)
    {
        printf("%i, ", x);
        x = (x % 2) ? 3*x + 1 : x / 2;
    }
 
    printf("1\n");
 
    return 0;
}

3. Výpočet odmocniny metodou binárního půlení

Vizualizace: link

#include <stdio.h>
#include <math.h>
 
#define PRECISION 0.05
 
int main() 
{
    float upper, lower, middle;
    int x;
    int r;
 
    printf("Zadej číslo, jehož odmocninu hledáš: ");
    r = scanf("%i", &x);
 
    if (r == 0)
    {
        return 100;
    }
 
    upper = x;
    lower = 0;
    middle = (upper + lower) / 2;
 
    while (fabs(pow(middle, 2) - x) > PRECISION)
    {
        printf("%5.2f - %5.2f - %5.2f\n", lower, middle, upper);
        if (pow(middle, 2) > x)
            upper = middle;
        else
            lower = middle;
        middle = (upper + lower) / 2;
    }
 
    printf("Odmocnina cisla %i je %.2f\n", x, middle);
 
    return 0;
}

4. Součet mocnin

Vizualizace: link

#include <stdio.h>
 
int main() 
{
    int x;
    int r;
 
    printf("Zadej číslo, které chceš vyjádřit jako součet mocnin: ");
    r = scanf("%i", &x);
 
    if (r == 0)
    {
        return 100;
    }
 
    for (int i = 1; i < x; i++)
    {
        for (int j = 1; j < x; j++)
        {
            if (i*i + j*j == x)
            {
                printf("%i %i\n", i, j);
            }
        }
    }
 
    return 0;
}

5. Výpočet Ludolfova čísla metodou Monte Carlo

Vizualizace: link

#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string.h>
 
#define SEED 35791246
 
main(int argc, char* argv)
{
   int niter=0; /* počet iterací algoritmu */
   double x,y;
   int count=0; /* počet bodů v 1. kvadrantu jednotkové kružnice */
   double z;
   double pi;
 
   printf("Zadejte pocet iteraci pro vypocet PI: ");
   scanf("%d",&niter);
 
   /* initialize random numbers */
   srand(SEED);
 
   for (int i=0; i<niter; i++) 
   {
      x = (double)rand()/RAND_MAX;
      y = (double)rand()/RAND_MAX;
      z = x*x+y*y;
      if (z<=1) count++;
   }
   pi=(double)count/niter*4;
   printf("PI = %g / %i iteraci\n", pi, niter);
 
   return 0;
}

6. Armstrongovo číslo

#include <stdio.h>
#include <math.h>
 
int main() 
{
    int cislo, vstup, zbytek, n = 0;
    float vysledek = 0.0;
 
    printf("Napis cele cislo: ");
    scanf("%d", &vstup);
 
    // zjisteni poctu cifer cisla n
    for (cislo = vstup; cislo != 0; ++n) 
    {
        cislo /= 10;
    }
 
    for (cislo = vstup; cislo != 0; cislo /= 10) 
    {   
        zbytek = cislo % 10;
        // soucet n-tych mocnin jednotlivych cifer cisla
        vysledek += pow(zbytek, n);
    }
 
    // pokud je soucet n-tych mocnin cifer cisla roven cislu samotnemu, je to Armstrongovo cislo
    printf ("%d %s Armstrongovo cislo.\n", vstup,  ((int)vysledek == vstup) ? "je" : "neni");
 
    return 0;
}

7. Nalezení maxima z řady čísel na standardním vstupu

#include <stdio.h>
 
int main()
{
    // promenna pro nactenou hodnotu (provedenou konverzi)
    int a;
    // pocitadlo nactenych cisel
    int i = 0;
    // aktualni nalezene maximum z rady cisel
    // lze ho nastavit napr. na nejmensi mozne cislo v datovem typu
    int max;
 
    while (scanf("%i", &a) > 0)
    {
        // prvni nactene cislo je zcela jiste aktualne nejvetsim
        if (i++ == 0)
        {
            // nasledujici prirazeni se provede jednou
            // pak jiz podminka neni platna
            max = a;
        }
        // pokud je cislo a vetsi nez dosavadni nalezene maximum
        // stava se cislo a novym maximem
        if (a > max)
        {
            max = a;
        }
    }
    printf("maximum z rady: %i\n", max);
 
    return 0;
}

courses/b0b99prpa/solutions/lab04.txt · Last modified: 2025/10/21 08:48 by viteks