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