18 maj
Laboratoria nr 9 program nr 1
Tablice dwuwymiarowe. Operacje na tablicach. Przykłady kodu w C/C++.
#include "stdafx.h" #include <string> #include <iostream> // Zadeklarowanie stalych do okreslenia wielkosci // dwuwymiarowej tablicy przechowujacej wartosci pomiarow dla poszczegolnych badaczy const int iloscBadaczy = 4; const int iloscPomiarow = 5; // Struktura do przechowywania informacji o badaczu S. Prata s. 137 - 146 struct badacze { int liczbaPorzadkowa; std::string name; }; /** * * Program Główny prezentujący funckje C++ wyprowadzania treści na wyjście konsoli. * Program prezentujący zastosowanie tablic dwuwymiarowych oraz używania łańcuchów zanków. * Program pobiera wartości zmierzonych rezystancji przez daną liczbę badaczy a następnie oblicza * i prezentuje w ustalony sposób wartości wybranych wskźników. * * @author Marcin Mirończuk * */ int main() { // Zainicjowanie tabeli przechowujacej wyniki pomiarow badaczy wartosciami zerowymi float pomiarNapiecia[iloscBadaczy][iloscPomiarow] = { {0,0,0,0,0}, {0,0,0,0,0}, {0,0,0,0,0}, {0,0,0,0,0} }; // Zainicjowanie tablic jednowymiarowych przechowujacych statystyki w postaci: // - sumy pomiarow // - sredniej pomiarow // - maksymalnej wartosci pomiarow // - minimalnej wartosci pomiarow // dla kazdego z badaczy float sumaPomiarow[iloscBadaczy] = {0, 0, 0, 0}; float sredniaPomiarow[iloscBadaczy] = {0, 0, 0, 0}; float maksPomiarow[iloscBadaczy] = {0, 0, 0, 0}; float minPomiarow[iloscBadaczy] = {0, 0, 0, 0}; // Nazwy badaczy inicjalizowane za pomoca struktury const badacze sBadaczeNapiecia[iloscBadaczy] = { {1, "Janek"}, {2, "Aleks"}, {3, "Magda"}, {4, "Alina"} }; /** * Materiały do tablic jednowymiarowych S. Prata s. 114 - 118 "Tablice w skrócie" * Materiały do tablic dwuwymiarowych S. Prata s. 234 - 238 "Petle zagniezdzone i dwuwymiarowe tablice" * Materiały do łańcuchów znaków S. Prata s. 118 - 124 "Tablice w skrócie" * Materiały do wzkaznikow i łańcuchów znaków S. Prata s. 170 - 175 * Materiały o klasie string S. Prata s. 130 - 137 * * Podstawowe materiały http://we.pb.edu.pl/~jforenc/inf1-dzienne/INF1-2011-Prac-06.pdf * Dodatkowe materiały http://warsztat.gd/files/articles/megatutorial/1_5.pdf * * DLA DOCIEKLIWYCH W CELU POSZERZENIA WIADOMOSCI * Materiały o strukturach S. Prata s. 137 - 146 * Materiały dla dociekliwych - wksażniki, alokacje pamieci etc. S. Prata s. 151 - 182 */ // Nazwy badaczy inicjalizowane za pomoca tablicy wskaznikow char const char * ptBadaczeNapiecia[iloscBadaczy] = { "Janek", "Aleks", "Magda", "Alina" }; // Nazwy badaczy inicjalizowane za pomoca tablicy lancucha znakow const char ctBadaczeNapiecia[iloscBadaczy][25] = { "Janek", "Aleks", "Magda", "Alina" }; // Nazwy badaczy inicjalizowane za pomoca klasy string const std::string stBadaczeNapiecia[iloscBadaczy] = { "Janek", "Aleks", "Magda", "Alina" }; char znacznik = 'c'; while(znacznik != 'q') { std::cout << "Wprowadz wyniki uzyskane przez " << iloscBadaczy << " badaczy\n"; for(int badacz = 0; badacz < iloscBadaczy; badacz++) { std::cout << "Wprowadz wyniki badacza nr. " << badacz+1 << ". " << ptBadaczeNapiecia[badacz] << ":\n"; for(int pomiar = 0; pomiar < iloscPomiarow; pomiar++) { std::cout << "Wynik pomiaru nr. " << pomiar+1 << ": "; std::cin >> pomiarNapiecia[badacz][pomiar]; } } std::cout << std::endl; std::cout << "Wyniki pomiarow zarejstrowane przez " << iloscBadaczy << " badaczy\n"; for(int badacz = 0; badacz < iloscBadaczy; badacz++) { std::cout << "Wyniki badacza nr. " << badacz+1 << ". " << ctBadaczeNapiecia[badacz] << ": "; for(int pomiar = 0; pomiar < iloscPomiarow; pomiar++) { std::cout << pomiarNapiecia[badacz][pomiar] << "\t"; } std::cout << std::endl; } // Sumowanie pomiarow dla poszczegolnych badaczy // Srednia pomaiarow kazdego badacza for(int badacz = 0; badacz < iloscBadaczy; badacz++) { float sumaNapiecia = 0; float sredniaNapiecia = 0; for(int pomiar = 0; pomiar < iloscPomiarow; pomiar++) { sumaNapiecia += pomiarNapiecia[badacz][pomiar]; } sumaPomiarow[badacz] = sumaNapiecia; sredniaPomiarow[badacz] = sumaNapiecia/iloscPomiarow; } // Wykrywanie wartosci maksymalnej pomiaru dla poszczegolnych badaczy // Wykrywanie wartosci minimalnej pomiaru dla poszczegolnych badaczy for(int badacz = 0; badacz < iloscBadaczy; badacz++) { // inicjalizacja zmiennej do porownania int m1 = 0; // Nomer pozycji na kotrej znajduje sie najwiekszy element int x1 = 0; // inicjalizacja zmiennej do porownania int m2 = 0; // Nomer pozycji na kotrej znajduje sie najwiekszy element int x2 = 0; for(int pomiar = 0; pomiar < iloscPomiarow; pomiar++) { if (pomiarNapiecia[badacz][pomiar] > m1) { m1 = pomiarNapiecia[badacz][pomiar]; x1 = pomiar; } if(pomiarNapiecia[badacz][pomiar] < m2) { m2 = pomiarNapiecia[badacz][pomiar]; x2 = pomiar; } } maksPomiarow[badacz] = pomiarNapiecia[badacz][x1]; minPomiarow[badacz] = pomiarNapiecia[badacz][x2]; } // Wyswietlenie statystyk dla poszczegolnych badaczy std::cout << std::endl; std::cout << "Statystyki pomiarow zarejstrowane przez " << iloscBadaczy << " badaczy\n"; std::cout << "\t\t\t\t" << "SUMA\t" << " SREDNIA\t MAX. POM \t MIN. POM. \t \n"; for(int badacz = 0; badacz < iloscBadaczy; badacz++) { std::cout << "Statystyki badacza nr. " << badacz+1 << ". " << stBadaczeNapiecia[badacz] << ": "; std::cout << sumaPomiarow[badacz] << "\t"; std::cout << sredniaPomiarow[badacz] << "\t"; std::cout << maksPomiarow[badacz] << "\t"; std::cout << minPomiarow[badacz] << "\t"; std::cout << std::endl; } // Wyswietlenie czy pomiary sie zgadzaja float oczekiwanaSrednia = 0; float odchylkaSredniej = 0; float odchylkaPlus = 0; float odchylkaMinus = 0; std::cout << std::endl; std::cout << "Wprowadz teoretyczna wartosc sredniej: "; std::cin >> oczekiwanaSrednia; std::cout << "Wprowadz mozliwa odchylke od wartosci sredniej: "; std::cin >> odchylkaSredniej; odchylkaPlus = oczekiwanaSrednia+odchylkaSredniej; odchylkaMinus = oczekiwanaSrednia+odchylkaMinus; for(int badacz = 0; badacz < iloscBadaczy; badacz++) { std::cout << "Statystyki w postaci sredniej badacza nr. " << badacz+1 << ". " << sBadaczeNapiecia[badacz].name << ": "; if(sredniaPomiarow[badacz] > odchylkaPlus) { std::cout << "Odbiega od teoretycznej wartosci sredniej.\n"; } else if(sredniaPomiarow[badacz] < odchylkaMinus) { std::cout << "Odbiega od teoretycznej wartosci sredniej.\n"; } else { std::cout << "Nie odbiega od teoretycznej wartosci sredniej.\n"; } } std::cout << "Znak q konczy program\n"; std::cin >> znacznik; } return 0; }