utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

Podobne dokumenty
po ostatnim dopisaniu na standardowe wyjście (cout) powinien zostać wyprowadzony komunikat "Skonczylem";

Zaprojektować i zaimplementować algorytm realizujący następujące zadanie.

Podstawy programowania skrót z wykładów:

Zajęcia 4 procedury i funkcje

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Napisz program wypisujący na standardowym wyjściu następujący napis: Napis zawierający różne dziwne znaczki // \ \$ &%.

Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

Część 4 życie programu

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

Podstawy Programowania C++

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Języki programowania obiektowego Nieobiektowe elementy języka C++

Lab 9 Podstawy Programowania

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

Zajęcia 6 wskaźniki i tablice dynamiczne

Języki programowania. Przetwarzanie tablic znaków. Część druga. Autorzy Tomasz Xięski Roman Simiński

1. Napisz program wypisujący w kolejnych wierszach standardowego wyjścia pojedyncze słowa następującego napisu Bardzo dlugi napis. 2.

Typy wyliczeniowe Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

Podstawy programowania

int tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania

Podstawy programowania w języku C++

Pliki wykład 2. Dorota Pylak

Wymiar musi być wyrażeniem stałym typu całkowitego, tzn. takim, które może obliczyć kompilator. Przykłady:

C++ wprowadzanie zmiennych

4. Funkcje. Przykłady

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

Zadanie 2: Arytmetyka symboli

I - Microsoft Visual Studio C++

ZADANIA Z PODSTAW PROGRAMOWANIA ZALICZENIE WARUNKOWE, SEMESTR ZIMOWY 16/17

Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Struktury, unie, formatowanie, wskaźniki

Języki i metodyka programowania. Wprowadzenie do języka C

> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

Podstawy programowania w języku C i C++

> C++ wskaźniki. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2015

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Zadanie nr 3: Sprawdzanie testu z arytmetyki

Podstawowe typy zmiennych

Lista 2. int porownaj_liczby_normalnie(const int a, const int b) { if(a==b) return 0; if(a>b)return1; return-1; }

Zajęcia 6 wskaźniki i tablice dynamiczne

Podstawy programowania w języku C++

Programowanie komputerowe. Zajęcia 4

Tablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119

Zadania z podstaw programowania obiektowego

Lekcja 6: Pascal. Procedura i funkcja

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Programowanie w języku Java

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Dodatkowo klasa powinna mieć destruktor zwalniający pamięć.

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Rozpoznawanie obrazu. Teraz opiszemy jak działa robot.

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Język C, tablice i funkcje (laboratorium)

Laboratorium nr 5: Mnożenie wektorów i macierzy

Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny:

Zasady programowania Dokumentacja

tablica: dane_liczbowe

1 Podstawy c++ w pigułce.

1 P roste e t ypy p d a d n a ych c - c ąg ą g d a d l a szy 2 T y T py p z ł z o ł żo ż ne e d a d n a ych c : T BLICE

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Wstęp do Informatyki

1 Podstawy c++ w pigułce.

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

DANE TEKSTOWE W JĘZYKU C/C++ - TABLICE ZNAKOWE

Programowanie komputerowe. Zajęcia 1

Zmienne, stałe i operatory

PARADYGMATY PROGRAMOWANIA Wykład 3

Instrukcje warunkowe i skoku. Spotkanie 2. Wyrażenia i operatory logiczne. Instrukcje warunkowe: if else, switch.

Programowanie 3 - Funkcje, pliki i klasy

1. Wypisywanie danych

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw

Pliki. Informacje ogólne. Obsługa plików w języku C

Język ludzki kod maszynowy

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia

Metody numeryczne Laboratorium 2

Podstawy algorytmiki i programowania - wykład 2 Tablice dwuwymiarowe cd Funkcje rekurencyjne

Tablice deklaracja, reprezentacja wewnętrzna

Podstawy Programowania Podstawowa składnia języka C++

Struktura pliku projektu Console Application

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

Edytor tekstu MS Word 2010 PL. Edytor tekstu MS Word 2010 PL umożliwia wykonywanie działań matematycznych.

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 5

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

2 Przygotował: mgr inż. Maciej Lasota

Zajęcia nr 1 Podstawy programowania. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

lekcja 8a Gry komputerowe MasterMind

Funkcje i tablice. Elwira Wachowicz. 23 maja 2013

Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce.

Wskaźniki. Informatyka

Algorytmy i język C++

Transkrypt:

Lista 3 Zestaw I Zadanie 1. Zaprojektować i zaimplementować funkcje: utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy, zapisz wypisującą na standardowym wyjściu wyniki operacji na macierzach, format danych m n x_11 x_12... x_1n x_21 x_22... x_2n... x_m1 x_m2... x_mn p q y_11 y_12... y_1q y_21 y_22... y_2q... y_p1 y_p2... y_pq usun zwalniającą zasoby przydzielone na stercie, czytaj pobierającą ze standardowego wejścia rozmiary macierzy oraz wartości ich elementów, czytaj losowo pobierającą ze standardowego wejścia rozmiary macierzy oraz wypełniającą tablicę wartościami pseudolosowymi, suma wykonującą operację dodawania macierzy pobranych jako argumenty tej funkcji oraz umieszczającą wynik działania w macierzy utworzonej wewnątrz tej funkcji, roznica wykonującą operację odejmowania macierzy pobranych jako argumenty tej funkcji oraz umieszczającą wynik działania w macierzy utworzonej wewnątrz tej funkcji, iloczyn wykonującą operację mnożenia macierzy pobranych jako argumenty tej funkcji oraz umieszczającą wynik działania w macierzy utworzonej wewnątrz tej funkcji, transponowanie wykonującą operację transponowania macierzy pobranej jako argument wywołania tej funkcji oraz umieszczającą wynik działania w macierzy utworzonej wewnątrz tej funkcji. Rozwiązanie zadania należy przetestować podanym poniżej ciągiem instrukcji:

{ srand(time(null)); double **A = 0, **B = 0; unsigned int n = 2, m = 3, p = 3, q = 2; if (czytaj_losowo(a, m, n, B, p, q)) { zapisz(a, m, n); zapisz(b, p, q); if (czytaj(a, m, n, B, p, q)) { zapisz(a, m, n); zapisz(b, p, q); if(!suma(a, m, n, B, p, q, C)){ cerr << "Macierze maja nieprawidlowe wymiary - suma niemozliwa" << endl; else{ cout << "suma macierzy" << endl; zapisz(c, m, n); if(!roznica(a, m, n, B, p, q, C)){ cerr << "Macierze maja nieprawidlowe wymiary - roznica niemozliwa" << endl; else{ cout << "roznica macierzy" << endl; zapisz(c, m, n); if(!iloczyn(a, m, n, B, p, q, C)){ cerr << "Macierze maja nieprawidlowe wymiary - iloczyn niemozliwy" << endl; else{ cout << "iloczyn macierzy" << endl; zapisz(c, m, q); cout << "macierz przed transponowaniem" << endl; zapisz(b, p, q); cout << "macierz transponowana" << endl; transpose(b, p, q, C); zapisz(c, q, p); Nie wolno zmieniać sposobu wywoływania poszczególnych funkcji. Komentarze należy zamienić na brakujące fragmenty kodu źródłowego.

Należy pamiętać o zwolnieniu zasobów przydzielonych na stercie. Zestaw II Zadanie 2. Zaprojektować i zaimplementować: funkcję char* wstaw(const char* zrodlo, char symbol); operującą na tablicy znaków i służącą do wstawienia co trzeci element tej tablicy symbolu przekazanego jako parametr wywołania tej funkcji, a zwracającą wskaźnik do nowo utworzonej wewnątrz tej funkcji tablicy w pamięci dynamicznej, funkcję void wstaw(char* cel, const char* zrodlo, char symbol); operującą na tablicy znaków i służącą do wstawienia co trzeci element tej tablicy symbolu przekazanego jako parametr wywołania tej funkcji, funkcję void wstaw1(char*& cel, const char* zrodlo, char symbol); operującą na tablicy znaków i służącą do wstawienia co trzeci element tej tablicy symbolu przekazanego jako parametr wywołania tej funkcji, pamięć dla tablicy docelowej należy przydzielić wewnątrz funkcji, dwuargumentową funkcję (szukaj) zwracającą liczbę wystąpień symbolu przekazanego jako parametr wywołania tej funkcji, jednoargumentową funkcję (kopiuj) zwracającą wskaźnik do nowo utworzonej wewnątrz tej funkcji tablicy w pamięci dynamicznej, do której przekopiowano tablicę źródłową zamieniając wszystkie małe litery na duże. Ciąg znaków oraz symbol odebrać jako parametry wywołania programu. Zdefiniowane funkcje przetestować podanym poniżej ciągiem instrukcji: char* a = wstaw(argv[1], argv[2][0]); char* b, *c; wstaw(b, argv[1], argv[2][0]); wstaw1(c, argv[1], argv[2][0]); cout << a << endl; cout << szukaj(a, s ) << endl; a = kopiuj(argv[1]); cout << a << endl; Przy realizacji zadań należy pamiętać o zwalnianiu pamięci i modyfikatorach const. Zadanie 3. Zaprojektować i zaimplementować funkcję realizującą następujące zadania: odczytanie danych osobowych (imię, nazwisko, numer gg, adres e mail, itp.) ze strumienia standardowego wejścia (wczytanie słowa END kończy pobieranie danych),

wyselekcjonowanie adresów email (na podstawie sprawdzenia wystepowania znaku @), zapisanie tych adresów (rozdzielonych średnikiem) z wykorzystaniem przekierowania danych ze standardowego wyjścia do pliku. Funkcje przetestuj podanym fragmentem kodu źródłowego. cout << "Podaj dane osobowe do wczytania: \n"; selektor(); Zestaw III Zadanie 4. Zaimplementować funkcję potega_10, która będzie zwracać wartość 10, podniesioną do potęgi podanej jako argument (typu unsigned int) funkcji. Funkcja ta powinna zwracać wartość typu unsigned int. Zadanie 5. Zaimplementować funkcję ile_cyfr, która przyjmuje jeden argument liczba typu unsigned int i która zwraca wartość typu unsigned int. Celem tej funkcji jest obliczenie liczby cyfr argumentu liczba. Zadanie 6. Zaimplementować funkcję doklej_do_liczby, która zwracać będzie liczbę z doklejoną do niej cyfrą. Funkcja ta przyjmuje od dwóch do trzech argumentów: zrodlo typu unsigned int, jest do liczba, do której należy dokleić cyfrę; cyfra typu unsigned int, jest to cyfra, która będzie doklejana; na_poczatek typu bool, który domyślnie przyjmuje wartość true. Funkcja powinna zwracać nową liczbę, której wartość zależy od argumentów cyfra i na_poczatek: jeżeli cyfra > 9, to zwracana jest wartość argumentu zrodlo (nie przeprowadzamy żadnych operacji); jeżeli na_poczatek==true, to cyfra jest dołączana do lewej strony źródła; jeżeli na_poczatek==false, to cyfra jest dołączana do prawej strony; Zadanie 7. Zaimplementować funkcję znak_na_cyfre, która przyjmuje wartość typu char i zwraca wartość typu unsigned int. Działanie tej funkcji polega na zamianie znaku z tabeli ASCII na jej numeryczną wartość. Oznacza to, że wywołanie: znak_na_cyfre( 2 ) zwróci 2. Jeżeli dany znak nie reprezentuje cyfry - należy zwrócić 0. Zadanie 8. Zaimplementować funkcję zamien_na_liczbe, która przyjmuje jako argument stały łańcuch znaków i zwraca wartość typu unsigned int. Jest to uproszczona wersja funkcji

atoi z biblioteki cstdlib, z jedną zmianą: każde wystąpienie znaku, który nie reprezentuje cyfry ma zostać zastąpione wartością 0. Założono, że łańcuch znaków reprezentuje tylko liczbę całkowitą nieujemną. Przykładowo, wywołanie: zamien_na_liczbe("1234") zwróci wartość 1234, ale wywołanie: zamien_na_liczbe("1ert234"); zwróci wartość 1000234 (każda litera została zastąpiona cyfrą 0). Funkcję należy zaimplementować nie używając funkcji atoi i nie używając klasy string. Przykładowy kod testujący działanie funkcji z zadań 5-7 (komentarze oznaczają oczekiwane wartości na standardowym wyjściu): unsigned jakas_liczba = 6572; cout << doklej_do_liczby(jakas_liczba,5) << endl; //56572 cout << doklej_do_liczby(jakas_liczba,1,false) << endl; //65721 unsigned jakas_druga_liczba = zamien_na_liczbe("1234"); cout << jakas_druga_liczba << endl; //1234 jakas_druga_liczba = zamien_na_liczbe("1ert234"); cout << jakas_druga_liczba << endl; //1000234 Zadanie 9. Zaimplementować program, który będzie demonstrować działanie funkcji zamien_na_liczbe. Działanie programu będzie zależeć od dodatkowych argumentów, podanych z linii wywołania programu: jeżeli nie podano żadnego argumentu, to program oczekuje na podanie przez użytkownika ciągu znaków. Ciąg ten powinien zostać zamieniony na liczbę (przy pomocy funkcji zamien_na_liczbe i wysłany na standardowe wyjście; jeden argument jest ciągiem znaków, który podobnie jak w przypadku wersji bezargumentowej zostanie zamieniony na liczbę i wysłany na standardowe wyjście; jeżeli podano więcej argumentów program powinien zakończyć działanie, wypisując odpowiedni komunikat na standardowym wyjściu błędów i zwracając do systemu operacyjnego wartość -1. Zadanie 10. Rozbudować funkcję zamien_na_liczbe, aby przy konwersji znaków, dla każdego znaku niebędącego cyfrą wypisać odpowiedni komunikat (ostrzeżenie) na standardowym wyjściu błędów.

Zestaw IV W zadaniach 11-16 założono, że wszystkie napisy składają się tylko z białych znaków i małych liter alfabetu angielskiego. Zadanie 11. Zaimplementować funkcję wypisz_tablice_2d, która przyjmuje trzy argumenty: tab_2d, która reprezentuje tablicę dwuwymiarową, przechowującą wartości typu unsigned int; wiersze typu unsigned int, reprezentuje liczbę wierszy wspomnianej tablicy; kolumny typu unsigned int, reprezentuje liczbę kolumn wspomnianej tablicy. i nic nie zwraca. Każdy wiersz powinien zostać wypisany w ten sposób, że wartości są otoczone znakami [ i ]. Każdy wiersz kończy się znakiem nowej linii. Zadanie 12. Zaimplementować funkcję ile_wystapien_znaku, która będzie przyjmować dwa argumenty: zrodlo typu string lub char*; znak typu char. i zwraca wartość typu unsigned int. Zadaniem tej funkcji jest zwrócenie liczby wystąpień danego znaku w podanym napisie. Jeżeli dany znak nie występuje - należy zwrócić 0. Zadanie 13. Zaimplementować funkcję znak_na_numer, który przyjmuje argument znak typu char i zwraca wartość typu unsigned int. Funkcja ta powinna zwracać pozycję danego znaku w alfabecie angielskim, tj. dla argumentu a zostanie zwrócona wartośc 0, dla b wartość 1 itd., dla z zostanie zwrócona wartość 25. Jeżeli dany znak nie należy do alfabetu angielskiego należy zwrócić 111. Zadanie 14. Zaimplementować funkcję statystyka, która przyjmuje dwa argumenty: tablica, będąca wskaźnikiem na tablicę wartości typu unsigned int. Uwaga założono, że podana tablica została wcześniej utworzona i przechowuje 26 elementów; napis, będący argumentem typu string lub char*. i nie zwraca żadnej wartości. Podana tablica posiada 26 elementów. Wartości tablicy należy wyzerować, a następnie: do tablica[0] wpisać liczbę wystąpień znaku a w argumencie napis (skorzystać z funkcji ile_wystapien_znaku); do tablica[1] wpisać liczbę wystąpień znaku b w argumencie napis; do kolejnych komórek wpisać liczbę wystąpień kolejny znaków z alfabetu angielskiego ( c, d itd.) w argumencie napis; dla ułatwienia: tablica[24] przechowuje liczbę wystąpień znaku y, a tablica[25] liczbę wystąpień znaku z.

Zadanie 15. Zaimplementować funkcję statystyki, która przyjmuje dwa argumenty: napisy, argument będący tablicą napisów; rozmiar, rozmiar wspomnianej tablicy. Funkcja zwraca dwuwymiarową tablicę wartości typu unsigned int o rozmiarach rozmiarx26 (tj. rozmiar wierszy i 26 kolumn). Wiersz o indeksie 0 powinien przechowywać liczbę wystąpień kolejnych znaków z alfabetu angielskiego dla wartości napisy[0]. Podobnie każdy kolejny wiersz aż do obliczenia statystyk dla każdego napisu z tablicy napisy. Wynikowa tablica powinna zostać utworzona dynamicznie. Zadanie 16. Zaimplementować program, demonstrujący działanie funkcji statystyki. Przykładowy fragment funkcji main: string napisy[] = {"ala ma", "kota", "abcdefghijklmnopqrstuvwxyz"; unsigned** statsy = statystyki(napisy,3); wypisz_tablice_2d(statsy,3,26); powinien spowodować wyświetlenie na standardowym wyjściu: [3][0][0][0][0][0][0][0][0][0][0][1][1][0][0][0][0][0][0][0][0][0][0][0][0][0] [1][0][0][0][0][0][0][0][0][0][1][0][0][0][1][0][0][0][0][1][0][0][0][0][0][0] [1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1] Przy realizacji zadań należy pamiętać o zwalnianiu pamięci i modyfikatorach const.