Základy algoritmizace a programování

Petr Sváček, Luděk Beneš, Olga Majlingová
Ústav technické matematiky

Přednáška č. 2

Příkaz if , else (opakování). Cykly while a for. Základní logické operátory.

Faktoriál. Posloupnost čísel načítané z klávesnice ukončená daným číslem a posloupnost čísel zadaná počtem (Obě varianty!). V zadané posloupnosti vybrat největší, nejnižší, sečíst kladné členy, sečíst záporné, spočítat průměr a odchylku. (Zmínit použití i++ resp. i-- v cyklu for). Test prvočíselnosti.

Vysvětlené progamy: Faktoriál. Test prvociselnosti. Nacteni posloupnosti dane poctem. Nacteni posloupnosti ukoncene cislem. Nalezeni maxima v posloupnosti. Secist kladne cleny. Aritmeticky prumer.

Doporučené programy:


Stručně algoritmy z přednášek (zapsané v jazyce C)

  1. Test prvociselnosti.
    Neni kontrolovano, zda zadane cislo je prirozene, >1.
    
    # include <stdio.h>
    # include <math.h>
    
    main()
    {
      int n,i;
      printf("Zadej prirozene cislo \n");
      scanf("%d",&n);
      for(i=2;i<=sqrt(n);i++)
      {
        if(n%i==0) /* modulo - zbytek po deleni cisla n cislem i */
        {
          printf("Cislo %d neni prvocislo. Delitel %d.",n,i);
          return -1;
        }
      }
      printf("Cislo %d je prvocislo.\n",n);
    }
    

  2. Vypocet faktorialu
    Neni kontrolovano, zda zadane cislo je prirozene. Neni reseno 0!. Vhodne jen pro mala cisla.
    # include <stdio.h>
    
    main()
    {
      int n,i,fakt;
    
      printf("Zadej prirozene cislo \n");
      scanf("%d",&n);
    
      fakt=1;    /* nastaveni pocatecni hodnoty promenne fakt*/
      for(i=2;i<=n;i++)
      {
        fakt=i*fakt;
      }
      
      printf("Faktorial cisla %d=%d\n",n,fakt);
    }
    

  3. Nacteni posloupnosti cisel.
    Casti programu, ve kterych se nacita rada celych cisel

    Poslounost se znamym poctem clenu
      printf("Zadej pocet cisel \n");
      scanf("%d",&n);
    
      printf("Zadejte posloupnost cisel \n");
      for(i=0;i<n;i++)
      {
        scanf("%d",&a);
      }
    
    Posloupnost ukoncena danym cislem (v tomto pripade 999)
      printf("Zadejte posloupnost cisel (ukonceni zadanim cisla 999)\n");
      scanf("%d",&a);
      while (a!=999) /* cyklus probiha, pokud jsou cisla ruzna od 999*/
      {
        scanf("%d",&a);
      }
    
    
    Zapis pomoci do/while.
      printf("Zadejte posloupnost cisel (ukonceni zadanim cisla 999)\n");
      do
      {
      scanf("%d",&a);
      } while (a!=999); /* cyklus probiha, pokud jsou cisla ruzna od 999*/
    
    

  4. Nalezeni maxima v posloupnosti zadane poctem (cela cisla).
    #include <stdio.h>
    
    main()
    {
      int n,i,a,max;
    
      printf("Zadej pocet cisel \n");
      scanf("%d",&n);
      
      printf("Zadejte posloupnost cisel \n");
      scanf("%d",&a); /* pocatecni hodnota maxima*/
      max=a;
      for(i=1;i<n;i++)
      {
        scanf("%d",&a);
        if(a>max) /* je prectene cislo vetsi nez zatim nejvetsi?*/
        {
          max=a;
        }
      }
      printf("Nejvetsi cislo je %d\n",max);
    }
    
    

  5. Soucet kladnych clenu, posloupnost ukoncena cislem (realna cisla)
    #include  <stdio.h>
    
    main()
    {
      float a,soucet;
      
      printf("Zadejte posloupnost cisel (ukonceni zadanim cisla 999)\n");
      soucet=0; /* vynulovani promenne soucet a nacteni prvniho prvku pole*/
      scanf("%f",&a);
    
      while (a!=999) /* cyklus probiha, pokud jsou cisla ruzna od 999*/
      {
        if(a>0)
        {
          soucet=soucet+a;
        }
        scanf("%f",&a);
      }
    
      printf("Soucet kladnych clenu je %f\n",soucet);
    }
    

  6. Aritmeticky prumer, posloupnost ukoncena cislem (realna cisla)
    Neni reseno, zda pocet cisel >0 a zda tedy mohu delit.
    #include  <stdio.h>
    
    main()
    {
      int prvku;
      float a,prum;
      
      printf("Zadejte posloupnost cisel (ukonceni zadanim cisla 999)\n");
    
      prvku=0; /* prvky musime secist a spocitat, nastaveni pocatecnich hodnot*/
      prum=0;
      scanf("%f",&a);
    
      while (a!=999) /* cyklus probiha, pokud jsou cisla ruzna od 999*/
      {
        prum=prum+a;
        prvku=prvku+1;
        scanf("%f",&a);
      }
    
      prum=prum/prvku;
    
      printf("Aritmeticky prumer je %f\n",prum);
    }
    
    

Úlohy pro 3. cvičení:
Fibonacciho posloupnost(t.j. F(0)=0,F(1)=1,F(N)=F(N-1)+F(N-2) ). Ciferný součet. Posloupnost čísel ukončená číslem nebo zadaná počtem (Obě varianty!).
Vybrat nejmenší prvek a zjistit jeho pořadí. Sečíst záporné. Spočítat geometrický průměr kladných. Nalézt nejmenší kladné. Doporučené: Spočítat odchylku.