Wstęp do programowania 1



Podobne dokumenty
Programowanie Proceduralne

Programowanie Proceduralne

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Wykład 1

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Programowanie Proceduralne

PROGRAMOWANIE w C prolog

Język ludzki kod maszynowy

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Instrukcja wyboru, pętle. 2 wykład. Podstawy programowania - Paskal

Grzegorz Cygan. Wstęp do programowania mikrosterowników w języku C

Język C - podstawowe informacje

Wstęp do programowania 1

Programowanie strukturalne i obiektowe

Zadanie 04 Ktory z ponizszych typow danych w jezyku ANSI C jest typem zmiennoprzecinkowym pojedynczej precyzji?

1. Brian W. Kernighan, Dennis M. Ritchie, Język ANSI C, WNT, Warszawa 1998.

Programowanie strukturalne język C - wprowadzenie

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

Języki programowania - podstawy

Języki i metody programowania. Omówienie języków C, C++ i Java

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

Co nie powinno być umieszczane w plikach nagłówkowych:

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>

wykład I uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Wstęp do języka C wykład I dr Jarosław Mederski Spis Ogólne informacje

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Struktury czyli rekordy w C/C++

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego

Wykład 6_1 Abstrakcyjne typy danych stos Realizacja tablicowa i za pomocą rekurencyjnych typów danych

Uzupełnienie dot. przekazywania argumentów

nowe operatory &. (kropka) * operator rzutowy ->, (przecinek) sizeof

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Wykład 7 Abstrakcyjne typy danych słownik (lista symboli)

Microsoft IT Academy kurs programowania

Programowanie I C / C++ laboratorium 03 arytmetyka, operatory

Programowanie obiektowe

Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

2 Przygotował: mgr inż. Maciej Lasota

Struktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem.

ECLIPSE wnioski z dwóch pierwszych laboratoriów

int tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania

( wykł. dr Marek Piasecki )

Programowanie Proceduralne

Tablice, funkcje - wprowadzenie

Podstawy programowania. Wykład 2 Zmienne i obsługa wejścia/wyjścia. Krzysztof Banaś Podstawy programowania 1

Materiały. Języki programowania II (Java+AVR-GCC) Literatura

Podstawy programowania 1

Podstawy programowania. Wykład Co jeszcze... Przypomnienia, uzupełnienia. Krzysztof Banaś Podstawy programowania 1

WYKŁAD 10. Zmienne o złożonej budowie Statyczne i dynamiczne struktury danych: lista, kolejka, stos, drzewo. Programy: c5_1.c, c5_2, c5_3, c5_4, c5_5

ROZDZIAŁ 2. Operatory

Program w C. wer. 10 z drobnymi modyfikacjami! Wojciech Myszka :28:

Programowanie I C / C++ laboratorium 02 Składnia pętli, typy zmiennych, operatory

Funkcja (podprogram) void

Wstęp do programowania

Programowanie strukturalne język C

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

Wykład Struktury i unie Deklarowanie i definiowanie struktur Dostęp do pól struktur Pola bitowe

Wstęp do Programowania 2

Podstawy programowania C. dr. Krystyna Łapin

Dariusz Chaberski. UMK Toruń

Podstawy języka C++ Marek Pudełko

Etap 2 - Budowa interfejsu. typedef struct ELEMENT* stos; struct ELEMENT { dane Dane; stos Nastepny; }; struct kolejka { stos Poczatek, Koniec; };

Programowanie proceduralne INP001210WL rok akademicki 2015/16 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Język ANSI C. Pierwsze starcie. Programowanie Proceduralne 1

Na ekranie monitora zostaną wyświetlone w dwu liniach teksty Pierwsza linia Druga linia

Język ANSI C. Pierwsze starcie. Programowanie Proceduralne 1

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

Wykład X. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2016 Janusz Słupik

Program w C. wer. 12 z drobnymi modyfikacjami! Wojciech Myszka :59:

Stałe, tablice dynamiczne i wielowymiarowe

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

Wskaźniki. Informatyka

Biblioteka standardowa - operacje wejścia/wyjścia

Podstawy programowania w języku C++

Programowanie Procedurale

Szkic wykładu Wstęp do Informatyki - wykład 3,4,5 język C opr. A. Piórkowski, Kraków 2004

Poprzedni wykład [ ] :

Bardzo szybkie podsumowanie: wykład 1 wer. 6 z drobnymi modyfikacjami!

Słowa kluczowe i nazwy

Zmienne, stałe i operatory

Programowanie w języku C++

external Data Representation

Struktury - wprowadzenie

Techniki Programowania

Pobieranie argumentów wiersza polecenia

Podział programu na moduły

Instrukcje sterujące. Programowanie Proceduralne 1

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

dr inż. Jarosław Forenc

#include <iostream.h> #include <conio.h>

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

Wstęp do Programowania, laboratorium 02

Wstęp do Informatyki

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

tablica: dane_liczbowe

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

Programowanie w elektronice: Podstawy C

Transkrypt:

Wstęp do programowania 1 Struktury Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 12

Struktura dla dat - przykład #include <stdio.h> struct Date { int y; short m; short d; ; int main(void) { struct Date sylwek; sylwek.y = 2009; sylwek.m = 5; sylwek.d = 4; printf("%2hd-%2hd-%04d\n", sylwek.d, sylwek.m, sylwek.y); return 0; [bw@wozna w08]$./data 4-5-2009

Instrukcja typedef #include <stdio.h> typedef struct { int y; short m; short d; Date; int main(void) { Date nowyrok; nowyrok.y = 2009; nowyrok.m = 5; nowyrok.d = 4; printf("%2hd-%2hd-%4d\n", nowyrok.d, nowyrok.m, nowyrok.y); return 0;

Instrukcja typedef #include <stdio.h> typedef struct { int y; short m; short d; Date; int main(void) { Date sylwek = {2005, 12, 31; printf("%02hd-%02hd-%04d\n", sylwek.d, sylwek.m, sylwek.y); return 0;

Operator wyboru składowej #include <stdio.h> #include <stdlib.h> typedef struct { int y; short m; short d; Date; int main(void) { Date* sylwek = calloc(1, sizeof(date)); // *sylwek.y = 2009; niepoprawne (*sylwek).y = 2009; poprawne sylwek->y = 2009; sylwek->m = 5; sylwek->d = 4; printf("%02hd-%2hd-%4d\n", sylwek->d, sylwek->m, sylwek->y); free(sylwek); return 0;

Program 1 #include <stdio.h> typedef struct { int y; short m; short d; Date; void init(date* date, int y, int m, int d); void show(date date); int main(void) { Date sylwek; init(&sylwek, 2006, 12, 7); show(sylwek); return 0;

Program 1 void init(date* date, int y, int m, int d) { date->y = y; date->m = m; date->d = d; void show(date date) { printf("%02hd-%02hd-%4d\n", date.d, date.m, date.y);

Program 2 #include <stdio.h> #include <stdlib.h> typedef struct { int y; short m; short d; Date; void init(date* date, int y, int m, int d); void show(date date); int main(void) { Date* sylwek = calloc(1, sizeof(date)); init(sylwek, 2006, 12, 7); show(*sylwek); return 0;

Program 2 void init(date* date, int y, int m, int d) { date->y = y; // (*date).y=y; date->m = m; date->d = d; void show(date date) { printf("%02hd-%02hd-%4d\n", date.d, date.m, date.y);

Program 1 #include <stdio.h> typedef struct { int y; short m; short d; Date; #define MAX_LEN 32 typedef struct { char name[max_len]; Date birthday; Person; void showdate(date const* date); void showperson(person const* person); int main(void) { Person ms = {"Jan Kowalski", {1987, 4, 19; showperson(&ms); return 0;

Program 1 void showperson(person const* person) { printf("%s ", person->name); showdate(&person->birthday); void showdate(date const* date) { printf("%02hd-%02hd-%04d\n", date->d, date->m, date->y);

Program 2 #include <stdio.h> #include <string.h> typedef struct { int y; short m; short d; Date; #define MAX_LEN 32 typedef struct { char name[max_len]; Date birthday; Person; void initdate(date* date, int y, int m, int d); void showdate(date const* date); void initperson(person*, char* name, int y, int m, int d); void showperson(person const* person);

Program 2 void initdate(date* date, int y, int m, int d) { date->y = y; date->m = m; date->d = d; void showdate(date const* date) { printf("%02hd-%02hd-%04d\n", date->d, date->m, date->y); void showperson(person const* person) { printf("%s ", person->name); showdate(&person->birthday); void initperson(person* person, char* name, int y, int m, int d) { strncpy(person->name, name, MAX_LEN); person->name[max_len - 1] = \0 ; initdate(&person->birthday, y, m, d);

Program 2 int main(int) { Person ms; initperson(&ms, "Maria Sharapova", 1987, 4, 19); showperson(&ms); return 0;

Program 1 #include <stdio.h> #include <string.h> #include <ctype.h> typedef struct { char* word; int count; Key; Key keytab[] = { {"auto", 0, {"break", 0, {"case", 0, {"char", 0, {"const", 0, {"continue", 0, {"default", 0, {"do", 0, {"double", 0, {"else", 0, {"enum", 0, {"extern", 0, {"float", 0, {"for", 0, {"goto", 0, {"if", 0, {"int", 0, {"long", 0, {"register", 0, {"return", 0, {"short", 0, {"signed", 0, {"sizeof", 0, {"static", 0, {"struct", 0, {"switch", 0, {"typedef", 0, {"union", 0, {"unsigned", 0, {"void", 0, {"volatile", 0, {"while", 0 ; int getword(char*, int); int binsearch(key const*, char const*, int); #define MAXWORD 100

Program 1 int getword(char* word, int lim) { char* w = word; int c; while (isspace(c = getc(stdin))) { if (c!= EOF) { *w++ = c; if (!isalpha(c)) { *w = \0 ; return c; for (; --lim > 0; ++w) { if (!isalnum(*w = getc(stdin))) { ungetc(*w, stdin); break; *w = \0 ; return 0;

Program 1 int binsearch(key const* tab, char const* word, int n) { int left = 0, right = n - 1; while (left <= right) { int mid = (left + right) / 2; int cond = strcmp(word, tab[mid].word); if (cond < 0) { right = mid - 1; else if (cond > 0) { left = mid + 1; else { return mid; return -1;

Program 1 int main(void) { int n; char word[maxword]; int const nkeys = sizeof(keytab) / sizeof(keytab[0]); while (getword(word, MAXWORD)!= EOF) { if (isalpha(word[0])) { if ((n = binsearch(keytab, word, nkeys)) >= 0) { ++keytab[n].count; // ++*(keytab + n).count; for (n = 0; n < nkeys; ++n) { if (keytab[n].count > 0) printf("%4d %s\n", keytab[n].count, keytab[n].word); printf("\n"); return 0;

Definicja Unia (ang. union) jest typem, który pozwala przechowywać różne rodzaje danych w tym samym obszarze pamięci (ale nie równocześnie). Dzięki uniom można na przykład utworzyć tablice jednostek o jednakowej długości, z których każda może przechowywać dane innego typu. Definicja unii jest analogiczna do definicji struktury, z wyjatkiem tego, że stosowane jest słowo kluczowe union. Kompilator przydziela tyle miejsca dla unii, aby mogła ona przechowywać największa ze zmiennych będac a częścia szablonu unii.

Przyklady union magazyn { int cyfra; double l_rzeczywista; char znak; ; Trzy unie typu magazyn /*unia typu magazyn */ union magazyn a; /*tablica 10 unii typu magazyn */ union magazyn tab[10]; /* wskaźnik do unii typu magazyn */ union magazyn *wu;

Przyklady Rozmiary unii #include <stdio.h> #include <stdlib.h> union magazyn { int cyfra; double l_rzeczywista; char znak; ; int main(void) { system("clear"); union magazyn a; printf("union magazyn a: %ld bajtow \n", sizeof(a)); union magazyn tab[10]; printf("union magazyn tab[10]: %ld bajtow \n", sizeof(tab)); union magazyn *wu; printf("union magazyn *wu: %ld bajtow \n",sizeof(wu)); return 0;

Przyklady Wykonanie union magazyn a: 8 bajtow union magazyn tab[10]: 80 bajtow union magazyn *wu: 8 bajtow

Inicjalizacja Unie moga być inicjalizowane, ale zasady sa nieco inne niż w przypadku struktur. Istnieja dwie możliwości: nadanie unii wartości innej unii tego samego typu lub inicjalizacja pierwszego składnika unii. Pamiętanie o tym, jaki rodzaj informacji znajduje się w unii w każdym momencie, jest obowiazkem programisty. Dostęp do składowych unii odbywa sie w taki sam sposób jak w strukturach, czyli za pomoca operatora przynależności (kropki,.) lub operatora przynależności pośredniej (strzałki, >).

Inicjalizacja #include <stdio.h> #include <stdlib.h> union magazyn { int cyfra; double l_rzeczywista; char znak; ; void druk(const union magazyn); int main(void) { system("clear"); union magazyn a; a.znak = A ; union magazyn b=a; union magazyn c={777; puts("a: "); druk(a); puts("b: "); druk(b); puts("c: "); druk(c); union magazyn d = { znak : D ; puts("d: "); druk(d); return 0; void druk(const union magazyn a) { printf("[%d -- %lf -- %c] \n", a.cyfra, a.l_rzeczywista, a.znak);

Inicjalizacja Wykonanie a: [-974036927 -- 0.000000 -- A] b: [-974036927 -- 0.000000 -- A] c: [777 -- 0.000000 -- ] d: [68 -- 0.000000 -- D]

Inicjalizacja unia.c #include <stdio.h> #include <stdlib.h> union Test { int i; float f; ; int main(void) { system("clear"); union Test t; printf("union Test {\n int i;\n float f;\n;\n\n"); printf("union Test t;\n\n"); printf("rozmiar unii t = %ld bajty\n\n", sizeof(t)); printf("po przypisaniu wartosci 1024.0 do pola f\n"); t.f = 1024.0; printf("pole i = %d\tpole f = %f\n\n", t.i, t.f); t.i = 1234567890; printf("po przypisaniu wartosci 1234567890 do pola i\n"); printf("pole i = %d\tpole f = %f\n\n", t.i, t.f); return 0;

Inicjalizacja Wykonanie union Test { int i; float f; ; union Test t; Rozmiar unii t = 4 bajty Po przypisaniu wartosci 1024.0 do pola f Pole i = 1149239296 Pole f = 1024.000000 Po przypisaniu wartosci 1234567890 do pola i Pole i = 1234567890 Pole f = 1228890.250000

Struktury a unie, enum #include <stdio.h> #include <stdlib.h> enum symboltype {INT, DOUBLE, CHAR; union Data {int i; double d; char c;; struct TableEntry { char *name; enum symboltype type; union Data data; ; int main(void) { struct TableEntry symtab[] = { {"ch", CHAR, {c : @, {"counter", INT, {i : 0, {"pi", DOUBLE, {d : 3.1417, {"x", 5, {8 ; int size = sizeof(symtab) / sizeof(struct TableEntry); for (int k = 0; k < size; ++k) { printf("%s\t\t", symtab[k].name); switch (symtab[k].type) { case CHAR: printf("%c\n", symtab[k].data.c); break; case DOUBLE: printf("%f\n", symtab[k].data.d); break; case INT: printf("%d\n", symtab[k].data.i); break; default: printf("nieznany typ (%d), element %d\n", symtab[k].type, k); break; return 0;

Struktury a unie, enum Wykonanie ch @ counter 0 pi 3.141700 x Nieznany typ (5), element 3