Škôlka jazyka C

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

Aktuálny čas je 02 Mar 2021, 15:18

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
PoslaťNapísal: 07 Jún 2012, 08:34 
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íš funkciu tabulka_mocnin(double x, int n), ktorá vypíše tabuľku mocnín x od 1 do n.
Použi v programe.
Spoiler:
Kód:
#include <stdio.h>

/* deklaracia uplnych funkcnych prototypov */
void tabulka_mocnin(double x, int n);

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

  printf("Zadaj cislo ktore sa bude umocnovat v tabulke: ");
  scanf("%Lf", &f);
  printf("Zadaj najvacsieho mocnitela tabulky: ");
  scanf("%d", &i);
  tabulka_mocnin(f, i);
  return 0;
}

/* definicia vlastnych funkcii */
/* vypocita a vypise 1. az n-tu mozninu zadaneho cisla */
void tabulka_mocnin(double x, int n)
{
  int i;
  double mocnina;

  mocnina = x;
  printf("Tabulka mocnin od 1 do %d cisla %Lf\n"
         "\n1. mocnina = %Lf\n", n, x, x);
  for (i = 2;i <= n; i++) {
    mocnina *= x;
    printf("%d. mocnina = %Lf\n", i, mocnina);
  }
}

2. Napíš funkciu troj(char c, int n), ktorá zobrazí na obrazovke trojuholník o n riadkoch zložený zo znakov.
Prvý znak na poslednom riadku musí byť v prvom stĺpci!
Použi v programe.
Spoiler:
Kód:
#include <stdio.h>

/* deklaracia uplnych funkcnych prototypov */
void troj(char c, int n);

/* funkcia main() */
int main(void)
{
  char znak;
  int vyska;

  printf("Zadaj vysku trojuholnika: ");
  scanf("%d", &vyska);
  while (getchar() != '\n')
    ;
  printf("Zadaj znak ktorym sa ma trojuholnik vykreslit: ");
  znak = getchar();
  troj(znak, vyska);
  return 0;
}

/* definicia vlastnych funkcii */
/* vypise torjuholnikzo zadaneho znaku o zadanej vyske */
void troj(char c, int n)
{
  int riadky, stlpce, koef, pomoc;

  pomoc = 0;
  koef = (n * 2) - 1;
  for (riadky = 1; riadky <= n; riadky++) {
    for (stlpce = 1;stlpce <= koef; stlpce++)
      stlpce >= (koef -(riadky +(n - 2))) && (stlpce <= ((koef -(riadky +(n - 2)))) + pomoc)
      ? putchar(c) : putchar(' ');
    putchar('\n');
    pomoc += 2;
  }
}

3. Napíš funkciu exist(), ktorá vráti 1, ak súbor DOPIS.TXT existuje, v opačnom prípade vráti 0.
Nezabudni súbor uzavrieť.
Použi v programe.
Spoiler:
Kód:
#include <stdio.h>
#include <stdlib.h>

/* globalne premenne */
FILE *fr;

/* deklaracia uplnych funkcnych prototypov */
void exist(void);
void zatvor(void);

/* funkcia main() */
int main(void)
{
  exist();
  zatvor();
  return 0;
}

/* definicia vlastnych funkcii */
/*
* funkcia kontroluje existenxiu súbor DOPIS.TXT
* vracia 1 pri uspesnom otvoreni, inaksie vracia 0
*/
void exist(void)
{
  if ((fr = fopen("DOPIS.TXT", "r")) != NULL)
    printf("1\n");
  else {
    printf("0\n");
//    exit(EXIT_FAILURE);
  }
}

/*
* funkcia zatvara súbor DOPIS.TXT
* vracia nenulovu hodnotu pri uspesnom zavreti, inaksie vracia 0
*/
void zatvor(void)
{
  (fclose(fr) != EOF);
}

4. Napíš funkciu vyskyt() s dvomi parametrami. Prvý je ukazovateľ na súbor, druhý je char. Funkcia vráti počet výskytu znaku (definovaného char) v súbore.
Použi v programe.
Spoiler:
Kód:
#include <stdio.h>
#define CHYBA(sprava)  { printf("%s\n", sprava); return 1; }  /* makro s parametrami */

/* globalne premenne */
FILE *fr;

/* deklaracia uplnych funkcnych prototypov */
int otvor_subor(void);
int vyskyt(FILE *file, char znak);
int zatvor_subor(void);

/* funkcia main() */
int main(void)
{
  char c;

  if (otvor_subor() == 0)                  /* vola funkciu otvor_subor() */
    CHYBA("Neda sa otvorit súbor DOPIS.TXT");   /* vola makro CHYBA() */

  printf("Zadaj znak, ktoreho pocet vyskytu v subore DOPIS.TXT chces zistit: ");
  c = getchar();
  printf("\nPocet znakov '%c' v subore DOPIS.TXT je: %d\n", c, vyskyt(fr, c)); /* vola funkciu vyskyt() */

  if (zatvor_subor() == 0)                 /* vola funkciu zatvor_subor() */
   CHYBA("Neda sa zatvorit súbor DOPIS.TXT");   /* vola makro CHYBA() */
  return 0;
}

/*
* funkcia otvara subor DOPIS.TXT
* vracia nenulovu hodnotu pri uspesnom otvoreni, inaksie vracia 0
*/
int otvor_subor(void)
{
  return ((fr = fopen("DOPIS.TXT", "r")) != NULL);
}

/*
* unkcia vrati pocet vyskytu znaku (definovaneho char) v subore
*/
int vyskyt(FILE *file, char znak)
{
  char c;
  int pocet = 0;

  while ((c = getc(file)) != EOF) {
   if (c == znak)
     pocet += 1;
  }
  return pocet;
}

/*
* funkcia zatvara subor DOPIS.TXT
* vracia nenulovu hodnotu pri uspesnom zavreti, inaksie vracia 0
*/
int zatvor_subor(void)
{
  return (fclose(fr) != EOF);
}

5. Napíš funkciu vypis(FILE *fr), ktorá vypíše na obrazovku obsah súboru.
Použi v programe.
Spoiler:
Kód:
#include <stdio.h>
#define CHYBA(sprava)  { printf("%s\n", sprava); return 1; }  /* makro s parametrami */

/* globalne premenne */
FILE *fr;

/* deklaracia uplnych funkcnych prototypov */
int otvor_subor(void);
void vypis(FILE *fr);
int zatvor_subor(void);

/* funkcia main() */
int main(void)
{
  char c;

  if (otvor_subor() == 0)                  /* vola funkciu otvor_subor() */
    CHYBA("Neda sa otvorit súbor DOPIS.TXT");   /* vola makro CHYBA() */

  vypis(fr);    /* vola funkciu vypis() */

  if (zatvor_subor() == 0)                 /* vola funkciu zatvor_subor() */
   CHYBA("Neda sa zatvorit súbor DOPIS.TXT");   /* vola makro CHYBA() */
  return 0;
}

/*
* funkcia otvara subor DOPIS.TXT
* vracia nenulovu hodnotu pri uspesnom otvoreni, inaksie vracia 0
*/
int otvor_subor(void)
{
  return ((fr = fopen("DOPIS.TXT", "r")) != NULL);
}

/*
* funkcia vypise obsah suboru na obrazovku
*/
void vypis(FILE *file)
{
  char c;

  while ((c = getc(file)) != EOF)
    putchar(c);
}

/*
* funkcia zatvara subor DOPIS.TXT
* vracia nenulovu hodnotu pri uspesnom zavreti, inaksie vracia 0
*/
int zatvor_subor(void)
{
  return (fclose(fr) != EOF);
}

6. Vylepši funkciu vypis() tak, aby zaisťovala stránkovanie po zaplnení obrazovky.
Použi v programe.
Spoiler:
Kód:
#include <stdio.h>
#include <stdlib.h>  /* kniznica potrebna pre fynkcie system() */
#include <string.h>  /* kniznica potrebna pre funkciu strlen() */
#define DLZKA_RIADKU 75
/* globalne premenne */
FILE *fr;
char nazov_suboruOK[20];

/* deklaracia uplnych funkcnych prototypov */
int otvor_subor(void);
void vypis(FILE *fr);
int zatvor_subor(void);

/* funkcia main() */
int main(void)
{
  char c;

  if (otvor_subor() == 0) {                  /* vola funkciu otvor_subor() */
    printf("Neda sa otvorit subor %s.\n", nazov_suboruOK);
    return 1;
  }

  vypis(fr);    /* vola funkciu vypis() */

  if (zatvor_subor() == 0) {              /* vola funkciu zatvor_subor() */
   printf("Neda sa zatvorit subor %s.\n", nazov_suboruOK);
   return 1;
  }
  return 0;
}

/*
* funkcia otvara subor s nazvom zadanym z klavesnice
* vracia nenulovu hodnotu pri uspesnom otvoreni, inaksie vracia 0
*/
int otvor_subor(void)
{
  int i;
  char nazov_suboru[20];

  printf("Zadaj nazov suboru aj s priponou: ");
  fgets(nazov_suboru,19,stdin);
  for (i = 0; i <= (strlen(nazov_suboru)) - 2; i++) { /* skratenie retazca o znaky '\n' a '\0' */
    nazov_suboruOK[i] = nazov_suboru[i];
  }
  return ((fr = fopen(nazov_suboruOK, "r")) != NULL);
}

/*
* funkcia vypise obsah suboru na obrazovku s odstrankovanim
*/
void vypis(FILE *file)
{
  int i = 1, j = 0;
  char c;

  while ((c = getc(file)) != EOF) {
      j++;
      if (j == DLZKA_RIADKU || c == '\n') {
        ++i;
        j = 0;
      }
      putchar(c);
      if (i % 22 == 0) {
        putchar('\n');
        system("pause");
        system("cls");
        i++;
      }
    }
}

/*
* funkcia zatvara subor
* vracia nenulovu hodnotu pri uspesnom zavreti, inaksie vracia 0
*/
int zatvor_subor(void)
{
  return (fclose(fr) != EOF);
}

7. Napíš funkciu double vypis_subor(void), ktorá vypíše pomocou funkcie výpis() na obrazovku obsah ľubovolného súboru. Meno súboru čítaj z klávesnice a vhodne reaguj na prípad, keď súbor neexistuje.
Funkcia vypis_subor() vracia 2.2, ak je meno súboru len K alebo k.
Ak nebol súbor otvorený, vracia hodnotu 1.1, inak vracia 0.5
Spoiler:
Kód:
double vypis_subor(void)
{
  int i;
  char nazov_suboru[100];

  printf("Zadaj nazov suboru aj s priponou: ");
  /* je mozne zadat aj celu cestu k suboru, napr. d:\\subory\test.txt */
  fgets(nazov_suboru,99,stdin);
  if ((nazov_suboru[0] == 'k') && (nazov_suboru[1] == '\n') ||
      (nazov_suboru[0] == 'K') && (nazov_suboru[1] == '\n') ||
      (nazov_suboru[0] == '\n'))
    return 2.2;
  else {
    for (i = 0; i <= (strlen(nazov_suboru)) - 2; i++) /* skratenie retazca o znaky '\n' a '\0' */
      nazov_suboruOK[i] = nazov_suboru[i];
    if ((fr = fopen(nazov_suboruOK, "r")) == NULL) {
      printf("Taky subor nie je k dispozicii!\n");
      return 1.1;
    }
    else {
      vypis(fr);      /* vola funkciu vypis() */
      return 0.5;
    }
  }
}
/*
* funkcia vypise obsah suboru na obrazovku s odstrankovanim
*/
void vypis(FILE *file)
{
  int i = 1;
  char c;

  while ((c = getc(file)) != EOF) {
      if (c == '\n')
        ++i;
      putchar(c);
      if (i % 24 == 0) {
        putchar('\n');
        system("pause");
        system("cls");
        i++;
      }
  }
  if (fclose(fr) == EOF)
    printf("Neda sa zatvorit subor %s.\n", nazov_suboruOK);
}

8. Napíš program, ktorý s využitím funkcie vypis_subor() bude vypisovať na obrazovku ľubovolné súbory dovtedy, kým užívateľ nezadá meno súboru ako K.
Spoiler:
Kód:
#include <stdio.h>
#include <stdlib.h>  /* kniznica potrebna pre funkcie system() */
#include <string.h>  /* kniznica potrebna pre funkciu strlen() */

/* globalne premenne */
FILE *fr;
char nazov_suboruOK[100];

/* deklaracia uplnych funkcnych prototypov */
double vypis_subor(void);
void vypis(FILE *fr);

/* funkcia main() */
int main(void)
{
  for (;;) {
  if (vypis_subor() == 2.2)
    return;
  }
  putchar('\n');
  return 0;
}

/*
* funkcia otvori a vypise subor s nazvom zadanym z klavesnice
* vracia 2.2 ak je nazov suboru k alebo K
* vracia 1.1 ak sa subor neotvoril, unak vracia 0.5
*/
double vypis_subor(void)
{
  int i;
  char nazov_suboru[100];

  printf("Zadaj nazov suboru aj s priponou: ");
  /* je mozne zadat aj celu cestu k suboru, napr. d:\\subory\test.txt */
  fgets(nazov_suboru,99,stdin);
  if ((nazov_suboru[0] == 'k') && (nazov_suboru[1] == '\n') ||
      (nazov_suboru[0] == 'K') && (nazov_suboru[1] == '\n') ||
      (nazov_suboru[0] == '\n'))
    return 2.2;
  else {
    for (i = 0; i <= (strlen(nazov_suboru)) - 2; i++) /* skratenie retazca o znaky '\n' a '\0' */
      nazov_suboruOK[i] = nazov_suboru[i];
    if ((fr = fopen(nazov_suboruOK, "r")) == NULL) {
      printf("Taky subor nie je k dispozicii!\n");
      return 1.1;
    }
    else {
      vypis(fr);      /* vola funkciu vypis() */
      return 0.5;
    }
  }
}
/*
* funkcia vypise obsah suboru na obrazovku s odstrankovanim a nasledne zatvori subor
*/
void vypis(FILE *file)
{
  int i = 1;
  char c;

  while ((c = getc(file)) != EOF) {
      if (c == '\n')
        ++i;
      putchar(c);
      if (i % 24 == 0) {
        putchar('\n');
        system("pause");
        system("cls");
        i++;
      }
  }
  if (fclose(fr) == EOF)
    printf("Neda sa zatvorit subor %s.\n", nazov_suboruOK);
}

9. Funkcie vypis() a vypis_subor() ulož do suboru FCE.C a funkciu main() do súboru HLAVNY.C.
10. Pomocou #include pripoj súbor FCE.C do súboru HLAVNY.C.
11. Vyskúšaj funkciu programu vytvoreného v predchádzajúcich úlohách spustením súboru HLAVNY.C.

FCE.C
Spoiler:
Kód:
#include <stdio.h>
#include <string.h>  /* kniznica potrebna pre funkciu strlen() */
#include <stdlib.h>  /* kniznica potrebna pre funkcie system() */
/* globalne premenne */
FILE *fr;
char nazov_suboruOK[100];

/* deklaracia uplnych funkcnych prototypov */
double vypis_subor(void);
void vypis(FILE *file);

/*
* funkcia otvori a vypise subor s nazvom zadanym z klavesnice
* vracia 2.2 ak je nazov suboru k alebo K
* vracia 1.1 ak sa subor neotvoril, unak vracia 0.5
*/
double vypis_subor(void)
{
  int i;
  char nazov_suboru[100];

  printf("Zadaj nazov suboru aj s priponou: ");
  /* je mozne zadat aj celu cestu k suboru, napr. d:\\subory\test.txt */
  fgets(nazov_suboru,99,stdin);
  if ((nazov_suboru[0] == 'k') && (nazov_suboru[1] == '\n') ||
      (nazov_suboru[0] == 'K') && (nazov_suboru[1] == '\n') ||
      (nazov_suboru[0] == '\n'))
    return 2.2;
  else {
    for (i = 0; i <= (strlen(nazov_suboru)) - 2; i++) /* skratenie retazca o znaky '\n' a '\0' */
      nazov_suboruOK[i] = nazov_suboru[i];
    if ((fr = fopen(nazov_suboruOK, "r")) == NULL) {
      printf("Taky subor nie je k dispozicii!\n");
      return 1.1;
    }
    else {
      vypis(fr);      /* vola funkciu vypis() */
      return 0.5;
    }
  }
}
/*
* funkcia vypise obsah suboru na obrazovku s odstrankovanim a nasledne zatvori subor
*/
void vypis(FILE *file)
{
  int i = 1;
  char c;

  while ((c = getc(file)) != EOF) {
      if (c == '\n')
        ++i;
      putchar(c);
      if (i % 24 == 0) {
        putchar('\n');
        system("pause");
        system("cls");
        i++;
      }
  }
  if (fclose(fr) == EOF)
    printf("Neda sa zatvorit subor %s.\n", nazov_suboruOK);
}

HLAVNY.C
Spoiler:
Kód:
#include "FCE.C"     /* pridany subor FCE.C

/* funkcia main() */
int main(void)
{
  for (;;) {
  if (vypis_subor() == 2.2)
    return 0;
  }
  putchar('\n');
  return 0;
}

12. V súbore HLAVNY.C uveď úplný funkčný prototyp funkcie vypis_subor().
HLAVNY.C
Spoiler:
Kód:
#include "FCE.C"     /* pridany subor FCE.C

/* deklaracia uplnych funkcnych prototypov */
double vypis_subor(void);

/* funkcia main() */
int main(void)
{
  for (;;) {
  if (vypis_subor() == 2.2)
    return 0;
  }
  putchar('\n');
  return 0;
}

13. Vytvor súbor FCE.H a vlož doňho úplný funkčný prototyp funkcie vypis_subor(). Pomocou #include
zabezpeč spojenie medzi súbormi FCE.H a HLAVNY.C. Vyskúšaj funkčnosť. (projekt)
Príloha:
VypisSuborov.zip [17.48 KiB]
148 krát

14. Vytvor dva súbory A.C a B.C, ktoré budú zdieľať premennú iii. Premenná iii sa v A.C definuje
a inicializuje, v B.C sa vypíše jej hodnota. (Projekt)
Príloha:
iii.zip [11.29 KiB]
153 krát

15. Zmeň predchádzajúci program tak, aby iii bola definovaná ako globálna static premenná
a vyskúšaj chovanie programu. Popíš chovanie.

Kompilátor mi vynadá, pretože statickú premennú z jedného modulu nemôžem použiť v druhom module.

16. Napíš program, ktorý prečíta znak z klávesnice. Ak to bude znak 'd' vtedy prečíta a vypíše celé číslo,
ak to bude 'f', spraví to isté s číslom float.
Premenné, do ktorých bude číslo uložené, definujte až vnútri bloku za if alebo else.
Spoiler:
Kód:
#include <stdio.h>

int main(void)
{
  char c;

  printf("Ak zadas 'd', vypisem cele cislo, ak 'f', vypisem realne cislo: ");
  c = getchar();
  if (c == 'd') {
    int i = 5698457;
    printf("\n%d\n", i);
  }
  else if (c == 'f') {
    float f = 1548.658497;
    printf("\n%f\n", f);
  }
  else
    printf("\nZadal si ine pismeno!\n");
  return 0;
}

17. Dopíš stanovený program: (MAX skús minimálne 100000) tak, že i a j budú najprv globálne int
a potom lokálne register int.
Pokús sa zmerať rýchlosť obidvoch programov a napíš.
Spoiler:
Kód:
#include <stdio.h>

int i, j;

int main(void)
{
//  register int i;
//  register int j;
  int MAX = 100000;

  for (i = 0; i < MAX; i++) {
    for (j = 0; j < MAX; j++) {
      i = i;
      j = j;
    }
  }
  return 0;
}

Tvanie 42.651 sekundy.
Spoiler:
Kód:
#include <stdio.h>

//int i, j;

int main(void)
{
  register int i;
  register int j;
  int MAX = 100000;

  for (i = 0; i < MAX; i++) {
    for (j = 0; j < MAX; j++) {
      i = i;
      j = j;
    }
  }
  return 0;
}

Trvanie 3.562 sekundy.

_________________
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