Programowanie Proceduralne

Podobne dokumenty
Wstęp do programowania 1

Pobieranie argumentów wiersza polecenia

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

Wykład 1

Wstęp do programowania 1

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

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

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

Programowanie Proceduralne

Programowanie Proceduralne

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

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

Języki programowania - podstawy

PROGRAMOWANIE w C prolog

Programowanie strukturalne i obiektowe

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

Uzupełnienie dot. przekazywania argumentów

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

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

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

Programowanie strukturalne język C - wprowadzenie

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

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

Język C - podstawowe informacje

Język ludzki kod maszynowy

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

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

Struktury czyli rekordy w C/C++

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

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

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

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

Programowanie Proceduralne

Tablice, funkcje - wprowadzenie

dynamiczny przydział pamięci calloc() memset() memcpy( ) (wskaźniki!! )

Funkcja (podprogram) void

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

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

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Programowanie obiektowe

Argumenty wywołania programu, operacje na plikach

Języki i metodyka programowania. Wprowadzenie do języka C

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

ECLIPSE wnioski z dwóch pierwszych laboratoriów

Czy procesor musi się grzać?

Programowanie Procedurale

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

Programowanie strukturalne język C

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

3. Identyfikacja. SKŁADNIA #include <sys/socket.h> int getpeername(int socket, struct sockaddr *addr, int *addrlen);

2 Przygotował: mgr inż. Maciej Lasota

Tablice wielowymiarowe. Przykład tablica 2-wymiarowa. Przykład. Przykład 3-wymiarowy. Tak naprawdę nie istnieją w C! Rozważmy tablicę o rozmiarze 3x2

Podział programu na moduły

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

Część 4 życie programu

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

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

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

Materiał uzupełniający do ćwiczen z przedmiotu: Programowanie w C ++ - ćwiczenia na wskaźnikach

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

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

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.

۰ Elementem jednostkowym takiego pliku jest bajt. ۰ Format pliku binarnego: [bajty pliku][eof]

Programowanie Procedurale. Pliki w języku C++

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

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

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

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

Podstawy programowania w języku C++

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

tablica: dane_liczbowe

Microsoft IT Academy kurs programowania

Podstawy Kompilatorów

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO

Wskaźniki. Programowanie Proceduralne 1

Poprzedni wykład [ ] :

Sieciowa komunikacja procesów - XDR i RPC

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

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

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

4. Tablica dwuwymiarowa to jednowymiarowa tablica wskaźników do jednowymiarowych tablic danego typu.

Podstawy programowania 1

DANE TEKSTOWE W JĘZYKU C/C++ - TABLICE ZNAKOWE

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 9 - sem.iii. Dr inż. M. Czyżak

Który ciąg instrukcji nada zmiennej n wartość równą ilości liczb w pliku binarnym skojarzonym ze strumieniem fp? Wymierz odpowiedź

Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi.

Wskaźniki. Informatyka

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

Wstęp do Programowania, laboratorium 02

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

Projektowanie klas c.d. Projektowanie klas przykład

Dariusz Chaberski. UMK Toruń

Języki i paradygmaty programowania 1 studia stacjonarne 2018/19

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

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

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 7- sem.iii. M. Czyżak

Wstęp do Programowania 2

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

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

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Transkrypt:

Programowanie Proceduralne Struktury Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 10

Co dziś będzie: Definiowanie struktury Deklarowanie zmiennych bȩda cych strukturami Operator wyboru składowej Definiowanie struktury i nadawanie nazwy typu przy pomocy instrukcji typedef Deklarowanie zmiennych bȩda cych strukturami poła czone z inicjalizacja Wskaźniki do struktur

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;

Do przetwarzania argumentów (parsowania) linii poleceń służy funkcja getopt_long(), która korzysta zarówno z krótkich, jak i długich opcji. Jej prototyp znajduje się w pliku getopt.h: #define _GNU_SOURCE int getopt_long(int argc, const char *argv[], const char *shoropts, const struct option *longopts, int *longindex); argc - to liczba określajaca ilość argumentów listy, argv - jest tablica wskaźników do zaków o rozmiarze argc. Elementy tej tablicy wskazuja elementy listy argumentów, shortopts - wskaźnik na łańcuch znaków zawierajacy poprawne krótkie opcje (wszystkie jednoliterowe); po opcji wymagajacej argumentu występuje dwukropek, longopts jest to wskaźnik na tablicę specjalnych struktur struct option przechowujacej długie opcje.

Struktura struct option sturct option { const char *nazwa; int ma_argument; int *flagi; int zwroc; Aby określić dostępne długie opcje, musimy skonstruować tablicę elementów takich struktur jak powyżej. Każdy taki element odpowiada jednej długiej opcji i ma cztery pola. nazwa jest nazwa długiej opcjii (łanńcuch znaków pozbawiony 2 myślników, tj. help, a nie help). Drugie pole ma wartość 1 jeżeli opcja pobiera argument, 0 w przeciwnym wypadku. Trzecie pole ma wartość NULL, a czwarte to stała znakowa określajaca krótka opcję powiazaną z długa. Ostatni element tablicy powinien być wypełniony samymi zerami (jest to tzw. terminator ).

Program 2 #include <stdio.h> #include <stdlib.h> #include <getopt.h> void print_usage (char const* program_name, int exit_code) { printf("usage: %s options [ inputfile... ]\n", program_name); printf(" -h --help Display this usage information.\n"); printf(" -o --output filename Write output to file.\n"); printf(" -v --verbose Print verbose messages.\n"); exit (exit_code);

Program 2 int main (int argc, char* argv[]) { const char* const short_opts = "ho:v"; const struct option long_opts[] = { {"help", 0, NULL, h, {"output", 1, NULL, o, {"verbose", 0, NULL, v, {NULL, 0, NULL, 0 ; const char* output_filename = NULL; int verbose = 0, next_option; do { next_option = getopt_long(argc,argv,short_opts,long_opts,null); switch (next_option) { case h : print_usage (argv[0], 0); case o : output_filename = optarg; break; case v : verbose = 1; break; case? : print_usage(argv[0], 1); case -1: break; default: abort(); // switch while (next_option!= -1); if (verbose){ for (int i = optind; i < argc; ++i) printf ("Argument: %s\n", argv[i]); // Tu program główny return 0;