Š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:30

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: 30 Aug 2012, 16:56 
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. Zisti veľkosť všetkých základných dátových typov (int, float, ...) v bajtoch.
Spoiler:
Kód:
/***********************************************
 *
 * 1.c        ver. 2.0
 * popis je vyššie
 * ===========================================
 *
 * libcosenior,     august 2012
 *
 ***********************************************/

#include <stdio.h>

/* funkcia main() */
int main(void)
{
 /*********************************************************
  * Zakladne datove typy su 4: char, int, float a double. *
  * Je vsak mozna ich modifikacia za pomoci modifikatorov:*
  * short, long alebo unsigned.                           *
  * Napr.: short int, long double, unsigned char          *
  *********************************************************/
  printf("Velkosti zakladnych datovych typov v bajtoch:\n\n"
         "char\t= %d\n"
         "int\t= %d\n"
         "float\t= %d\n"
         "double\t= %d\n",
         sizeof(char), sizeof(int), sizeof(float), sizeof(double));
  return 0;
}

2. Napíš funkciu int set(char a, char *p_a) s jedným vstupným a druhým výstupným parametrom. Funkcia ako svoju návratovú hodnotu vracia 1, ak bolo vo vstupnom parametre písmeno a 0 v ostatných prípadoch. Do výstupného parametru uloží funkcia opačný typ písmena (veľké prevedie na malé a naopak), ak bol vstupný znak písmeno, alebo ho nezmení, ak znak nebol písmeno.
Otestuj v programe. Vo funkcii main() bude výpis znaku z výstupného parametru funkcie set() na základe vyhodnotenia jej výstupnej hodnoty za pomoci if-else.
Celý program náležite okomentuj.
Spoiler:
Kód:
/***********************************************
 *
 * 2.c        ver. 2.0
 * popis je vyssie
 * ===========================================
 *
 * libcosenior,     august 2012
 *
 ***********************************************/

#include <stdio.h>
#include <ctype.h> // pouzitie makier na zistenie typu znakov a ich konverziu

/* vo funkcii je typ návratovej hodnoty int, vstupný parameter je char a, výstupný parameter
   je volanie odkazom char *p_a */
int set(char a, char *p_a)
{
   *p_a = islower(a) ? toupper(a) : isupper(a) ? tolower(a) : a; // priradenie hodnoty pointeru
   return (isalpha(a) ? 1 : 0); // navratova hodnota funkcie
}

int main(void)
{
  char c, *p_c = &c; /* definicia premennej c, definicia pointeru p_c a jeho sucasna
                        inicializacia adresou premennej c */

  printf("Zadaj jeden znak z klavesnice a stlac Enter:  ");
  c = getchar();
  printf("\nZadal si znak %c, ", c);
  /* vyhodnotenie navratovej hodnoty funkcie */
  if (set(c, &c) == 1)
    printf("je to pismeno a jeho opacny typ je %c.\n", *p_c); // vypis hodnoty z pointeru
  else
    printf("nie je to pismeno.\n");
  return 0;
}

3. Napíš funkciu long citaj_znak(FILE *fr, int *p_c), ktorá prečíta jeden znak zo súboru TEST.TXT a vráti ho pomocou druhého parametru. Návratovou hodnotou funkcie bude počet volaní tejto funkcie (využitie lokálnej statickej premennej). Hlavný program vypíše pomocou tejto funkcie súbor a nakoniec aj počet prečítaných znakov.
Spoiler:
Kód:
/***********************************************
 *
 * 3.c        ver. 2.0
 * popis je vyssie
 * ===========================================
 *
 * libcosenior,     august 2012
 *
 ***********************************************/

#include <stdio.h>

/* funkcia precita jeden znak zo suboru a vrati ho pomocou druheho parametru
   navratovou hodnotou je pocet volani dunkcie */
long citaj_znak(FILE *fr, int *p_c)
{
  static long a = 0; // lokalna staticka premenna, zvysuje sa pri kazdom pouziti funkcie
                     // riadkom (return a++;)

  *p_c = getc(fr); // priradenie precitaneho znaku do pointeru
  return a++; // navratova hodnota = pocet volani funkcie
}

int main(void)
{
  FILE *fr;
  int i, *p_i = &i; /* definicia premennej i, definicia pointeru p_i a jeho sucasna
                       inicializacia adresou premennej c */

  if ((fr = fopen("TEST.TXT", "r")) == NULL) {
    printf("Subor sa nepodarilo otvorit.\n");
    return 0;
  }
  do {
    citaj_znak(fr, &i);
    printf("%c", *p_i);
  } while (*p_i != EOF);
  printf("\n\nSubor TEST.TXT ma %d znakov.\n",
         (citaj_znak(fr, &i)));
  fclose(fr);
  return 0;
}

4. Napíš funkciu, ktoré usporiada hodnoty 3 premenných int a, b, c tak, aby po skončení kódu funkcie platilo a <= b <= c. Uvedené premenné budú definované vo funkcii main. Vstupné parametre funkcie budú adresy tých premenných. Hodnoty premenných budú zadané z klávesnice (main) a výpis bude vyzerať nejak takto:
vstup: a = 5, b = 58, c = 3
výstup: a = 3, b = 5, c = 58
Spoiler:
Kód:
/***********************************************
 *
 * 4.c        ver. 2.0
 * popis je vyssie
 * ===========================================
 *
 * libcosenior,     august 2012
 *
 ***********************************************/

#include <stdio.h>

/* funkcia usporiada tri hodnoty od najmensej po najvacsiu */
void poradie(int *p_a, int *p_b, int *p_c)
{
  int i = *p_a, j = *p_b, k = *p_c; // vlozenie hodnot z pointerov do pomocnych premennych
                                    // aby bol zapis terarnych operatorov prehladnejsi

  *p_a = i < j && i < k ? i : j < k ? j : k; // najmensie
  *p_c = i > j && i > k ? i : j > k ? j : k; // najvacsie
  *p_b = i != *p_a && i != *p_c ? i : j != *p_a && j != *p_c ? j : k; //stredne
}

int main(void)
{
  int a, b, c, *p_a = &a, *p_b = &b, *p_c = &c; /* definicia premennych, definicia pointerov
                                                   a ich sucasna inicializacia adresami premennych */

  printf("Zadaj tri rozdielne cele cisla, zoradim ich od najmensieho po najvacsie.\n");
  scanf("%d%d%d", &a, &b, &c);
  printf("vstup: a = %d, b = %d, c = %d\n", a, b, c);
  poradie(&a, &b, &c);
  printf("vstup: a = %d, b = %d, c = %d\n", *p_a, *p_b, *p_c);
  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