Tyto stránky již nejsou udržovány. Obsah je postupně přesouván/aktualizován na adrese chytrosti.marrek.cz.

1/1

Zdrojové soubory z výuky

Na této stránce jsou k dispozici zdrojové soubory, které jsem vytvářel při výkladu během výuky. Nejsou to ukázkové a bezchybné zdrojové soubory. Ba naopak, jsou to pracovní neučesané verze, které vznikaly interaktivně ve výuce, často s cílem ukázat, že "takto se to nemá".

20111201-Thu-seznam.c
   1 /*
   2  * Soubor:  20111201-Thu-seznam.c
   3  * Datum:   01.12.2011 09:12
   4  * Autor:   Marek Nožka, nozka <@t> spseol <d.t> cz
   5  * Licence: GNU/GPL 
   6  * Úloha: 
   7  * Popis:   
   8  ****************************************************/
   9 #define _ISOC99_SOURCE
  10 #define _GNU_SOURCE
  11 #include <stdio.h>
  12 #include <stdlib.h>
  13 
  14 
  15 typedef struct bod {
  16     int x;
  17     int y;
  18     struct bod *next;
  19 } BOD;
  20 /****************************************************
  21  *               Hlavní program.
  22  ****************************************************/
  23 int main(void)
  24 {
  25     BOD *prvni;                 // první položka seznamu
  26     BOD *novy;                  // nová položka zeznamu
  27     int bodX, bodY;
  28 
  29     prvni = NULL;
  30 
  31     // zadávám tak dlouho dokud nejsou obě hodnoty 0
  32     while (1) {
  33         printf("zadej X a Y: ");
  34         scanf("%d %d", &bodX, &bodY);
  35         if (bodX == 0 && bodY == 0) {
  36             break;
  37         }
  38         // přídám na zaščátek seznamu
  39         novy = malloc(sizeof(BOD));
  40         novy->x = bodX;
  41         novy->y = bodY;
  42         novy->next = prvni;
  43         prvni = novy;
  44     }
  45     novy = NULL;
  46 
  47     // Vypíšu první položku v seznamu
  48     printf("X: %d, Y: %d\n", prvni->x, (*prvni).y);
  49 
  50     // Vypíšeme všechny položky v seznamu
  51     BOD *pracovni = prvni;
  52     while (1) {
  53         printf("X: %7d, Y: %7d\n", pracovni->x, pracovni->y);
  54         pracovni = pracovni->next;
  55         if (pracovni == NULL) {
  56             break;
  57         }
  58     }
  59     pracovni = NULL;
  60 
  61     // je třeba korektně uvolnit paměť
  62     while (1) {
  63         pracovni = prvni;
  64         prvni = (*prvni).next; // stejné jako prvni->next
  65         free(pracovni);
  66         if (prvni == NULL) {
  67             break;
  68         }
  69     }
  70     prvni = NULL;
  71     pracovni = NULL;
  72 
  73     return 0;
  74 }
`--> stáhnout

Licence Creative Commons Valid XHTML 1.0 Strict Valid CSS! Antispam.er.cz Blog: Tlapicka.net