Laboratorium 1 - Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2015 c Copyright 2015 Janusz Słupik
Punkty Na laboratorium można zdobyć 60 punktów. Ocena ogólna z zajęć: - 10 punktów Dwa sprawdziany praktyczne - po 10 punktów Projekt - 30 punktów, w tym: Dokumentacja - 5 punktów Implementacja - 25 punktów Projektem może być aplikacja konsolowa, albo okienkowa z wykorzystaniem biblioteki FLTK. Jeśli ktoś zechce i potrafi dopuszczamy użycie bibliotek Qt, albo gtkmm (GTK+). Projekty mają być realizowane zespołowo (2-3 osobowe zespoły). Każdy projekt musi być zorientowany obiektowo. Nieprzekraczalny termin oddania projektu - 3 lipiec 2015.
Nowy projekt w języku C++ w Visual Studio Tworzymy nowy projekt według procedury: - Nowy projekt Visual C++ - Wybieramy: Win32 Console Application - Podajemy nazwę projektu i ustawiamy ściężkę - W oknie, które się pojawi klikamy Application Settings i zaznaczamy opcję Empty Project - Następnie klikamy Finish Projekt utworzony. Teraz dodajemy plik z kodem źródłowym: - W drzewie solucji klikamy prawym klawiszem na Source files wybieramy Add New Item... - W oknie zaznaczamy: C++ File (.cpp) i wpisujemy nazwę pliku z rozszerzeniem.cpp!!! Zalecam aby plik, który zawiera funkcję main nazywał się main.cpp
Przykładowy program #include <iostream> #include <cstdlib> using namespace std; int main() { int liczba = 13; cout << "Podaj liczbe:" << endl; cin >> liczba; cout << "Podano liczbe " << liczba << endl; } system("pause"); return 0;
Zadanie 1. Napisz program, który pobiera dwie liczby od użytkownika (typu int i typu double), a następnie wypisze ich wartości na ekran. Przetestuj działanie wejścia cin dla niewłaściwych danych.
Obiekt cout double i = 0.123456; cout << i << endl; //zwraca 0.123456 cout.width(10); cout.fill(! ); cout.precision(2); cout << i << endl; //zwraca!!!!!!0.12 int n = 1234; cout << dec << n << endl; //zwraca 1234 cout << hex << n << endl; //zwraca 4d2 cout << oct << n << endl; //zwraca 2322 cout << \n ; cout.flush(); //równoważny endl
Obiekt cin char s[50]; cin >> s; #include <iomanip>... cin >> setw(50) >> s; //obetnie do 49 znaków + \0
Obiekt cin char s[50]; cin >> s; #include <iomanip>... cin >> setw(50) >> s; //obetnie do 49 znaków + \0 Operator >> wczytuje do białego znaku. Metoda getline czyta do końca linii. cin.getline(s,50);
Zadanie 2. Napisz program, który pobiera od użytkownika linię tekstu zatwierdzoną enterem (do 50 znaków). Następnie zlicza ilość cyfr i spacji w podanej linii. Na koniec, wyświetla następujące informacje: ilość znaków w linii, ilość cyfr, ilość spacji. W programie tym wykorzystaj funkcję strlen z biblioteki do obsługi łańcuchów znaków z języka C odpowiednio włączając ją do kodu C++.
Obiekt string Łańcuch znaków w stylu języka C: char s[10]="kot"; Jest to tablica dziesięciu elementów typu char. Tak zdefiniowana tablica może być traktowana jako łańcuch znaków o długości 3. W komórce o indeksie 3 znajduje się \0 (zaznaczenie końca łańcucha znaków). Zmienna (tablica) s nie może przechowywać łańcucha, który ma więcej niż 9 znaków.
Obiekt string Łańcuch znaków w stylu języka C: char s[10]="kot"; Jest to tablica dziesięciu elementów typu char. Tak zdefiniowana tablica może być traktowana jako łańcuch znaków o długości 3. W komórce o indeksie 3 znajduje się \0 (zaznaczenie końca łańcucha znaków). Zmienna (tablica) s nie może przechowywać łańcucha, który ma więcej niż 9 znaków. Łańcuch znaków w stylu języka C++: string napis = "kot"; napis = "bardzo dobrze opisany kot";
Obiekt string #include <string>... string napis("to jest "); string nazwa; cin >> nazwa; nazwa = napis + nazwa + "!!! "; cout << nazwa << endl; cout << nazwa.size() << endl;
Obiekt string #include <string>... string napis("to jest "); string nazwa; cin >> nazwa; nazwa = napis + nazwa + "!!! "; cout << nazwa << endl; cout << nazwa.size() << endl; string napis = "Inny napis"; char s[20]; strcpy( s, napis.c_str() ); //wymaga <cstring>
Przykład string a = "mysz"; char s[] = "mysz"; string b( s ); string c = "To jest myszka."; if( a == b ) cout << "ok 1 " << endl; if( a.compare( s ) == 0 ) cout << "ok 2 " << endl; if( strcmp( a.c_str(), s ) == 0 ) cout << "ok 3" << endl; if( c.compare( 8, a.size(), a ) == 0 ) cout << "ok 4" << endl;
Przykład string a = "to jest myszka"; unsigned int pozycja = 0; pozycja = a.find( "mysz" ); if( pozycja!= a.npos ) cout << "Znalazlem na pozycji " << pozycja << endl; else cout << "Nie znalazlem." << endl;
Porównanie C C++ #include<cstring> #include<string> ograniczona długość dowolna długość strlen( s ); s.size(); strcpy( s, t ); s = t; strcat( s, t ) s += t; if(!strcmp( s, t ) ) if( s == t )
Zadanie 3. Napisz program, który pobiera od użytkownika dwa słowa. Następnie sprawdza, czy pierwsze z podanych słów nie jest częścią drugiego słowa. Jeśli tak, to z tego drugiego słowa zostanie usunięta ta część. Na koniec zostanie wypisane drugie słowo (po ewentualnych zmianach). Jeśli czujesz, że pewnie można by wykorzystać do tego jakieś metody obiektu string, których nie znasz, to zajrzyj pod adres: http://www.cplusplus.com/reference/string/string/string/ Programista musi posiadać umiejętność wyszukiwania informacji.
Pobieranie łańcucha #include <string> string slowo, linia; cin >> slowo; // do białego znaku getline( cin, linia ); // do końca linii
Obiekt string - wybrane właściwości i metody string a = "To jest napis."; a.size(); a[3] = J ; a.at( 3 ) = J ; a.clear(); a.find("jest"); a.npos a.erase( 3, 5 ); // długość łańcucha // dostęp do 3 znaku // jw. wyrzuca wyjątek // czyści zawartość // zwraca pozycję "jest" w a // stała oznaczająca brak pozycji // kasuje od 3 pozycji 5 znaków
Obiekt string - wybrane właściwości i metody string a = "To jest napis."; a.replace( 0, 2, "Tam" ); // zamienia od pozycji 0 // dwa znaki w a na elementy // łańcucha "Tam" cout << a << endl; // "Tam jest napis." a.insert( 9, "ciekawy " ); //wstawia łańcuch od 9 pozycji cout << a << endl; // "Tam jest ciekawy napis."
Koniec