Język C, C++

 

Ilość godzin

Temat

1

Informacje o języku C++.

Struktura programu w C++

1

Strumienie wejścia/wyjścia.

1

Instrukcja warunkowa if

1

Instrukcja wyboru switch

1

Pętla for

1

Pętla while

1

Pętla do … while

1

Instrukcja break – continue

1

Tablice

1

Funkcje

1

Argumenty funkcji i referencja

1

Wykorzystanie plików do przechowywania danych

 

Informacje o języku C++

C++ to obecnie najważniejszy i najczęściej stosowany język programowania.

Powstał w latach 80-tych jako obiektowe rozszerzenie języka C.

Zalety:

- język obiektowy

- przejrzysty, niewielka liczba słów kluczowych

- programy napisane w C++ łatwo przenosić między różnymi platformami (Windows, UNIX itd.)

- obszerne, doskonałe biblioteki

- wiele języków wyrosło z C++ (PHP, Java, JavaScript, itd.)

 

Struktura programu w C++

Przykład programu

// Program p1.cpp - pierwszy program w C++, wersja Dev C++

(* komentarz wieloliniowy

*)

#include <iostream>
using namespace std; //udostępni. przestrzeni nazw bibl. stand. – Dev C++

int main() // funkcja główna
{ // początek funkcji głównej
cout << "Programowanie w języku C++" << endl; // napis + nowa linia - endl
cout << "jest przyjemne" << endl; // j.w.
system("PAUSE"); //czekanie na naciśnięcie ENTER
return 0; // zwraca 0
} // koniec funkcji głównej

 

Objaśnienia

·       Duże i małe litery w języku C++ są rozróżniane

·       #include <iostream> to dyrektywa kompilatora dołączająca standardową bibliotekę wejścia/wyjścia

·       using namespace std; - udostępnienie przestrzeni nazw biblioteki standardowej

·       Program w języku C++, jest zbudowany z jednej lub kilku funkcji opisujących żądane operacje procesu obliczeniowego

·       Program zawsze rozpoczyna działanie od funkcji main()

·       Listę argumentów funkcji umieszcza się w nawiasach

·       Instrukcje wykonywane przez funkcje umieszcza się w nawiasach { }

·       Po każdej instrukcji umieszcza się znak średnika ;

·       cout wydruk na ekranie - obiekt identyfikujący "wyjście", inaczej strumień wyjścia

·       << operator wskazujący kierunek przepływu informacji, może być wykorzystywany kaskadowo – tu wyprowadzenie na ekran
>> - wprowadzenie danej
W języku C wykorzystuje się do wydruku funkcję printf(),  tutaj
printf ("Programowanie w języku C++ \n"); należącą do biblioteki „stdio.h

·       system("PAUSE") - instrukcja systemowa "zatrzymująca" konsole

·       //  komentarz jednoliniowy,
/* … */  – komentarz, który ma początek i koniec – może być wieloliniowy

·       return 0;  zwraca informację do systemu, że program zakończył się prawidłowo

·       pliki źródłowe programów posiadają rozszerzenie *.cpp,  pliki nagłówków bibliotek mają rozszerzenie *.h

PODEJMOWANIE DECYZJI W PROGRAMIE

Instrukcja warunkowa if

if (warunek)  instrukcja1; else  instrukcja2;
 
Jeśli warunek jest spełniony, będzie wykonana instrukcja1,
w przeciwnym razie instrukcja2 (jako opcja).

 Operatory porównania:  == (równe), <,  <=,  >,  >=,   != (różne)

 
Operatory logiczne:
 && (i),  || (lub),  ! (zaprzeczenie)

 

Przykład

#include <iostream>
using namespace std;

int main()
{
double a, b, x;
cout << "Program rozwiązuje równanie liniowe postaci ax+b=0" << endl;
cout << "Podaj a: "; cin >> a; // wprowadzenie a
cout << "Podaj b: "; cin >> b; // wprowadzenie b

if (a==0) // gdy a=0
{
  if (b==0)
   cout << "nieskończenie wiele rozwiązań\n";
  else
  cout << "równanie sprzeczne\n";
} // koniec if a==0
else  // a!=0  - gdy a rózne od 0
{   x=-b/a;
  cout << x <<endl;
}


system("PAUSE");
return 0;
}

Instrukcja wyboru switch

Instrukcja switch zachowuje się jak zwrotnica, która mówi programowi który wiersz należy wykonać jako następny
(program przeskakuje do wiersza oznaczonego etykietą odpowiadającą wartości wyrażenia - int lub char).
Jeśli wyrażenie nie pasuje do żadnej etykiety to program przechodzi do wiersza
default (opcjonalnego).
 Aby przerwać wykonywanie programu, przy końcu danej grupy instrukcji trzeba użyć
break.
Składnia

switch (wyrażenie)
{
case etykieta1:  instrukcja1; break;
case etykieta2: instrukcja2; break;
....
default: instrukcja; break;
}

Przykład 1
#include <iostream>
using namespace std;
int main()
{
int ocena;
cout << "Program zamienia zapis arabski oceny na zapis slowny" << endl;
cout << "Podaj ocene w zapisie arabskim: ";
cin >> ocena;
switch (ocena)
{
    case 6: cout << "celujaca"; break;
    case 5: cout << "bardzo dobra"; break;
    case 4: cout << "dobra"; break;
    case 3: cout << "dostateczna"; break;
    case 2: cout << "dopuszczająca"; break;
    case 1: cout << "niedostateczna"; break;
    default: cout << "nie ma takiej oceny " << ocena; break;
};
cout<<endl;
system("PAUSE");
return 0;
}
Przykład 2
#include <iostream>
#include <math.h>
using namespace std;

int main()
{
double x;
char wybor;
cout << "Program oblicza funkcje trygonometryczne podanej liczby" << endl;
cout << "Podaj x: ";
cin >> x;
cout << "Wybierz co chcesz obliczyc:" << endl;
cout << "S - sinus, C - cosinus, T - tangens " << endl;
cin >> wybor;
cout.precision(2);
switch (wybor)
{
case 'S': case 's':
cout << "sin(" << x << ")=" << sin(x); break;
case 'C': case 'c': cout << "cos(" << x << ")=" << cos(x); break;
case 'T': case 't': cout << "tan(" << x << ")=" << sin(x)/cos(x); break;
default: cout << "niezdefiniowana operacja" << wybor; break;
};

cout<<endl;
system("PAUSE");
return 0;
}

Wersja zmodyfikowana

#include <iostream>
#include <math.h>
using namespace std;
 
int main()
{
double rs=57.29578;  double  rg=63.661978;
double x1, x2;  int sg;  char wybor;
cout << "Program oblicza funkcje trygonometryczne podanej liczby" << endl;
cout <<"1 - stopnie, 2 - grady "; cin >> sg;
cout << "\nPodaj kat: ";
cin >> x1;
if (sg==1) x2=x1/rs; else x2=x1/rg;
cout <<"\nKat [rad]= " << x2;
 
cout << "\nWybierz co chcesz obliczyc:" << endl;
cout << "S - sinus, C - cosinus, T - tangens " << endl;
cin >> wybor;
cout.precision(4);

switch (wybor)

{
case 'S': case 's':      cout << "sin(" << x1 << ")=" << sin(x2);      break;
case 'C': case 'c':      cout << "cos(" << x1 << ")=" << cos(x2);      break;
case 'T': case 't':      cout << "tan(" << x1 << ")=" << sin(x2)/cos(x2);      break;
default:      cout << "niezdefiniowana operacja" << wybor;      break;
};
 
cout<<endl;
system("PAUSE");
return 0;
}

Obliczenia cykliczne - pętle while, do...while, for

Pętla while
 Składnia pętli while:
while (warunek) instrukcja;
Najpierw program wyznacza wartość wyrażenia warunek ujętego w nawiasy. Jeśli wynikiem jest wartość true (prawda),
wykonywane są instrukcje z treści pętli (gdy jest ich kilka to ujmujemy w nawiasy klamrowe).
Kiedy skończy się wykonywanie treści pętli, program ponownie wyznacza wartość warunku.
Takie wykonywanie instrukcji i wyznaczanie warunku odbywa się do momentu otrzymania wartości false (fałsz).
W szczególności pętla może nie wykonać się ani razu.

Przykład 1

// Program while_p1.cpp - wydruk liczb calkowitych od 1 do podanej liczby N
#include <iostream>
using namespace std;

int main()
{
cout<<"Program wyświetla liczby całkowite od 1 do N gdzie N podaje użytkownik\n";
int i=1, N;
cout<<"Podaj N: ";
cin>>N;
while (i<=N)
{ cout<<i<<" "; i++; }
cout<<endl;
system("PAUSE");
return(0);
}


Przykład 2
// Program while_p2.cpp - wypisanie podanego napisu pionowo
#include <iostream>
using namespace std;

int main()
{
char imie[20];
cout<<"Podaj swoje imię: ";
cin>>imie;
cout<<"Oto Twoje imię, ustawione pionowo, wypisane z kodami ASCII:\n";
int i=0;
while (imie[i]!='\0')
{
cout<<imie[i]<<": "<<int(imie[i])<<endl;
i++;
}
system("PAUSE");
return(0);
}

char imie[20] - deklaracja tablicy znakowej (inaczej łańcucha znaków)
\n - znak przejścia do nowego wiersza
\0 - znak NUL, kończy łańcuch znaków
!= różne
int(znak) - konwersja znaku na liczbę (kod ASCII)

// Program while_p3.cpp - suma i iloczyn ciagu liczb zakonczonych 0
#include <iostream> 
#include <cstdlib> 
#include <conio.h>
using namespace std;

int main()
{
    cout << "Program oblicza sume i iloczyn wprowadzonych liczb calkowitych\n\n";
    int suma=0, iloczyn=1, liczba;
    cout << "Podaj liczbe (0-koniec) => " ;     cin >> liczba;
    while (liczba !=0)
    {
          suma += liczba; iloczyn *= liczba;
            cout << "Podaj liczbe (0-koniec) => " ;             cin >> liczba;
    }
    cout << "\n\nSuma liczb = " << suma << " a iloczyn = " << iloczyn;
    getch();
   
}

Pętla do …  while

Składnia:
do  instrukcja  while (warunek) ;
do {lista instrukcji} while (warunek);
Instrukcje zawarte w treści pętli do ... while będą wykonywane w zależności od warunku, który w odróżnieniu od innych pętli, sprawdzany jest na końcu.
Tutaj zawsze instrukcje zawarte w pętli będą przynajmniej raz wykonane.
Decyzja o kolejnych obrotach pętli uzależniona jest od wartości warunku - jeśli wartością warunku będzie
false     
 
to działanie pętli zostanie przerwane, w przeciwnym razie będzie kontynuowane.

Przykład 1
// Program do_while1a.cpp - zgadywanie liczby, ustalonej w programie jako stała równa 7
#include <iostream>
using namespace std;

int main()
{
const int ulubiona=7;
int n;

cout << "Aby poznać moją ulubioną liczbę podawaj liczby od 1 do 10\n";

do
{
cin >> n;
}
while (n!=ulubiona);

cout << "Tak, moja ulubiona liczba to " << ulubiona << endl;
system("PAUSE");
return(0);
}


// Program dowh_1.cpp  - do...while - 20 znaków ASCII o kodach numerycznych od 65 do 84
#include <stdio.h> 
#include <conio.h>
#define LIMIT 20
#define KOD_P 64
int main()
{
    int i=1, j=KOD_P;
    puts("Kody znakow ASCII " );
    puts("Lp (i)   Kod (j)   Znak o kodzie (j) ");
    do
    printf("\n%i  \t  %i   \t\t%c", i++, j+i, j+i);
    while (i<=LIMIT);
    getch();
}

Pętla for
Instrukcję for stosuje się, gdy można z góry określić liczbę wykonań pętli.
 Stosuje się zwłaszcza do wykonywania operacji na tablicach.
Często zdarza się, że chcemy, aby program wielokrotnie wykonywał to samo zadanie;  
przy rozwiązywaniu tych i podobnych problemów może być wykorzystana pętla for.
Składnia:
for (wyrażenie1;wyrażenie2; wyrazenie3 instrukcja;  
Inaczej: for (inicjacja; warunek; aktualizacja) instrukcja;
Instrukcja ta jest równoważna instrukcji
inicjalizacja; while (warunek) { instrukcja, aktualizacja; }
 
inicjacja zawiera instrukcje, które wykonają się tylko raz, tuż przed pierwszym obrotem pętli, najczęściej jest to nadanie wartości początkowych zmiennym. 
warunek
- udziela odpowiedzi na pytanie "czy wykonać kolejną iterację?" i jest sprawdzany tuż przed każdym przebiegiem pętli. 
aktualizacja wykonuje się na koniec każdego przebiegu pętli i zazwyczaj wykorzystujemy to pole do zwiększania licznika pętli.


Przykład: for (int i=1, j=100; i<=100; i++, j++);
  // operator przecinkowy



Przykład 1.
// Program for_p1a.cpp - kwadraty liczb naturalnych od 1 do 10
#include <iostream>
using namespace std;

int main()
{
int i;
cout << "Program wypisuje kwadraty 10-ciu kolejnych liczb naturalnych" << endl;
for (i=1; i<=10; i++)
cout << "Kwadratem liczby " << i << " jest " << i*i <<endl;

system("PAUSE");
return 0;
}


Przykład 2
// Program for_p1b.cpp - funkcja sin od 0 do 180 st, co 10 st
#include <iostream>
#include <math.h>
using namespace std;

int main()
{
int i;
double x;
cout << "Program wypisuje wartości funkcji sin dla kątów od 0 do 180st" << endl;
for (i=0; i<=180; i=i+10)
{
x=M_PI/180.0 * i;
cout.width(5);
cout << i <<"|";
cout.width(10);
cout << sin(x) <<endl;
}
system("PAUSE");
return 0;
}

}

Przykład 3
// Program for_p1c.cpp - suma i średnia kolejnych liczb naturalnych od 1 do 100
#include <iostream>
using namespace std;

int main()
{
int i, suma;
double srednia;
cout << "Program wyznacza sumę i średnią 50 kolejnych liczb naturalnych" << endl;
suma=0;
for (i=1; i<=50; i++)
suma+=i;

cout << "suma=" << suma << endl;
srednia=suma/100.0;
cout << "srednia=" << srednia << endl;
system("PAUSE");
return 0;
}


Instrukcje break, continue, goto

Instrukcja break pozwala na opuszczenie aktualnie wykonywanej pętli for, while oraz do i przejście do instrukcji znajdujące j się po zakonczonej pętli.
Instrukcja continue powoduje zakonczenie biezącej iteracji aktualnie wykonywanej pętli for, while oraz do.
Dla instrukcji for jest obliczane wyrażenie, którego wartość decyduje o wykonaniu nastepnej iteracji.
Dla instrukcji while i do obliczana jest wartość wyrażenia sterującego pętlą.
Instrukcja break kończy wykonywanie pętli a continue kończy jedynie bieżącą iterację.

Przykład:
for (int i=0; i<n; i++) {
if (tab[i] < 0) continue // pominięcie pewnych elementów
// przetwarzanie elementów różnych od 0
}

Alternatywą instrukcji break jest instrukcja goto.
Mimo, że w przypadku języków strukturalnych, (jakim jest język C) jej stosowanie nie jest zalecane, to jest jednak sytuacja,
gdy można ją zastosować, ponieważ nie istnieje żaden inny prosty sposób osiągnięcia celu.
Sytuacją tą jest wyjście z zagnieżdżonej pętli
Przykład:
#include <stdio.h>
void main(void)
{
int a, b;
printf("Poczatek petli\n");
for(a=0; a < 4; a++)
{
for(b=0; b < 4; b++)
{
if((a==2) && (b==1)) goto koniec;
printf("a = %d, b = %d\n", a, b);
}
}
koniec:
printf("Koniec petli\n");
}