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;
}

Skomentuj ten wpis