Škôlka jazyka C

Fórum o programovaní v jazyku C založené 3. januára 2012

Aktuálny čas je 08 Máj 2024, 18:26

Všetky časy sú v GMT + 1 hodina




Fórum je zamknuté Táto téma je zamknutá, nemôžete posielať nové príspevky alebo odpovedať na staršie.  [ Príspevok: 1 ] 
Autor Správa
 Predmet príspevku: 8. lekcia
PoslaťNapísal: 13 Feb 2012, 20:20 
Offline
Stredoškolák
Stredoškolák
Obrázok užívateľa

Registrovaný: 06 Jan 2012, 19:26
Príspevky: 458
Bydlisko: pod Pátrovom
Udelené body: 228 bodov
Získané body: 21 bodov
1. Napíš program, ktorý načíta desatinné číslo a vypíše jeho tretiu mocninu.
(Napr.:Tretia mocnina cisla 6.666666 je 296.296212.)
Spoiler:
Kód:
/***************************************
 *
 * uloha_1.c        ver. 2.0
 * program  nacita desatinne cislo
 * a vypise jeho tretiu mocninu
 * ===============================
 *
 * libcosenior,     april 2012
 *
 ***************************************/

/* systemove hlavickove subory */
#include <stdio.h>

/* funkcia main() */
int main(void)
{
  float f;

  printf("Zadaj realne cislo: ");
  scanf("%f", &f);
  printf("\nTretia mocnina cisla %.2f je %.2f\n", f, f * f * f);
  return 0;
}

2. Napíš program, ktorý načíta tri čísla a vypíše prostredné (podľa veľkosti) z nich.
Spoiler:
Kód:
/***************************************
 *
 * uloha_2.c        ver. 2.0
 * program z troch celych cisiel
 * urci prostredne z nich
 * ===============================
 *
 * libcosenior,     april 2012
 *
 ***************************************/

/* systemove hlavickove subory */
#include <stdio.h>

/* funkcia main() */
int main(void)
{
    int x, y, z, stred;

    printf("Z troch zadanych cisiel vypisem prostredne (podla velkosti)\n\n");
    for(;;) {
        printf("Pre ukoncenie stlac ctrl + c.\n");
        printf("Zadaj tri cele cisla:\n");
        scanf("%d%d%d", &x, &y, &z);
        printf("\nProstredne cislo (podla velkosti) je: %d\n\n",
              ((x > y   // ak je 'x' väčšie ako 'y'
                &&      // a zároveň
                x < z)  //  je 'x' menšie ako 'z'
               ||       // alebo
               (x > z   // ak je 'x' väčšie ako 'z' a zároveň
                &&      // a zároveň
                x < y)) // je 'x' menšie ako 'y'
               ?        //vtedy
               x        // x je stredne
               :        // ak horná časť nie je pravda a
              ((y > z   // vtedy ak je 'y' väčšie ako 'z'
                &&      // a zároveň
                y < x)  // je 'y' menšie ako 'x'
               ||       // alebo
               (y > x   // ak je 'y' väčšie ako 'x'
                &&      // a zároveň
                y < z)) // je 'y' menšie ako 'z'
               ?        // vtedy
               y        // 'y' je stredne
               :        // ak celá horná časť nie je pravda
               z);      // 'z' je stredne
        // zápis bez komentárov vyzerá takto:
        // ((x > y && x < z) || (x > z && x < y)) ? x : ((y > z && y < x) || (y > x && y < z)) ? y : z);
    }

    return 0;
}

3. Napíš program, ktorý načíta číslo. Ak je toto číslo 6, vypíše Dobré ráno. Ak je toto
číslo 12, vypíše Dobry den. Ak je toto číslo 19, vypíše Dobry vecer. Vo všetkých
ostatných prípadoch vypíše Dovidenia.
Spoiler:
Kód:
/***************************************
 *
 * uloha_3.c        ver. 2.0
 * vyuzitie funkcie switch
 * ===============================
 *
 * libcosenior,     april 2012
 *
 ***************************************/

/* systemove hlavickove subory */
#include <stdio.h>

/* funkcia main() */
int main(void)
{
  int i;

  printf("Zadaj cele cislo: ");
  scanf("%d", &i);
  switch (i) {
    case 6:
      printf("Dobre rano\n");
      break;
    case 12:
      printf("Dobry den\n");
      break;
    case 19:
      printf("Dobry vecer\n");
      break;
    default:
      printf("Dovidenia\n");
  }
  return 0;
}

4. Napíš program, ktorý načíta číslo a patričný počet krát vypíše Chcem jeden bod.
Spoiler:
Kód:
/***************************************
 *
 * uloha_4.c        ver. 2.0
 * vyuzitie cyklu for
 * ===============================
 *
 * libcosenior,     april 2012
 *
 ***************************************/

/* systemove hlavickove subory */
#include <stdio.h>

/* funkcia main() */
int main(void)
{
  int i, j;

  printf("Zadaj cele cislo a tolko krat vypisem nejaky text: ");
  scanf("%d", &j);
  for(i = 1; i <= j; i++)
    printf("Chcem jeden bod.\n");
  return 0;
}

5. Napíš program, ktorý načíta číslo a nakreslí trojuholník danej veľkosti. Príklad pre
vstup 3:
Kód:
*
**
***
**
*

Spoiler:
Kód:
/***************************************
 *
 * uloha_5.c        ver. 2.0
 * program vykresli trojuholnik
 * z hviezdiciek
 * ===============================
 *
 * libcosenior,     april 2012
 *
 ***************************************/

/* systemove hlavickove subory */
#include <stdio.h>

/* funkcia main() */
int main(void)
{
  int i, j, vel;

  printf("Zadaj cele cislo, vypisem z neho trojuholnik: ");
  scanf("%d", &vel);
  for(i = 1; i <= vel + (vel - 1); i++) {
    for(j = 1; j <= (i <= vel ? i : vel - (i - vel)); j++)
      putchar('*');
    putchar('\n');
  }
  return 0;
}

6. Napíš program, ktorý číta znaky z klávesnice až kým nenájde 'X'. Potom vypíše,
koľko z prečítaných znakov boli znaky 'A'.
Spoiler:
Kód:
/***************************************
 *
 * uloha_6.c        ver. 2.0
 * zabavka so znakmi
 * ===============================
 *
 * libcosenior,     april 2012
 *
 ***************************************/

/* systemove hlavickove subory */
#include <stdio.h>

/* funkcia main() */
int main(void)
{
  int i = 0, c;

  for(;;) {
    printf("Zadaj znak z kalvesnice: ");
    c = getchar();
    while (getchar() != '\n') /* zbavenie sa znaku <Enter> */
      ;                       /* botkočiarka patri k tomu  */
    putchar('\n');
    switch (c) {
      case 'A':
        i++;
        break;
      case 'X':
        printf("Zo zadanych znakov bolo pismeno 'A' zadane %d krat.\n", i);
        break;
    }
    if (c == 'X')
      break;
  }
  return 0;
}

7. Napíš program, ktorý načíta znak z klávesnice. Ak tento znak nie je písmeno, tak ho
vypíše, ak je to malé písmeno, vypíše k nemu zodpovedajúce veľké písmeno a ak je to
veľké písmeno, vypíše k nemu zodpovedajúce malé písmeno.
Spoiler:
Kód:
/******************************************
 *
 * uloha_7.c        ver. 2.0
 * zabavka so znakmi, zmena velkych pismen
 * za male a naopak
 * =======================================
 *
 * libcosenior,     april 2012
 *
 ******************************************/

/* systemove hlavickove subory */
#include <stdio.h>

/* funkcia main() */
int main(void)
{
  int c, d;

  printf("Ak zadany znak nie je pismeno, tak ho vypisem,\n"
         "ak je to male pismeno, vypisem k nemu zodpovedajuce\n"
         "velke pismeno a ak je to velke pismeno,\n"
         "vypisem k nemu zodpovedajuce male pismeno.\n\n"
         "Pre ukoncenie stlac medzernik a <Enter>!\n");
  for(;;) {
    printf("\nStlac nejaku klavesu: ");
    c = getchar();
    while (getchar() != '\n') /* zbavenie sa znaku <Enter> */
      ;                       /* stredník patri k tomu  */
    /* podmienky na zmenu pismen z velkych na male a naopak */
    d = c >= 'a' && c <= 'z' ? c - 32 : 0 < (c >= 'A' && c <= 'Z')
        ? c + 32 : 0 < !(c >= 'a' && c <= 'z') && !(c >= 'A' && c <= 'Z') ? c : 0;
    printf("%c\t%c", c, d);
    if (c == ' ')
      break;
  }
  return 0;
}

8. Napíš program, ktorý načíta dve celé čísla a vypíše všetky párne čísla, ktoré ležia
medzi nimi. (Pre vstup 3 a 8 vypíše čísla 4, 6 a 8. Pre vstup 6 a 3 vypíše čísla 4 a 6. Pre
vstup 3 a 3 nevypíše nič.)
Spoiler:
Kód:
/******************************************
 *
 * uloha_8.c        ver. 2.0
 * vypise parne cisla v zadanom rozsahu
 * =======================================
 *
 * libcosenior,     april 2012
 *
 ******************************************/

/* systemove hlavickove subory */
#include <stdio.h>

/* funkcia main() */
int main(void)
{
  int i, j, k;

  printf("Program, ktory nacita dve cele cisla\n"
         "a vypise vsetky parne cisla, ktore lezia medzi nimi.\n");
  printf("\nZadaj dve cele cisla:\n");
  scanf("%d%d", &i, &j);
  if (i < j) {
    for(k = i; k <= j; k++) {
      if (k % 2 == 0)
        printf("%d, ", k);
    }
  }
  else {
    for(k = j; k <= i; k++) {
      if (k % 2 == 0)
        printf("%d, ", k);
    }
  }
  return 0;
}

9. Napíš program, ktorý vypočíta faktoriál zo zadaného čísla. (Pre vstup 4 bude výsledok
1.2.3.4 = 24)
Spoiler:
Kód:
/********************************************
 *
 * uloha_9.c        ver. 2.0
 * program vypocita faktorial zadaneho cisla
 * =========================================
 *
 * libcosenior,     april 2012
 *
 ********************************************/

/* systemove hlavickove subory */
#include <stdio.h>

/* funkcia main() */
int main(void)
{
  int i, j, k = 1, fakt;

  printf("Program, ktory vypocita faktorial zo zadaneho cisla.\n");
  printf("\nZadaj cele cislo: ");
  scanf("%d", &i);
  for (j = 2; j <= i; j++) {
    fakt = k * j;
    printf("%d * %d = %d,\n", k, j, fakt);
    k = k * j;
  }
  printf("\n%d! = %d\n", i, fakt);
  return 0;
}

10. Napíš program, ktorý načíta 20 čísel z klávesnice a vypíše, koľko z nich bolo od 5 do 10.
Spoiler:
Kód:
/********************************************
 *
 * uloha_10.c       ver. 2.0
 * program vypise pocet cisiel v stanovenom
 * rozsahu zo zadanych cisiel
 * =========================================
 *
 * libcosenior,     april 2012
 *
 ********************************************/

/* systemove hlavickove subory */
#include <stdio.h>

/* funkcia main() */
int main(void)
{
  int i, j, k = 0;

  printf("program, ktorý načíta 20 čísel a vypíše\n"
         "koľko z nich bolo od 5 do 10.\n\n");
  for (i = 1; i <= 20; i++) {
    printf("Zadaj %d. cele cislo: ", i);
    scanf("%d", &j);
    if (j >= 5 && j <= 10)
      k += 1;
  }
  printf("\n\nCisiel od 5 do 10 bolo zadanych %d\n", k);
  return 0;
}

11. Napíš program, ktorý pozostáva iba z dvoch príkazov (omáčička a deklarácia
premenných sa nerátajú) a ktorý načíta číslo a v prípade, že je to číslo párne, vypíše
z neho polovicu a inak vypíše jeho trojnásobok zväčšený o 1.
Spoiler:
Kód:
/********************************************
 *
 * uloha_11.c       ver. 2.0
 * zabavka s cislami
 * =========================================
 *
 * libcosenior,     april 2012
 *
 ********************************************/

/* systemove hlavickove subory */
#include <stdio.h>

/* funkcia main() */
int main(void)
{
  int i;

  printf("program, ktory nacita cislo a v pripade, ze je to cislo parne,\n"
         "vypise z neho polovicu a inak vypise jeho trojnasobok zvacsený o 1.\n"
         "\nZadaj cele cislo: ");
  scanf("%d", &i);
  printf("%d", !( i % 2) ? i / 2 : (i * 3) + 1);   /* !(i % 2) je ako (i % 2 == 0) */
  return 0;
}

12. Napíš program, ktorý načíta číslo a opakuje s ním operáciu z predošlej úlohy, až kým
nedostane jedničku. Čísla priebežne vypisuje. (Teda pre vstup 3 vypíše čísla 3, 10,
5, 16, 8, 4, 2, 1.) Mimochodom – myslíš si, že takýto program vždy skončí?
Spoiler:
Kód:
/*
 * program skonci vzdy.
 */
/********************************************
 *
 * uloha_12.c       ver. 2.0
 * zabavka s cislami rozsirena
 * =========================================
 *
 * libcosenior,     april 2012
 *
 ********************************************/

/* systemove hlavickove subory */
#include <stdio.h>

/* funkcia main() */
int main(void)
{
  int i, j;

  printf("program, ktory nacita cislo a v pripade, ze je to cislo parne,\n"
         "vypise z neho polovicu a inak vypise jeho trojnasobok zvacsený o 1.\n"
         "Operaciu opakuje, kym nedostane jednicku.\n"
         "\nZadaj cele cislo: ");

  scanf("%d", &i);
  for (;;) {
    printf("%d, ", j = !(i % 2) ? i / 2 : (i * 3) + 1); /* !(i % 2) je ako (i % 2 == 0) */
    if (j == 1)
      break;
    printf("%d, ", i = !(j % 2) ? j / 2 : (j * 3) + 1); /* !(i % 2) je ako (i % 2 == 0) */
    if (i == 1)
    break;
  }
  return 0;
}

13. Napíš program, ktorý načíta číslo a spraví patričný počet sústredných štvorcov.
Spoiler:
Kód:
/********************************************
 *
 * uloha_13.c       ver. 2.0
 * program nacita cislo a vykresli
 * patricny pocet sustredenych stvorcov
 * =========================================
 *
 * libcosenior,     april 2012
 *
 ********************************************/

/* systemove hlavickove subory */
#include <stdio.h>

/* funkcia main() */
int main(void)
{
  int i, j, vel, vel_max;

  printf("Program, ktory nacita cislo a spravi patricny pocet\n"
         "sustrednych stvorcov.\n");
  for (;;) {
    printf("\nZadaj cele cislo:\n"
           "(pre ukoncenie stlac 0 nulu)");
    scanf("%d", &vel);
    if (vel == 0)
      break;
    vel_max = vel * 5 - 4;
    /* horna cast */
    for (i = 1; i <= vel + (vel - 1); i++) {
      for (j = 1; j <= vel_max; j++) {
        if (i % 2)
          (vel % 2 ?
          (j >= 1 && j <= vel_max && j % 2)
          : ((j >= 1 && j <= vel_max / 2 && j % 2) || (j >= vel_max / 2 && j <= vel_max && !(j % 2))))
          || (j >= i && j <= vel_max -i + 1)
          ? putchar('*') : putchar(' ');
        if (!(i % 2))
          (vel % 2 ?
          (j >= 1 && j <= i - 1 && (j % 2) || j >= vel_max - (i - 1) && j <= vel_max && (j % 2))
          : j >= 1 && j <= i - 1 && (j % 2) || j >= vel_max - (i - 1) && j <= vel_max && !(j % 2))
          ? putchar('*') : putchar(' ');
      }
    putchar('\n');
    }
    /* stredna cast */
    for (i = 1; i <= vel - 2; i++) {
      for (j = 1; j <= vel_max; j++) {
        (vel % 2 ?
        (j >= 1 && j <= vel * 2 - 1 && (j % 2) || j > (vel * 2 - 1) + vel - 2 && j <= vel_max && (j % 2) ? putchar('*') : putchar(' '))
        : (j >= 1 && j <= vel * 2 - 1 && (j % 2) || j > (vel * 2 - 1) + vel - 2 && j <= vel_max && !(j % 2) ? putchar('*') : putchar(' ')));
      }
    putchar('\n');
    }
    /* dolna cast */
    for (i = vel + (vel - 1); i >= 1; i--) {
      for (j = 1; j <= vel_max; j++) {
        if (vel == 1)
          break;
        if (!(i % 2))
          (vel % 2 ?
          (j >= 1 && j <= i - 1 && (j % 2) || j >= vel_max - (i - 1) && j <= vel_max && (j % 2))
          : j >= 1 && j <= i - 1 && (j % 2) || j >= vel_max - (i - 1) && j <= vel_max && !(j % 2))
          ? putchar('*') : putchar(' ');
        if (i % 2)
          (vel % 2 ?
          (j >= 1 && j <= vel_max && j % 2)
          : ((j >= 1 && j <= vel_max / 2 && j % 2) || (j >= vel_max / 2 && j <= vel_max && !(j % 2))))
          || (j >= i && j <= vel_max -i + 1)
          ? putchar('*') : putchar(' ');
      }
    putchar('\n');
    }
  }
  return 0;
}

13. ešte raz
Spoiler:
Kód:
/********************************************
 *
 * uloha_13.c       ver. 2.1
 * program nacita cislo a vykresli
 * patricny pocet sustredenych stvorcov
 * =========================================
 *
 * libcosenior,     april 2013
 *
 ********************************************/

/* systemove hlavickove subory */
#include <stdio.h>
/* definovane makra */
#define VEL_MAX    vel * 5 - 4  // max. pocet riadkov a stlpcov
#define R_H_CAST   i >= 1 && i <= vel * 2 - 1                // horna cast N
#define R_S_CAST   i >= vel * 2 && i <= (vel * 2 - 3) + vel  // stredna cast N
#define R_D_CAST   i >= (vel * 2 - 2) + vel && i <= VEL_MAX  // dolna cast N
#define R_H_CASTP  i >= 1 && i <= vel * 2 - 1                // horna cast P
#define R_S_CASTP  i >= vel * 2 && i <= vel * 2 + (vel - 2)  // stredna cast P
#define R_D_CASTP  k >= 1 && k <= vel * 2 - 1                // dolna cast P

short int i, j, vel, k;

/* funkcia main() */
int main(void)
{
    char spodny_riadok[] = {"12345678901234567890123456789012345678901234567890123456789012345678901234567890"},
         desiatky[]      = {"         1         2         3         4         5         6         7         8"};

    printf("Program, ktory nacita cislo a spravi patricny pocet\n"
           "sustrednych stvorcov.\n");
    do {
        printf("\nZadaj cele cislo:\n"
               "(pre ukoncenie stlac 0 nulu)");
        scanf("%hd", &vel);
        putchar('\n');
        for (i = 1, k = VEL_MAX; i <= VEL_MAX, k >= 1; i++, k--) { // cyklus riadkov
            for (j = 1; j <= VEL_MAX; j++) { // cyklus stlpcov
                vel % 2 && ((R_H_CAST && (!(i % 2) && ((j >= 1 && j <= i - 1
                && j % 2) || (j <= VEL_MAX && j >= VEL_MAX - (i - 1) + 1)
                && j % 2) || i % 2 && ((j >= i && j <= VEL_MAX - i + 1)
                || ((j >= 1 && j <= i - 1 && j % 2) || (j <= VEL_MAX
                && j >= VEL_MAX - (i - 1) + 1) && j % 2)))
                || R_S_CAST && ((j < vel * 2 && j % 2) || (j > vel * 3 - 3
                && j % 2)) || R_D_CAST && (!(i % 2) && ((j >= 1 && j <= k - 1
                && j % 2) || (j <= VEL_MAX && j >= VEL_MAX - (k - 1) + 1)
                && j % 2) || i % 2 && ((j >= k && j <= VEL_MAX - k + 1)
                || ((j >= 1 && j <= k - 1 && j % 2) || (j <= VEL_MAX
                && j >= VEL_MAX - (k - 1) + 1) && j % 2)))))
                || !(vel % 2) && ((R_H_CASTP && (!(i % 2) && ((j >= 1
                && j <= i - 1 && j % 2) || (j <= VEL_MAX
                && j >= VEL_MAX - (i - 1) + 1) && !(j % 2)) || i % 2
                && ((j >= i && j <= VEL_MAX - i) || ((j >= 1 && j <= i - 1
                && j % 2) || (j <= VEL_MAX && j >= VEL_MAX - (i - 1))
                && !(j % 2)))) || R_S_CASTP && ((j < vel * 2 && j % 2)
                || (j > VEL_MAX - vel * 2 && !(j % 2))) || R_D_CASTP && (i % 2
                && ((j >= 1 && j <= k - 1 && j % 2) || (j <= VEL_MAX
                && j >= VEL_MAX - (k - 1) + 1) && !(j % 2)) || !(i % 2)
                && ((j >= k && j <= VEL_MAX - k) || ((j >= 1 && j <= k - 1
                && j % 2) || (j <= VEL_MAX && j >= VEL_MAX - (k - 1))
                && !(j % 2)))))) ? putchar('*') : putchar(' ');
            }
            putchar('\n');
        }
    } while (vel);
    return 0;
}

14. Napíš program, ktorý zistí a vypíše najmenší násobok čísla 31 väčší ako 10000.
Použi nekonečný cyklus (v ktorom sa nejaká premenná vždy zväčší o 31) a príkaz
break.
Spoiler:
Kód:
/********************************************
 *
 * uloha_14.c       ver. 2.0
 * program  vypise najmensi nasobok
 * cisla 31 vacsi ako 10000
 * =========================================
 *
 * libcosenior,     april 2012
 *
 ********************************************/

/* systemove hlavickove subory */
#include <stdio.h>

/* funkcia main() */
int main(void)
{
  int i = 0;

  for(;;) {
    if (i > 10000) {
      printf("Najmensi nasobok cisla 31 vacsi ako 10 000 je %d.\n", i);
      break;
    }
    i += 31;
  }
  return 0;
}

15. Fibonacciho postupnosť je postupnosť čísel 1, 1, 2, 3, 5,
8, 13,..., každý ďalší člen je súčtom dvoch predchádzajúcich.
Napíš program, ktorý vypíše všetky členy Fibonacciho postupnosti menšie než 10000.
Spoiler:
Kód:
/********************************************
 *
 * uloha_15.c       ver. 2.0
 * program vypise fibonaciho postupnost
 * mensiu ako 10000
 * =========================================
 *
 * libcosenior,     april 2012
 *
 ********************************************/

/* systemove hlavickove subory */
#include <stdio.h>

/* funkcia main() */
int main(void)
{
  int i = 3, j = 1, k = 1, fib;

  printf("%d\n%d\n", j, k);
  for (;;) {
    fib = j + k;
    if (fib > 10000)
      break;
    printf("%d\n", fib);
    j = k;
    k = fib;
    i++;
  }
  return 0;
}

_________________
kódy píšem na platforme: linux Ubuntu 12.04 (Geany, Code::Blocks), WinXP (Code::Blocks, PsPad editor),
Skype: libcokamo, ICQ: 56312279
Ak treba, napíš mi na libcosenior@gmail.com. To mám v mobile a stále po ruke.


Detaily príspevku Upozorniť užívateľa
Hore
 Profil  
 
Zobraziť príspevky z predchádzajúceho:  Zoradiť podľa  
Fórum je zamknuté Táto téma je zamknutá, nemôžete posielať nové príspevky alebo odpovedať na staršie.  [ Príspevok: 1 ] 

Všetky časy sú v GMT + 1 hodina


Kto je on-line

Užívatelia prezerajúci fórum: Žiadny registrovaný užívateľ nie je prítomný a 1 hosť


Rýchla úprava:
Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre
Nemôžete zasielať súbory v tomto fóre

Hľadať:
Skočiť na:  
cron
Powered by phpBB® Forum Software © phpBB Group

Hosted by FreeSpace SK