Laboratorium nr 4: Arytmetyka liczb zespolonych

Podobne dokumenty
Zadanie nr 2: Arytmetyka liczb zespolonych

Zad. 5: Układ równań liniowych liczb zespolonych

Zadanie nr 3: Sprawdzanie testu z arytmetyki

Zad. 3: Rotacje 2D. Demonstracja przykładu problemu skończonej reprezentacji binarnej liczb

Zad. 4: Rotacje 2D. 1 Cel ćwiczenia. 2 Program zajęć. 3 Opis zadania programowego

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

Zad. 3: Układ równań liniowych

Zad. 6: Sterowanie robotem mobilnym

Zad. 5: Sterowanie dronem

Zad. 4: Szablonu dla układu równań liniowych

Zad. 5: Sterowanie robotem mobilnym

Zad. 7: Fabryka obiektów i singleton

Zad. 7: Fabryka obiektów i singleton

Zadanie 2: Arytmetyka symboli

Zad. 5: Rotacje 3D. 1 Cel ćwiczenia. 2 Program zajęć. 3 Opis zadania programowego

Układ równań liniowych

Zad. 4: Rotacje 3D. 1 Cel ćwiczenia. 2 Program zajęć. 3 Opis zadania programowego

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

Zad. 7: Sterowanie manipulatorem przypadek 3D

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

Zad. 6: Sterowanie robotami mobilnymi w obecności przeszkód

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

INFORMATYKA Studia Niestacjonarne Elektrotechnika

Zad. 7: Sterowanie robotami mobilnymi w obecności przeszkód

Zad. 1: Sterowanie mimika

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

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

Kilka prostych programów

C++. Æwiczenia zaawansowane

Zad. 6: Sterowanie dronami w obecności przeszkód

C++ Przeładowanie operatorów i wzorce w klasach

Zad. 10: Sterowanie manipulatorem cz. 2 i 3

Operacje wejścia/wyjścia odsłona pierwsza

Programowanie w języku C++ Agnieszka Nowak Brzezińska Laboratorium nr 2

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Wstęp do programowania obiektowego. Przekazywanie parametrów do funkcji w C++ Metody i funkcje operatorowe Strumienie: standardowe, plikowe, napisowe

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

Semantyka i Weryfikacja Programów - Laboratorium 3

#include <stdio.h> int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

Nazwa wariantu modułu (opcjonalnie): Laboratorium programowania w języku C++

OPERACJE WEJŚCIA / WYJŚCIA. wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout)

Zaliczenie przedmiotu:

Programowanie w Javie 1 Wykład i Ćwiczenia 2 Przegląd podstawowych klas w Javie (elementy programowania obiektowego) Płock, 16 października 2013 r.

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Zmienne, stałe i operatory

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

A Zasady współpracy. Ocena rozwiązań punktów punktów punktów punktów punktów

Ćwiczenie 1. Wprowadzenie do programu Octave

Warto też w tym miejscu powiedzieć, że w C zero jest rozpoznawane jako fałsz, a wszystkie pozostałe wartości jako prawda.

Rozdział ten zawiera informacje o sposobie konfiguracji i działania Modułu OPC.

#include <stdio.h> void main(void) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

Język programowania DELPHI / Andrzej Marciniak. Poznań, Spis treści

7 Przygotował: mgr inż. Maciej Lasota

Program dopisujący gwiazdkę na końcu pliku tekstowego o nazwie podanej przez uŝytkownika oraz wypisujący zawartość tego pliku.

Wybrane wyniki w zakresie umiejętności matematycznych

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!

Biblioteka standardowa - operacje wejścia/wyjścia

Lab 9 Podstawy Programowania

Przedrostkowa i przyrostkowa inkrementacja i dekrementacja

Argumenty wywołania programu, operacje na plikach

Architektura komputera. Dane i rozkazy przechowywane są w tej samej pamięci umożliwiającej zapis i odczyt

Rozpoznawanie obrazu. Teraz opiszemy jak działa robot.

Ćwiczenie 1 - Arkusze kalkulacyjne

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

Podstawy Programowania 2

2 Przygotował: mgr inż. Maciej Lasota

Wstęp do Programowania, laboratorium 02

Ćwiczenie 1. Wprowadzenie do programu Octave

KURS LICZB ZESPOLONYCH

Wprowadzania liczb. Aby uniknąć wprowadzania ułamka jako daty, należy poprzedzać ułamki cyfrą 0 (zero); np.: wpisać 0 1/2

Pliki wykład 2. Dorota Pylak

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

Podstawy Automatyki ćwiczenia Cz.1. Środowisko Matlab

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

do instrukcja while (wyrażenie);

Techniki Programowania wskaźniki

QualitySpy moduł persystencji

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

Wstęp do Informatyki i Programowania Laboratorium: Lista 0 Środowisko programowania

Operacje na plikach. Informatyka. Standardowe strumienie wejścia i wyjścia

Języki programowania zasady ich tworzenia

Odczyt danych z klawiatury Operatory w Javie

4. Wyrzuć wyjątek jeśli zmienna ist nie istnieje bloki: try, catch i wyrzucanie wyjątku

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

Język C zajęcia nr 11. Funkcje

MATERIAŁY DYDAKTYCZNE. Streszczenie: Z G Łukasz Próchnicki NIP w ramach projektu nr RPMA /15

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Programowanie obiektowe - zadania

Odwrotna Notacja Polska

Kurs wyrównawczy - teoria funkcji holomorficznych

C++ - [1-3] Debugowanie w Qt Creator

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

Liczby zespolone. Magdalena Nowak. 23 marca Uniwersytet Śląski

PRZEWODNIK PO PRZEDMIOCIE

Obliczenia inżynierskie arkusz kalkulacyjny. Technologie informacyjne

Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Ćwiczenie 1. Podstawy. Wprowadzenie do programowania w języku C. Katedra Metrologii AGH

1. Wprowadzenie do C/C++

ROZSZERZANIE MOŻLIWOŚCI...

Transkrypt:

Laboratorium nr 4: Arytmetyka liczb zespolonych 1 Cel ćwiczenia Wykształcenie umiejętności definiowania przeciążeń operatorów arytmetycznych dwuargumentowych i jednoargumentowych dla własnych struktur danych. Nabycie umiejętności definiowania metod. Przećwiczenie podstawowych operacji na strumieniach plikowych. 2 Program zajęć Ocena realizacji zadania z poprzedniego laboratorium ocenie podlega poprawność programu, kompilacja (kompilacja musi przebiegać bez ostrzeżeń), styl pisania programu oraz opisy. Modyfikacja programu wg wskazań osoby prowadzacej ocenie będzie podlegała poprawność realizacji modyfikacji. Pracę nad modyfikacją programu (wszystkie operacje należy wykonywać na kopii) należy rozpocząć już w trakcie pierwszej fazy laboratorium, gdyż prowadzący nie będzie w stanie ocenić wcześniejszego programu wszystkim osobom jednocześnie. Realizacja wstępnej fazy prac nad nowym zadaniem pracę nad programem należy rozpocząć już w trakcie pierwszej fazy laboratorium, o ile uda się zakończyć wcześniej pracę nad modyfikacją pierwszego programu, a prowadzący nie zdąży ocenić wcześniejszego programu wszystkim osobom. Za punkt wyjścia do pracy nad nowym zadaniem należy przyjąć program z poprzedniego zadania. Zakładanym końcowym efektem tej fazy jest dodanie menu i przerobienie funkcji, które zadają pytania w ten sposób, aby użytkownik był pytany o wynik działania. W tej fazie należy ograniczyć się do działań na symbolach. Ocena realizacji wstępnej wersji programu 3 Opis zadania programowego W tym zadaniu ponownie trzeba będzie rozszerzyć i zmodyfikować wcześniejszy program. Tym razem program ma testować użytkownika z realizacji działań na liczbach zespolonych. Ma on udostępniać dwa typy testu. Pierwszy ma mieć dotychczasową formę, zaś drugi ma zadawać pytanie o wynik konkretnego działania. Zarówno w pierwszym, jak też w drugim przypadku, dane do testu mają być czytane z plików tekstowych znajdujących się w katalogu bieżącym. Dane do pierwszego testu należy umieścić w pliku test_liczby_zespolone.dat, zaś do drugie w pliku test_wyrazenia_zespolone.dat. Tak jak wcześniej, program musi zawierać kontrolę poprawności czytanych danych (zarówno z klawiatury, jak też z pliku) oraz także kontrolę poprawności otwarcia pliku. W przypadku napotkania błędnego zapisu wyrażenia w pliku (może to się odnosić do błędu liczby, formy nawiasu lub operatora) program powinien poinformować o wykrytym błędzie, pominąć tę linię i przejść do czytania następnego wyrażenia lub liczby. Ponadto program musi udostępniać proste menu, które pozwoli na wybór jednego z testów. Dla uproszczenia zakładamy, że liczby zespolone będziemy wprowadzać w nawiasach. 1

3.1 Działanie programu Układ pytań i odpowiedzi w niniejszym przykładzie należy traktować jako obowiązujący. Szczegółowe elementy, takie jak minki, są jedynie propozycją. jkowalsk@noxon: rozwiazanie>./test_arytmetyka Twoj wybor (m - menu)> x Bledna opcja menu. Twoj wybor (m - menu)> m Twoj wybor (m - menu)> w :? Podaj wynik operacji: (1.2+2i) + (0+2i) = Twoja odpowiedz: (1.2+3i) :( Blad. Prawidlowym wynikiem jest: 1.2+4i :? Podaj wynik operacji: (2-0i) * (-1+2.3i) = Twoja odpowiedz: (-z+4.6i) Blad wprowadzenia wartosci. Sprobuj jeszcze raz. Twoja odpowiedz: (-2+4.6i) :? Podaj wynik operacji: (1-4i) / (0-2i) = Twoja odpowiedz: (2+0.5i) :? Podaj wynik operacji: (1+2i) - (1-2i) Twoja odpowiedz: (0+4i) 2

:? Podaj wynik operacji: (0+0i) * (1241-2890i) Twoja odpowiedz: (0+0i) Koniec testu. Ilosc dobrych odpowiedzi: 3 Ilosc blednych odpowiedzi: 1 Wynik procentowy poprawnych odpowiedzi: 75.0% Twoj wybor (m - menu)> w Twoj wybor (m - menu)> l :? Podaj operację dodawania, ktorej wynikiem jest: (1+2i) Twoja odpowiedz: (1+0i)+(1+2i) :( Blad. Wynikiem tej operacji jest: (2+2i) :? Podaj operację odejmowania, ktorej wynikiem jest: (345-7i) Twoja odpowiedz: [1+0i)*(345-7i) Wprowadzony zostal blednie pierwszy argument. Sprobuj jeszcze raz. Twoja odpowiedz: (1+0i)=(345-7i) Wprowadzony zotal bledny operator =. Sprobuj jeszcze raz. Twoja odpowiedz: (1+0i)*(345-7i) Ilosc dobrych odpowiedzi: 1 Ilosc blednych odpowiedzi: 1 Wynik procentowy poprawnych odpowiedzi: 50.0% Twoj wybor (m - menu)> k Koniec dzialania programu. jkowalsk@noxon: rozwiazanie>_ 3

3.2 Format plików testowych 3.2.1 Plik test_liczby_zespolone.dat Plik zawiera zestaw liczb zespolonych. Jego zawartość przedstawiona jest poniżej. Błędy w zapisie niektórych liczb są celowe. (1.2+2i) (0+2j) (3+4) (5-7i) (2+ai) (4*3i) Plik ten znajduje się na panamincie/diablo w katalogu bk/edu/kpo/zad/z4. 3.2.2 Plik test_wyrazenia_zespolone.dat Poniżej przedstawiona jest zawartość pliku. W pliku specjalnie wprowadzone są błędne wyrażenia. (1.2+2i) + (0+2i) (2-0i) * (-1+1.3i) (2-0i) & (-1+1.3i) (1-4i) / (0-2i) (C-0i) + (-1+1.3i) (1+2i) - (1-2i) [1-0i] * [-1+1.3i] (0+0i) * (1241-2890i) Plik ten znajduje się na panamincie/diablo w katalogu bk/edu/kpo/zad/z4. 3.3 Definicje działań arytmetycznych Implementując działanie dzielenia liczb zespolonych należy wziąć pod uwagę, że można je zapisać następująco z 1 = z 1z 2 = z 1z 2 z 2 z 2 z 2 z 2 2 gdzie z 2 to liczba zespolona sprzężona do z 2, zaś z 2 jest modułem tej liczby. Należy zwrócić uwagę, że w ostatnim przypadku mamy dzielenie liczby zespolonej przez liczbę rzeczywistą. 3.4 Wymagania co do konstrukcji programu Oprócz wymagań sformułowanych w opisie zadania należy uwzględnić uwarunkowania przedstawione poniżej. Program musi zachować strukturę modułową i odpowiednią strukturę kartotek. O ile będzie to konieczne, należy zmodyfikować plik Makefile (np. gdy dodany zostanie nowy moduł). 4

Program powinien mieć osobny moduł, który zawiera definicje wszystkich niezbędnych metod klasy LZespolona oraz przeciążeń działań: dodawania, odejmowania, mnożenia i dzielenia. Musi on również zawierać przeciążenia operacji na strumieniach dla tej klasy. Należy również zdefiniować dzielenie przez liczbę i porównanie z liczbą. Nagłówek do tego modułu powinien zawierać definicję tej klasy i zapowiedź definicji odpowiednich przeciążeń. Dla uproszenia zakładamy, że liczbę zespoloną zapisujemy bez żadnych spacji. Operacje wyświetlania, jak też wczytywania liczb zespolonych (zarówno ze strumienia standardowego jak też plikowego) muszą być realizowane wyłacznie z wykorzystanie przeciążeń operatorów «i». Program nie może operować na standardowych struminiach, jak też strumieniach plikowych za pomocą funkcji języka C, takich jak scanf, fscanf, printf, fprintf itd. Należy też w sposób przemyślany wydzielić te funkcje, które biorą udział w interakcji z użytkownikiem i generują odpowiednie komunikaty dla niego, oraz te, które tego nie robią. W szczególności w bezpośredniej interakcji nie powinny brać udział przeciążenia operatorów. Wyjątkiem są tu komunikaty o wystąpieniu błędu fatalnego. W takim przypadku komunikat musi być kierowany na wyjście standard error (dostęp do niego jest poprzez obiekt cerr), a nie standard output (dostęp do niego jest poprzez obiekt cout). Wszystkie funkcje należy opisać. Należy także zwrócić uwagę, że szczególnie w przypadku operacji dzielenia niezbędne są odpowiednie warunki wstępne (jakie?). W trakcie kompilacji finalej wersji programu nie moga generować się żadne ostrzeżenia. Kompilację należy wykonywać z opcjami -Wall oraz -pedantic. Niniejsza uwaga dotyczy tego i wszystkich następnych programów realizowanych w ramach niniejszego kursu, o ile w opisie zadania nie będzie innych zaleceń. 3.5 Wersja uproszczona oceniana nie więcej niż na 3,5 Program nie zawiera menu, a jedynie przeróbkę wcześniejszej wersji programu na wariant liczb zespolonych. 3.6 Rozszerzenia nieobowiazkowe Rozszerzenieniem zadania jest możliwość czytania liczb zespolonych w skróconej notacji, która pomija liczbę zero oraz jedynkę. Tak więc taki program powinien umieć odczytać następujące wyrażenia: (1.2+2i)+(2i) (2)*(-1+2.3i) (-4i)/(3-i) 5