jazykc  2013.3
upoljazykc
 All Classes Files Functions Variables Typedefs Macros Pages
Classes | Macros | Typedefs | Functions | Variables
studenti.c File Reference
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

Go to the source code of this file.

Classes

struct  Datum
 
struct  Student
 

Macros

#define NAMELEN   20
 
#define STUDENTI_VEK(s1, s2)
 

Typedefs

typedef struct Datum Datum
 
typedef struct Student Student
 

Functions

int student_vypis (Student s)
 
int porovnej_vek (Datum d1, Datum d2)
 
int main (void)
 

Variables

Student stary = {.jmeno="Pepa",.prijmeni="Starý", .narozen={.rok=1921,.mesic=10,.den=11}}
 
Student ascii = {.jmeno="Pepa",.prijmeni="Ascii", .narozen={.rok=1921,.mesic=12,.den=31}}
 

Detailed Description

Strukturované_datové_typy

Katedra informatiky, Univerzity Palackého v_Olomouci

   Studenti ******

Téma: Strukturované datové typy

Procvičované učivo: strukturované datové typy, funkce, větvení

Vytvořte v jazyku C strukturovaný datový typ datum se členy den, mesic a rok.

Poté vytvořte strukturovaný typ student se členy jmeno, prijmeni a narozen. Pro reprezentaci jednotlivých členů struktur zvolte vhodné datové typy.

Dále napište funkci int porovnej_vek(student s1, student s2), která porovná věk (resp. datum narození) daných studentů a vrátí hodnotu -1 v případě, že první student je starší, 1 v případě, že druhý student je starší a 0 v případě shodného data narození u obou studentů.

Podle návratové hodnoty funkce porovnej_vek() pak ve funkci main vypište vhodný text na obrazovku.

Příklad výstupu: Pepa Stary je starsi nez Adam Novak. Povolené knihovny: stdio.h, stdlib.h

Definition in file studenti.c.

Macro Definition Documentation

#define STUDENTI_VEK (   s1,
  s2 
)
Value:
do { int diff=porovnej_vek((s1).narozen,(s2).narozen); printf("%s %s je %s %s %s.\n",\
(s1).jmeno,(s1).prijmeni, diff<0 ? "starší než" : diff ? "mladší než" : "stejně mladý jako", \
(s2).jmeno,(s2).prijmeni); } while(0)
int porovnej_vek(Datum d1, Datum d2)
Definition: studenti.c:66

Definition at line 84 of file studenti.c.

Function Documentation

int porovnej_vek ( Datum  d1,
Datum  d2 
)

porovna dva datumy.

  • pracuje s hodnotou Datum struktury => nelze pouzit pro qsort()
  • nebudeme postupne porovnovavat jednotlive cleny
  • nebudeme pretypovavat na integer – neni zaruka kvuli little/big endian!!!
  • pretypovat muze byt problem kvuli ansi aliasing, bylo by treba pouzit union

Definition at line 66 of file studenti.c.

66  {
67  int diff;
68 //.rok .mesic a .den je si treba predstavit "stovky" "desitky" a "jednotky"
69 //ktere potrebujeme "spocitat",
70 //.den jsou jednotky
71 //.mesic jsou misto desitek dvestepadesatsestky
72 //.rok jsou 65536stky
73 //bitovy posun doleva je totez co nasobeni mocninou 2, tj. neco * 256 == neco << 8
74 //h0nza: udelam priklad do operatoru
75  diff = (d1.rok << 16 + d1.mesic << 8 + d1.den) - (d2.rok << 16 + d2.mesic << 8 + d2.den);
76 //note: dvakrat pouzit ternarni operator ?:
77  return diff < 0 ? -1 : diff ? 1 : 0;
78 }