A. ZielińskaProgramowanie + pytania, Szkoła, PSiO, C


1. Co to jest programowanie strukturalne

Programowanie strukturalne to paradygmat programowania zalecający hierarchiczne dzielenie kodu na moduły, które komunikują się jedynie poprzez dobrze określone interfejsy. Jest to rozszerzenie koncepcji programowania proceduralnego.

Według angielskiej wikipedii jest to raczej pewna poddyscyplina lub podzbiór programowania proceduralnego zalecająca stosowanie konstrukcji języka takich jak pętle i instrukcje warunkowe, oraz unikanie instrukcji goto i wielokrotnych punktów wejścia i wyjścia z kodu danego podbloku programu.

2. Czym się rowni od programowania obiektowego

Programowanie obiektowe (ang. object-oriented programming) to metodologia tworzenia programów komputerowych, która definiuje programy za pomocą "obiektów" - elementów łączących stan (czyli dane) i zachowanie (czyli procedury, tu: metody). Obiektowy program komputerowy wyrażony jest jako zbiór takich obiektów, komunikujących się pomiędzy sobą w celu wykonywania zadań. Podejście to różni się od tradycyjnego programowania proceduralnego, gdzie dane i procedury nie są ze sobą bezpośrednio związane. Programowanie obiektowe ma ułatwić pisanie, konserwację i wielokrotne użycie programów lub ich fragmentów.

3. Co to jest kompilator, kod zrodlowy, program, i inne def. zwiazane z programowaniem strukturalnym

Kompilator (ang. compiler) to program służący do automatycznego tłumaczenia kodów źródłowych na język maszynowy. Niektóre kompilatory tłumaczą najpierw do języka asemblera, a na język maszynowy tłumaczy asembler.

Różnica pomiędzy kompilatorem a asemblerem polega na tym, iż każde polecenie języka programowania może zostać rozbite na wiele podpoleceń języka maszynowego (nowoczesne asemblery również posiadają składnię umożliwiającą zapis wielu poleceń maszynowych jako jednego polecenia kodu źródłowego oraz opcje optymalizacji kodu). Kompilatory mogą posiadać możliwość automatycznej alokacji pamięci dla zmiennych, implementowania struktur kontrolnych lub procedur wejścia-wyjścia.

Stosowanie kompilatorów ułatwia programowanie (programista nie musi znać języka maszynowego) i pozwala na większą przenośność kodu pomiędzy platformami.

Kod źródłowy (również źródło lub źródła) to program komputerowy w postaci takiej jaką tworzy ją człowiek w pewnym języku programowania, zazwyczaj jako tekst, ale też jako dane dla translatora, przeznaczony do analizowania i modyfikacji przez człowieka. Kod źródłowy jest przetwarzany na kod maszynowy zrozumiały dla maszyny (procesora), przez translator lub jest analizowany i wykonywany przez specjalny program zwany interpreterem, może być też przetworzony na kod pośredni

Oprócz poleceń dla maszyny źródło bardzo często zawiera komentarze mające wyjaśnić cel pewnych fragmentów kodu.

Oprogramowanie (ang. software) to zestaw instrukcji przeznaczonych do wykonania dla komputera. Celem oprogramowania jest przetwarzanie danych w okreslonym przez twórcę zakresie. Oprogramowanie jest synonimem terminów program komputerowy oraz aplikacja, przy czym stosuje się go zazwyczaj do określania większych programów oraz ich zbiorów. Oprogramowanie to dział Informatyki.

Oprogramowanie tworzą programiści w procesie programowania. Oprogramowanie jako przejaw twórczości jest chronione prawem autorskim, twórcy zezwalają na korzystanie z niego na warunkach określanych w licencji.

Oprogramowanie występuje w dwóch postaciach:

Postać źródłowa - powstająca w trakcie programowania, umożliwiająca modyfikację i rozbudowę programu,

Postać binarna (kod maszynowy) - przeznaczona do wykonywania przez komputery, efekty działania obserwuje użytkownik w postaci wydruków, obrazów na monitorze, zmian w danych.

Oprogramowanie pisane jest zazwyczaj przy użyciu różnych języków programowania z wykorzystaniem algorytmów. Programy przekształcające oprogramowanie z postaci źródłowej na binarną to kompilatory. Niektóre oprogramowanie, np. napisane w całości w językach interpretowanych, może występować tylko w jednej postaci, spełniającej oba zadania.

Oprogramowanie dzieli się często na oprogramowanie systemowe oraz aplikacje użytkowe. Pojęcie oprogramowania systemowego jest znacznie szersze niż systemy operacyjne. W jego skład wchodzi też oprogramowanie serwerowe i każde oprogramowanie z którym użytkownik nie ma bezpośredniej styczności.

Moduł (pakiet, unit - ang.) to oddzielny (względem aplikacji go wykorzystujących) twór, zawierający dostępne w nim implementacje typów wartości, zmiennych, stałych oraz treści procedur i funkcji.

Ogólnie można określić interfejs (ang. interface) jako część danego obiektu widoczną na zewnątrz, dla innych obiektów. Jej zadaniem jest umożliwienie współpracy z tym obiektem np. komunikacja z nim, czy wykorzystanie jego innych właściwości umieszczonych wewnątrz.

Jest to także jeden z najpowszechniej stosowanych terminów w informatyce. W dosłownym znaczeniu jest to coś łączącego i ma zastosowanie zarówno do warstwy sprzętowej jak i programowej.

Programowanie proceduralne to paradygmat programowania zalecający dzielenie kodu na procedury, czyli fragmenty wykonujące ściśle określone operacje.

Procedury nie powinny korzystać ze zmiennych globalnych (w miarę możliwości), lecz pobierać i przekazywać wszystkie dane (czy też wskaźniki do nich) jako parametry wywołania. Instrukcje goto mogą być wprawdzie używane w procedurach, ale w żadnym wypadku celem wskoczenia w środek innej procedury.

4. Schemat blokowy + algorytmy

Schemat blokowy (ang. block diagram, flowchart) - diagram, na którym procedura, system albo program komputerowy, są reprezentowane przez opisane figury geometryczne połączone liniami zgodnie z kolejnością wykonywania czynności wynikajacych z przyjętego algorytmu rozwiązania zadania.

Schemat blokowy pozwala dostrzec istotne etapy algorytm i logiczne zależności między nimi.

Zależnie od przedstawianego zagadnienia stosowane są różne zestawy figur geometrycznych zwanych blokami, których kształty reprezentują umownie rodzaje elementów składowych.

Wyróżniamy następujące rodzaje bloków:

a) Blok graniczny - oznacza on początek, koniec, przerwanie lub wstrzymanie wykonywania działania, np. blok startu programu.

b) Blok wejścia-wyjścia - przedstawia czynność wprowadzania danych do programu i przyporządkowania ich zmiennym dla późniejszego wykorzystania jak i wyprowadzenia wyników obliczeń, np. czytaj z, pisz z+10.

c) Blok obliczeniowy - oznacza wykonanie operacji w efekcie, której zmienią się wartości, postać lub miejsce zapisu danych, np. z = z + 1.

d) Blok decyzyjny - przedstawia wybór jednego z dwóch wariantów wykonywania programu na podstawie sprawdzenia warunku wpisanego w ów blok, np. a = b.

e) Blok wywołania podprogramu - oznacza zmiane wykonywanej czynności na skutek wywołania podprogramu, np. MAX(x,y,z).

f) Blok fragmentu - przedstawia część programu zdefiniowanego odrębnie, np. sortowanie.

g) Blok komentarza - pozwala wprowadzać komentarze wyjaśniające poszczególne części schematu co ułatwia zrozumienie go czytającemu, np. wprowadzenie danych.

h) Łącznik wewnętrzny - służy do łączenia odrębnych części schematu znajdujących się na tej samej stronie, powiązane ze sobą łączniki oznaczone są tym samym napisem, np. A1, 7.

i) Łącznik zewnętrzny - służy do łączenia odrębnych części schematu znajdujących się na odrębnych stronach, powinien być opisany jak łącznik wewnętrzny, pozatym powinien zawierać numer strony, do której się odwołuje, np. 4.3, 2,B2.

Algorytm w matematyce oraz informatyce to skończony uporządkowany zupełnie zbiór jasno zdefiniowanych czynności koniecznych do wykonania pewnego zadania w skończonej liczbie kroków. Ma on przeprowadzić system z pewnego stanu początkowego do pożądanego stanu końcowego. Algorytm może zostać zaimplementowany w postaci programu komputerowego lub układu elektronicznego. Kiedy podczas tego procesu programiści popełnią błąd (ang. bug), może to doprowadzić do poważnych skutków. Dla przykładu błędy w implementacji algorytmów bezpieczeństwa mogą ułatwić włamanie do systemu komputerowego.

5. Znac insrukcje jezyka C jak sa zbudowane

Instrukcje sterujące

Instrukcja if

else i else if są opcjonalne.

if (warunek1) {

instrukcje;

}

[else if(warunek2){

instrukcje;

}]

[else {

instrukcje;

}]

Pętla while

while (warunek) {

instrukcje;

}

Pętla do...while

do {

instrukcje;

} while (warunek);

Pętla for

for ([instrukcja-początkowe]; [warunek];

[instrukcje-wykonywane-po-każdej-iteracji]) {

instrukcje;

}

Instrukcja switch

break jest opcjonalne. wartość1 i wartość2 muszą być stałymi.

switch (wyrażenie) {

case wartość1 :

instrukcje;

[break;]

case wartość2 :

instrukcje;

[break;]

default :

instrukcje;

[break;]

}

6. Typy danych do czego służą

Podstawowe typy danych

Najczęściej chyba używanym typem jest int (typ całkowity). Jest on poza tym domyślnym typem, jeżeli nie został podany. Skoncentrujemy się na razie na typach liczbowych. Typ char jest typem znakowym (JEDEN znak!), ale również liczbowym całkowitym, obsługującym zakres od -128 do 127 (uwaga: ta informacja może być nieprawdziwa jeśli chodzi o liczby ujemne; patrz niżej). Rozmiar (a więc i zakres) typu int zależy od implementacji, w przypadku systemów 32-bitowych ma on 4 bajty i obsługuje zakres -2147483648 do 2147483647. Jeśli masz ten tekst w edytorze `vim', możesz inkrementować lub dekrementować liczby na których stoi kursor klawiszami odpowiednio Control-a (pod screenem: Control-a a) i Control-x. Możesz sprawdzić, że dla tych liczb operacje te powodują "przekręcenie licznika".

Typ int może również posiadać modyfikatory: short oznacza liczbę krótką całkowitą (zazwyczaj 2 bajty), long długą (4 bajty). Podane wielkości jednak nie są standardowe, lecz zależne od implementacji. Wielkość danych konkretnego typu można sprawdzać za pomocą operatora sizeof:

sizeof (typ) - zwraca wielkość danej tego typu

sizeof dana - zwraca wielkość danej

Standard co do wielkości typów zakłada jedynie, że:

sizeof (char) == 1 (nie musi to oznaczać jednocześnie 8 bitów!)

sizeof (short int) < sizeof (long int)

sizeof (short int) <= sizeof (int) <= sizeof (long int)

Istnieje również w niektórych kompilatorach typ long long (np. w gcc i ma on wielkość 8 bajtów). Jest to jednak typ niestandardowy.

Modyfikator unsigned oznacza, że liczba tego typu nie obsługuje liczb ujemnych, tzn. np. typ unsigned char ma zakres od 0 do 255, podobnie unsigned short int (jeśli jest 2-bajtowy) ma zakres od 0 do 65535. Dla symetrii istnieje również słowo signed. Zaznaczam od razu, że istnieje też taki typ (już biblioteczny, ale po wczytaniu dowolnego pliku nagłówkowego można uważać, że jest dostępny) size_t. Standard zakłada, że jest to typ wyniku operatora sizeof, a jest najczęściej identyczny z unsigned int.

Tu uwaga co do typu char: istnieją w C++ dwa typy znakowe: signed char i unsigned char. Jest również typ char (bez modyfikatora) i jest on równoważny albo jednemu, albo drugiemu z nich (standard nie precyzuje, któremu) w związku z czym, nie należy zakładać nigdy sposobu, w jaki w danym kompilatorze wartości z zakresu -128 do -1 czy 128 do 255 będą traktowane przez typ char. W przypadku, gdy chce się używać zakresów typu char poza 0-127 należy jawnie określać char jako signed lub unsigned (lub dokonać ustawienia odpowiednich opcji kompilatora, nie będzie to jednak przenośne).

Jak napisałem wcześniej, typ int jest używany domyślnie w przypadku, gdyby nie był podany (ale - UWAGA! - tylko jeśli podano modyfikator typu, czyli short, long, signed lub unsigned), toteż wystarczy pisać np. long i będzie to oznaczało long int. Podobnie unsigned będzie oznaczać unsigned int.

W C++ istnieje też typ logiczny (lub inaczej `boolowski', ewentualnie niektórzy mówią "buliński" :), który nazywa się `bool'. Wartości tego typu to jedynie prawda i fałsz, które są dostępne pod literałami `true' i `false'. Jeśli ktoś nie wie, skąd się wzięła nazwa `boolowski' (ang. boolean), to wyjaśniam, że od nazwiska matematyka, który opracował algebrę dla wartości logicznych, George'a Boole'a. Zaznaczam od razu, że typ `bool' jest typem wartości przyjmowanej przez operatory `&&', `||' i `!' i zwracanym przez ==, != itd. Jednak ten typ nie jest tak restrykcyjnie pilnowany jak to ma miejsce np. w pascalu; może być dowolnie niejawnie konwertowany na typ int, z kolei na ten typ można konwertować każdą wartość konwertowalną na całkowitą (true jest konwertowane na 1).

Liczby rzeczywiste mogą być reprezentowane przez jeden z typów zmiennoprzecinkowych: float, double, long double, zajmujących odpowiednio 4, 8 i 10 bajtów pamięci (przynajmniej na aktualnie popularnych kompilatorach i systemach operacyjnych; zastrzegam wciąż, że te wielkości są specyficzne, mają one oznaczać jedynie typ zmiennoprzecinkowy pojedynczej, podwójnej i rozszerzonej precyzji; podane tu długości są zgodne z jakąś tam normą IEEE :*).

Wszystkie te wymienione typy nazywane są typami WBUDOWANYMI (ang. built-in) lub ŚCISŁYMI (ang. strict) - pewnie dlatego, że są to typy, które są tak ścisłe, że ściskać ich już nie ma potrzeby :*) (patrz przekazywanie argumentów do funkcji). Typy te należą również do grupy zwanej "POD" ("Plain ol' data"). Obiekty takich typów podpadają pod dość luźne reguły, a konkretnie pod takie, pod jakie podpadają obiekty w C (będzie o tym mowa przy właściwościach rozszerzonych).

7. Zdeklarowac zmienne, co to jest stala

Deklaracje zmiennych i ich zasięg

Podstawowe klasy pamięci (nie wiem, czy to dobre określenie; po angielsku jest to "storage class", można by to też nazwać "klasą umieszczania") dla obiektów to globalna i lokalna. Obiekt lokalny jest dostępny wyłącznie w kontekście, w którym został zadeklarowany, zaś jego czas życia jest od wejścia do kontekstu do wyjścia z niego. Globalny zaś, deklarowany poza wszystkimi funkcjami, jest dostępny dla wszystkich funkcji. Deklaracja zmiennej ma bardzo prostą składnię:

<modyfikator> <typ> <nazwa zmiennej>;

Jeżeli deklarujemy kilka zmiennych tego samego typu, możemy podać ich listę: unsigned long int i, j, k; . Zmienna może być zainicjalizowana jakąś wartością:

int i = 0;

lub w notacji C++:

int i( 0 );

Zmienne typów POD - ZAPAMIĘTAJ - nie są automatycznie inicjalizowane; nie zainicjalizowana zmienna posiada wartość taką, jaka się jej trafiła w przeznaczonym dla niej kawałku pamięci. Zauważ, że wyniki wszystkich operacji na takich wartościach (z wyjątkiem przypisania) są niezdefiniowane. Wartość taką nazywamy WARTOŚCIĄ OSOBLIWĄ (ang. singular). Zapamiętaj to pojęcie, gdyż później będzie ono potrzebne. Z doświadczenia wiem, że największe głowy często miały problem ze zrozumieniem, co to takiego wartość osobliwa (i myliły często z wartością niewłaściwą). Wartość osobliwa to po prostu taka wartość o której nie tylko nic nie wiemy, ale nad której wartością program nie ma żadnej kontroli; innymi słowy, jest to wartość, której nikt nie nadał. Później się dowiesz jeszcze, że wartość osobliwa może istnieć nie tylko przez pozostawienie zmiennej niezainicjalizowaną; w programie taka wartość może również czasem POWSTAĆ.

Dla zmiennych lokalnych praktycznie nie ma różnicy pomiędzy przypisaniem a inicjalizacją (istnieją jednak wyrażenia dozwolone dla inicjalizacji, lecz zabronione dla przypisania!). Dla zmiennych globalnych różnica jest istotna - wartości, jakimi są inicjalizowane są zapisane w pliku programu i owe wartości inicjalizujące są do nich wpisywane jeszcze przed rozpoczęciem wykonywania programu. Mimo wszystko jednak pamiętaj, żeby ZAWSZE w miarę możliwości inicjalizować zmienne.

Tu od razu pewna dodatkowa uwaga co do inicjalizowania zmiennych globalnych. Wspomniałem na samym początku, że nie do końca jest prawdą, że instrukcje muszą zawierać się wewnątrz funkcji (takoż tylko w języku C jest prawdą, że pierwsza instrukcja programu to pierwsza instrukcja funkcji main). Otóż to jest właśnie ten szczególny przypadek. Zmienne globalne mogą być inicjalizowane również rezultatem wywołanej funkcji (czy też po prostu wyrażenia możliwego do zwartościowania tylko w czasie działania programu, a nie w czasie kompilacji). Kod taki wykonuje się jeszcze przed pierwszą instrukcją funkcji main. Opisana sytuacja dzieje się jednak tylko wtedy, gdy obliczenie wyniku funkcji podczas kompilacji jest fizycznie niewykonalne - nikt przecie nie zabroni kompilatorowi, żeby obliczył wartość funkcji podczas kompilacji, jeśli tylko umie stwierdzić na 100%, że ta funkcja jest bezstanowa.

Klasy pamięci - modyfikatory deklaracji zmiennych i stałych

Obiekty (zmienne lub stałe) mogą być w zależności od potrzeby umieszczane w pamięci w różny sposób (często również determinuje to ich zachowanie w programie). W rozdziale b była mowa o obiektach globalnych i lokalnych. Jednak to były obiekty o domyślnie przyznawanych właściwościach. Inne właściwości uzyskujemy przez odpowiednie modyfikatory. Oto one:

register; oznacza, że zmienna ma być trzymana w rejestrze procesora, a nie w pamięci. Co prawda i tak zdecyduje o tym kompilator, ale jest to już pewna podpowiedź. Nie jest co prawda zabronione jest uzyskiwanie adresu (wskaźnika) takiej zmiennej, ale jest to sposób na to, żeby kompilator stwierdził: "Sory, jak bedziesz mi z tego pobierał wskaźnik, to możesz sie w ... pocałować z tym rejestrem".

const; oznacza, że obiekt jest stały. W konsekwencji istnieje obowiązek zainicjalizowania go i nie wolno później zmieniać jego wartości

volatile; oznacza, że nie ma się wyłączności do podanego obiektu (tzn. może być to rejestr sprzętowy komputera albo zmienna używana przez inny wątek). Oznacza to, że kompilatorowi nie wolno używać w celach optymalizacyjnych wartości odczytanej we wcześniejszej operacji; musi on za każdym odczytem jej wartości dokonać jej fizycznego odczytu

static; w ogólności oznacza, że obiekt taki istnieje przez cały czas, niezależnie od zasięgu, który go używa. Dla funkcji oraz zmiennych globalnych oznacza z kolei zniesienie zewnętrznego symbolu obiektu lub funkcji (tzn. poza bieżącą jednostką kompilacji, czyli plikiem, nic nie może z tego korzystać)

extern; oznacza, że następująca deklaracja nie jest fizyczną deklaracją, lecz zaimportowaniem owej deklaracji z innej jednostki kompilacji

Modyfikatory `static' i `extern' wzajemnie się wykluczają, zwłaszcza, że oznaczają dwie całkiem przeciwne właściwości, z których jedna jest dla danego obiektu/funkcji domyślna. Mają one też inne znaczenia dla obiektów zmiennych i stałych. Np. static:

dla zmiennych globalnych: oznacza, że zmienna taka jest wewnętrzna (czyli lokalna dla bieżącej jednostki kompilacji), w przeciwnym razie jest zewnętrzna i może być importowana przez inne pliki. To samo znaczenie ma dla definicji funkcji.

dla zmiennych lokalnych: oznacza, że zmienna taka nie jest tworzona za każdym wywołaniem funkcji, lecz jest tworzona raz (jak globalna) a lokalny jest tylko jej identyfikator. Można ją zainicjalizować, jednak jest to inicjalizacja podobna do inicjalizacji zmiennej globalnej: wykonuje się tylko raz. Jeśli tego nie zrobimy, jest ona inicjalizowana tzw. konstruktorem domyślnym (wyjaśnię to później; dla typów POD oznacza zapisanie go zerami).

8. Instrukcje warunkowe umiec je zastosowac

Instrukcje warunkowe if oraz if-else

Bardzo często zdarza się tak, że jakaś część programu ma zostać wykonana tylko wówczas, gdy spełniony jest pewien dodatkowy warunek. W języku programowania C istnieje oczywiście możliwość definiowania tego typu operacji. W tym celu należy wykorzystać jedną z instrukcji warunkowych:

if

if-else

switch

Instrukcja if

Plik ifelse.c zawiera przykłady niezbędne do analizy podczas tej lekcji. Znajduje się tam pętla for, w ciele której pojawiają się nowe instrukcje if oraz if-else. Instrukcje warunkowe są więc zagnieżdżone w pętli, a każde zdanie if zostanie powtórzone dziesięć razy. Sama konstrukcja pętli nie jest niespodzianką. Na jej końcu zostaną wykonane dwie operacje: inkrementacja zmiennej x oraz polecenie pause systemu MS-DOS. Proszę jedynie zwrócić uwagę na brak średnika po funkcji system.

Skupmy się teraz na pierwszej instrukcji if. Rozpoczyna się ona od słowa kluczowego if, któremu towarzyszy wyrażenie w nawiasach okrągłych. Od wartości logicznej tego wyrażenia zależy, czy instrukcja (lub grupa instrukcji) umieszczona dalej zostanie wykonana. W naszym przypadku testujemy wartość zadeklarowanej wcześniej zmiennej x. Wyrażenie if (x == 2) oznacza zapytanie: czy x jest równe dwa? Występuje tu operator relacji ==, który służy do porównania dwóch wartości; tutaj porównujemy bieżącą wartość zmiennej x z liczbą dwa. Następna instrukcja (wywołanie funkcji printf) wykona się tylko podczas tego obiegu pętli, w którym wartość zmiennej x będzie wynosić dwa.

Na temat operatorów relacji złożone zostaną wyjaśnienia w następnych częściach, tutaj jedynie warto podkreślić, że zapis x = 2 (podstawienie, przypisanie, assing) i x == 2 (porównanie, comparing) to dwa diametralnie różne pojęcia. Proszę jeszcze spojrzeć na tabelę ilustrującą różnice w tym zakresie pomiędzy językiem programowania C i Pascalem, gdyż jest to pole wielu częstych błędów:

Instrukcja if-else

Druga instrukcja if jest bardzo podobna do pierwszej, z wyjątkiem dodania nowego słowa zastrzeżonego else po instrukcji printf. Jeżeli testowane wyrażenie jest prawdziwe wykonywana jest instrukcja (lub grupa instrukcji) przed słowem else, w przeciwnym razie po tym słowie. Konstrukcja if-else zakłada, że zawsze zostanie wykonana jedna z instrukcji w zależności od wyniku wyrażenia warunkowego. Słowo else jest opcjonalne - brakowało go w pierwszym przykładzie, gdzie w przypadku fałszu testowanego wyrażenia instrukcja za nim była pomijana, a nic w zamian nie było wykonywane i program przechodził do następnych linii kodu.

9. Wszystkie petle, co to sa (for, while) jak je zastosowac (ad.5)

10. Instrukcja getch, do czego służy

Przykłady

Hello, world

#include <stdio.h>

int main(void)

{

printf ("Hello, world!\n");

return 0;

}

W powyższym kodzie:

Dyrektywa #include włącza do pliku zawartość odpowiednich plików nagłówkowych - w tym przypadku pliku stdio.h, zawierającego m.in. prototyp funkcji printf.

Główna funkcja nazywa się zawsze main. Zwraca ona wartość typu całkowitoliczbowego - int, w tym przypadku 0.

Za wyprowadzenie wyniku na standardowe wyjście (zwykle na ekran) odpowiedzialna jest funkcja printf.

Łańcuch tekstowy zamyka się w cudzysłowach: "łańcuch".

Znak nowej linii zapisuje się jako "\n".

1



Wyszukiwarka

Podobne podstrony:
A. Zielińska Wyklad 2, Szkoła, PSiO, C
A. zielinskaWyklad 1, Szkoła, PSiO, C
pytania , szkoła 5
pytanie, Szkoła
Przesyłam pytania, Szkoła Przemek, ekologia
MIKROEKONOMIA PYTANIA2, szkoła
pytania 1, szkoła PŚK, Automatyzacja, Podstawy Automatyzacji, LABOLATORIUM
Przekształcanie typów - Wyklad 3, Szkoła, PSiO, C
socjologia pytania, Szkoła WSTiH, SZKOŁA SEM. 6, socjologia
pytania, szkoła
wszystkie pytania, Szkoła, Politechnika 1- 5 sem, SEM IV, Elektronika i Energoelektronika. Wykład, P
Fizyka kolo nr 2 pytania .;), Szkoła Rolnictwo studia, Szkoła, Materiały studia, materialy - biotech
opracowane pytania 2, szkola, Ergonomia

więcej podobnych podstron