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

"PODSTAWY PROGRAMOWANIA"
 Kurs: W04ITE-SI0037G  /  WYKŁAD  '2024/25

Termin:  Wtorki 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 : W04ITE-SI0037G
  • Zasady zaliczenia kursu obowiązujące semestrze zimowym 2024/25
       
  • Kolokwia zaliczeniowe dla kierunku INFORMATYKA
     I.    3 grudnia 2024
    - przykładowe zadania 1 (na pierwszy sprawdzian)
    Pierwsza grupa - godz. 15:15-16:00  -  osoby o nazwiskach na literę A - L
         Druga grupa - godz. 16:10-16:55  -  osoby o nazwiskach na literę M - Z
      
     II.  28 stycznia 2025
    - przykładowe zadania 2 (na sprawdzian końcowy)
      
    III.  5-7  lutego 2025
    - termin poprawkowy 
       (dla osób które nie pisały kolokwium, nie zaliczyły, lub chcą poprawić ocenę)


Materiały do wykładu '2024/25:  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 inicjalizacja 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:
      - paradygmat programowania / programming paradigms,
      - programowanie strukturalne oraz proceduralne,
      - comparison of programming languages ,    /  C++  standards,  
         
      
  2. Podstawowe operacje wejścia i wyjścia:  Podejście proceduralne - funkcje standardowe scanf i printf. 
    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 - 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. . . .   ( kolejne materiały będą zamieszczane sukcesywnie, w miarę postępu wykładów )



   
   


   


ARCHIWUM '2023  (materiały z poprzedniej edycji kursu)

  1. 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

       
  2. 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
          
       
  3. 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
       
       
  4. 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
       
       
       


   


ARCHIWUM '2022  (materiały z wcześniejszych edycji kursu)
  1. Inne możliwości oprogramowania operacji plikowych (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.
  3. Wskaźniki na funkcje. Funkcja qsort.
    Porównanie różnych kombinacji / zastosowań wskaźników.
    slajdy do wykładu: ( W11.PDF )
      
  4. 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ń