Politechnika Wrocławska, Wydział Informatyki i Telekomunikacji, Kierunek Informatyka Techniczna, 1 rok studiów, sem. zimowy 2023/2024

"PODSTAWY PROGRAMOWANIA"
 Kurs: INEW17001  /  WYKŁAD  '2023/24

Termin:  Poniedziałki godz.15:15-16:55  (USOS: W04ITE-SI0037G)
Miejsce:  sala 205/C1
Prowadzący:  dr Marek Piasecki
Konsultacje:  http://marek.piasecki.staff.iiar.pwr.wroc.pl/dydaktyka/ogloszenia
ePortal:    W04ITE-SI0037G # W # Podstawy programowania - Wykład
  Wykład Ćwiczenia Laboratorium
Liczba godzin / sem. (h) : 30 15 15
ECTS : 4
CNPS (h) : 40 40  40
Karta opisu przedmiotu : INEW17001
  • Zasady zaliczenia kursu obowiązujące semestrze zimowym 2023/24
       

  • Kolokwia zaliczeniowe dla kierunku INFORMATYKA
      I.   4  grudnia  2023

    - przykładowe zadania 1 (na pierwszy sprawdzian),

     II.  29 stycznia 2024
    - przykładowe zadania 2 (na sprawdzian końcowy)
    Pierwsza grupa - godz. 15:15-16:00  -  osoby o nazwiskach na literę A - Me
         Druga grupa - godz. 16:10-16:55  -  osoby o nazwiskach na literę Mi - Z

    III.  6  lutego 2024
    - termin poprawkowy  (sala wykładowa 23/C3, godz. 15:00-16:30)
       
    (dla osób które nie pisały kolokwium, nie zaliczyły, lub chcą poprawić ocenę)



Materiały do wykładu '2023/24:  Podstawy programowania (z przykładami w języku C i C++) 

Rekomendowane darmowe podręczniki elektroniczne / Wikibooks (w języku Angielskim, Polskim i kilku innych)
  - C programming [EN]    lub  Język C [PL]        ( lub wersja do wydruku   C   PDF )
  - C++ programming [EN]   lub  Język C++ [PL]   ( lub wersja do wydruku C++ PDF ) 

Podręczniki interaktywne   ( + examples + "Try it yourself" )
  - W3schools  "C Tutorial
  -
W3schools  "C++ Tutorial

   

  1. Wprowadzenie: Algorytmiczne języki programowania. Program komputerowy i proces jego opracowywania.
    Struktura programu źródłowego w C/C++. Przykłady prostych programów.
    Podstawowe typy całkowite i rzeczywiste . Definiowanie i inicjacja zmiennych prostych.
    Operatory i wyrażenia: Operator przypisania. Operatory i wyrażenia arytmetyczne.
    Operatory przypisania arytmetycznego, inkrementacji i dekrementacji. Operatory relacji, wyrażenia logiczne.
    slajdy do wykładu: ( W1.PDF
    wiki:  programming paradigms ,  comparison of programming languages ,    /  C++  standards,  

       

  2. Podstawowe operacje wejścia i wyjścia:  Podejście proceduralne - funkcje standardowe scanf i printf.
    Podejście obiektowe - strumienie standardowe cin, cout, operatory pobierania i wstawiania do strumienia.
    Sterowanie wykonaniem programu. Instrukcje warunkowe if, if-else, konstrukcja else-if.
    Zagniezdżanie instrukcji if. Instrukcja switch.
    slajdy do wykładu: W2.PDF )
                                    ( Dodatkowe przykłady ilustrujące if/else )
     
    Materiały pomocnicze:
      - Wikibooks/Język C: Podstawowe procedury wejścia/wyjścia
      - 
    dokumentacja online funkcji printf oraz scanf  (ze strony www.cplusplus.com)
      - Wikibooks/Język C: Instrukcje sterujące

    Do przeczytania:
    - Wikipedia  Programowanie strukturalne
    - C Programming / Program flow control 
      "Last thing: goto"
       (ilustracja jak wyglądałoby programowanie bez strukturalnych instrukcji if-else oraz instrukcji pętli)
    - Programowanie niskopoziomowe / asembler (dr Tomasz Kapela, kurs na Uniwersytecie Jagielońskim)
       (ilustracja jak wygląda programowanie w kodzie maszynowym, z instrukcjami: jmp, jz , jnz , loop, . . .)
       
       

  3. Instrukcje iteracyjne: while, do-while, for. Badanie warunku zakończenia pętli.
    Pętle zagnieżdżone. Instrukcje break i continue.
    Przykłady programów z wykorzystaniem w/w instrukcji.
    slajdy do wykładu: (
    W3.PDF )

    Materiały pomocnicze dla instrukcji sterujących w C++ - Kurs MIT "Introduction to C++" / Lecture notes:
      -  "1. Introduction" ,
      -  "3. Flow of control"

    Przykłady: w3resource: C++ Loops [87 ćwiczeń z rozwiązaniami]

         
    Inne wskazówki: oprogramowanie pozycji/koloru wydruków w konsoli:
    console colorgotoxyclrscr
       
       
  4. Tablice w języku C - deklaracja i inicjalizacja - dostęp do elementów za pomocą operatora indeksu.
    Operacje na tablicach z wykorzystaniem pętli for. Tablice wielowymiarowe.
    slajdy do wykładu: ( W4.PDF )
       
    Materiały pomocnicze:
      - wikiBook: C Programming / Arrays
      -
    Kurs MIT - Lecture 4 notes: Arrays and Strings
      - przykłady zadań: w3resource: C++ Array [29 ćwiczeń z rozwiązaniami w języku C++] 

    Dla zaawansowanych:
    Do przeczytania i przemyślenia:
    Why aren't  "variable-length"  arrays part of the C++ standard?,
    tzn. dyskusja
    dlaczego są problemy z konstrukcją dopuszczoną w wersji C99:
       int rozmiar;  
       double tablica[rozmiar];

    zwłaszcza jak ktoś próbuje w dlaszej części programu modyfikować zmienną  "rozmiar":
    np.  scanf("%d", &rozmiar);     lub     rozmiar = rozmiar+1;

    + artykuł  "Legitimate Use of Variable Length Arrays" by Chris Wellons
       " . . . In general, VLAs not useful. They’re time bombs. VLAs are nearly always the wrong choice . . . "   
          
       
  5. Wskaźniki: Wskaźniki zmiennych i ich adresy, arytmetyka wskaźników.
    Związek pomiędzy wskaźnikami a tablicami. Praca z tablicami w zapisie wskaźnikowym.
    slajdy do wykładu: ( W5.PDF )

    Materiały uzupełniające:
     -  Wikibooks/Język C: Wskaźniki
     -  MIT: Lecture 5 notes
    Pointers
     -  guru99: Pointers in C Programming: What is Pointer, Types & Examples 
     -  tutorialspoint: C - Pointers (Pointer arithmetic, Array of pointers, Pointer to pointer, Passing pointers to functions)
     -  programiz: C Pointers (with examples)
     -  programiz: Relationship Between Arrays and Pointers

       
  6. Funkcje: pojęcie funkcji. Deklaracja i definicja funkcji. Prototyp funkcji.
    Zwracanie wartości funkcji. Przekazywanie parametrów przez wartość.
    Parametry funkcji: przekazywanie parametrów funkcji przez: wartość, adres, referencję.
    Zwracanie jednej i wielu wartości. Przekazywanie zmiennych prostych, tablic, łańcuchów.
    Funkcje operujące na pamięci: memset, memcpy, memcmp, memmove, itp. (z biblioteki <string.h>)
    slajdy do wykładu: ( 
    W6.PDF )
                                   (
    Dodatkowe przykłady tworzenia funkcji z argumentami
       

    Materiały uzupełniające:
      - Wikibooks/Język C - Funkcje
      - w3schools - C++ Functions  tutorial  
      - cplusplus - Functions  tutorial
      - MIT course - Lecture 3 notes: 
    Functions
       
       
  7. Teksty - tablice znakowe w języku C  (C-string).
    Standardowe funkcje łańcuchowe z biblioteki <string.h> (strcpy, strcmp, strcat, strlen, itd.)
    Przykłady przetwarzania danych tekstowych (operacje na łańcuchach znaków).
    slajdy do wykładu: ( W7.PDF )
      - przykłady_1: Dodatkowe przykłady funkcji przetwarzających teksty 
      - przykłady_2: String User Defined Functions in C language
          

    Materiały uzupełniające:
      - Wikibooks/Język C - PL: Napisy   (EN: String manipulation)
      - guru99: Strings in C: How to Declare Variable, Initialize, Print, Examples
      - cplusplus: Null-terminated character sequences  tutorial

       
  8. Dynamiczne przydzielanie pamięci (malloc, calloc, realloc, free / new, delete)
    Tworzenie tablic i łańcuchów o zadawanej wielkości.
    slajdy do wykładu: ( W8.PDF )
    Porównanie: tablicy statycznej, tablicy quazi-dynamicznej (z ograniczeniem rozmiaru) i tablicy dynamicznej

    Materiały uzupełniające:
      - BinaryUpdates: Dynamic Memory Allocation in C Programming

      - Design&Reuse: Dynamic Memory Allocation and Fragmentation in C and C++
      - Guru99: Dynamic Memory Allocation in C using malloc(), calloc() Functions ,
      - GeeksForGeeks: Dynamic Memory Allocation in C using malloc(), calloc(), free() and realloc()
      - cplusplus: Dynamic memory  tutorial

      - Guru99:  C++ Dynamic Allocation of Arrays with Example ,  
                     :  Stack vs Heap: Know the Difference
          
       
  9. Typ strukturalny. Definicje nowych typów. Deklaracja i inicjalizacja zmiennych strukturalnych.
    Zagnieżdżanie struktur.Rozszerzenie struktury o metody składowe. Atrybuty dostępu.
    slajdy do wykładu: ( W9.PDF )
                                    ( Dodatkowe przykłady przetwarzania tablic struktur )      

    Materiały uzupełniające:
      - cplusplus: Data structures
      - tutorialspoint: C - Structures
      - programiz: C struct
      - guru99: What is a Struct in C++
      - guru99: Difference between Structure and Class: Explained with C++ Example
       
       
  10. Obsługa plików zewnętrznych. Pliki tekstowe i binarne.Podejście proceduralne: Standardowe funkcje do obsługi plików z biblioteki <stdio.h>. Wejście i wyjście dla znaków, łańcuchów i danych formatowanych. Wejście i wyjście blokowe (binarne).
    slajdy do wykładu: ( W10.PDF )
                                  ( Dodatkowe przykłady przetwarzania plików tekstowych i binarnych )

    Materiały uzupełniające:
      - WikiBooks - C Programming/Stream IO
      - programiz:  C Files Input/Output  +  C Files Examples
      - guru99: C File management
      - tutorialspoint:  C - file I/O
      - codingeek: Files in C Programming Language: Introduction and Various File Modes
        +  File operations  +  Examples and explanation of fgets, fputs, fprintf, fscanf, fread, fwrite
        +  Text Files vs Binary Files

       
       
       
  11. . . .   (kolejne materiały będą zamieszczane sukcesywnie, w miarę postępu wykładów)
       
       
       
       
       


   


ARCHIWUM '2022  (materiały z poprzedniej edycji kursu)
  1. Inne możliwości oprogramowania operacji plikowcyh (dla porównania): Obsługa plików zewnętrznych - Podejście obiektowe: Klasa fstream. Podstawowe metody i operatory.
    slajdy do wykładu:
    ( W10b.PDF )
    cplusplus:
    C++ input/output with files   
  2. Wskaźniki a tablice wielowymiarowe. Tablice wskaźników, wskaźniki na tablice.
    Wskaźniki na funkcje. Funkcja qsort.
    Porównanie różnych kombinacji / zastosowań wskaźników.

    slajdy do wykładu: ( W11.PDF )

  3. Złożone struktury danych:
    a) dynamiczna tablica tablic,
    b) tablica wskaźników na dynamiczne tablice / łańcuchy,
    c) dynamiczna tablica wskaźników na dynamiczne tablice / łańcuchy.
       
       


Literatura:

Jerzy Grębosz          “Symfonia C++”

Robert Lafore              “Programowanie w języku C przy użyciu Turbo C++”

Andrzej Zalewski         “Programowanie w językach C i C++ z wykorzystaniem pakietu Borland C++”
Kris Jamsa                 “Wygraj z C++”
----------------------------------------------
Bjarne Stroustrup     “Język C++ “
Robert Sedgewick    “Algorytmy w C ++ “
----------------------------------------------
Brian Kernigham, Dennis Ritchie   “Język ANSI C“

 


Zagadnienia do opracowania na laboratorium:

- Poznanie wybranego środowiska programistycznego
   (Falcon C++, Microsoft Visual Studio, Visual Studio Code, CLion, Dev-C++ , CodeBlock,)
- Pisanie i uruchamianie programów konsolowych z użyciem:
       a) zmiennych prostych oraz instrukcji warunkowych
       b) pętli i tablic (zapis indeksowy)
       c) definiowanie funkcji oraz przekazywanie parametrów,
       d) przetwarzanie łańcuchów (zapis indeksowy i wskaźnikowy),
       e) tablic struktur - wczytywanie, wyświetlanie, wyszukiwanie, obliczenia
       g) składowanie danych w pliku dyskowym (tekst oraz binarnie)
       h) dynamicznej alokacji pamięci, dynamicznych struktur danych


Przykładowy program laboratorium/ćwiczeń