Laboratoria nr 13 program nr 2

Przekazywanie argumentów do funkcji przez wartość i referencje. Rekurencyjne wywołanie funkcji. Argumenty funkcji main.

UWAGA :: Proszę się zapoznać dokładnie z programem przedstawionym w wpisie  Laboratoria nr 13 program nr 1 zanim Państwo przystąpią do analizy niniejszego rozwiązania. Przykład ten jest rozszerzoną wersją wcześniejszego programu, dla osób które chcą poznać trochę więcej C++. Zachęcam do zgłębiania meandrów C++. Ewentualne pytania osób zainteresowanych zostaną omówione na zajęciach.

#include "stdafx.h"
#include <string>
#include <iostream>

using namespace std;

/**
	Podstawowa struktura do przetwarzania w programie
*/
struct statStr {
	std::string uName;
	int cLetter;
	int cToken;
};

/**
	Prototyp funkcji do uzupelniania struktury
	Struktura przekazywana jest przez referencje a nie wartosc.
	Jesli ktoras grupa chce korzystac z tego rozwiazania, to prosze podac
	uzasadnienie tego zabiegu oraz tego jak takie przekazywanie dziala.
	Proponuje zastosowania przekazywania przez wartosc, ktore latwiej jest na poczatku zrozumiec.
*/
void fillStr(statStr &sStr);

/**
	Prototyp funkcji do uzupelniania struktury
	Struktura przekazywana jest przez wskaznik a nie wartosc.
	Jesli ktoras grupa chce korzystac z tego rozwiazania, to prosze podac
	uzasadnienie tego zabiegu oraz tego jak takie przekazywanie dziala.
	Proponuje zastosowania przekazywania przez wartosc, ktore latwiej jest na poczatku zrozumiec.
	@note :: funkcja przeciazona
*/
void fillStr(statStr *sStr);

/**
	Prototyp funkcji do pokazywania elementow (pol) struktury.
	Struktura przekazywana jest przez referencje a nie przez wartosc.
	Do czego sluzy modyfikator const w zapisie w przypadku gdy przekazujemy strukture przez referencje?
	Czy taki modyfikator jest potrzebny w przypadku przekazywania przez wartosc?
	Jesli ktoras grupa chce korzystac z tego rozwiazania, to prosze podac
	uzasadnienie tego zabiegu oraz tego jak takie przekazywanie dziala.
	Proponuje zastosowania przekazywania przez wartosc, ktore latwiej jest na poczatku zrozumiec.
*/
void showStr(const statStr &sStr);

/**
	Prototyp funkcji do pokazywania elementow (pol) struktury.
	Struktura przekazywana jest przez referencje a nie przez wartosc.
	Do czego sluzy modyfikator const w zapisie w przypadku gdy przekazujemy strukture przez referencje?
	Czy taki modyfikator jest potrzebny w przypadku przekazywania przez wartosc?
	Jesli ktoras grupa chce korzystac z tego rozwiazania, to prosze podac
	uzasadnienie tego zabiegu oraz tego jak takie przekazywanie dziala.
	Proponuje zastosowania przekazywania przez wartosc, ktore latwiej jest na poczatku zrozumiec.
	@note :: funkcja przeciazona
*/
void showStr(const statStr *sStr);

/**
	Prototy funkcji do laczenia pol struktury.
	Struktury przekazywane sa przez referencje a nie przez wartosc.
	Do czego sluzy modyfikator const w zapisie w przypadku gdy przekazujemy strukture przez referencje?
	Czy taki modyfikator jest potrzebny w przypadku przekazywania przez wartosc?
	Jesli ktoras grupa chce korzystac z tego rozwiazania, to prosze podac
	uzasadnienie tego zabiegu oraz tego jak takie przekazywanie dziala.
	Proponuje zastosowania przekazywania przez wartosc, ktore latwiej jest na poczatku zrozumiec.
*/
statStr joinStr(const statStr &sStr1, const statStr &sStr2);

/**
	UWAGA !!!
	Znaki ? trzeba odpowiednio czyms zastapic, aby program sie skompilowal
	Prototyp funkcji do zrealizowania zadania polegajacego na zlaczeniu struktur,
	bez zwracania struktury jako wyniku.
*/
void joinStr(? , ... , ?);

/**
	Prototyp funkcji do zliczania ilosci znakow w podanym lancuhcu
*/
int cLetter(string s);

/**
	Prototyp funkcji do zliczania ilosci wyrazen w podanym lancuchu
*/
int cToken(string s);

/**
	Program prezentujacy mozliwosc wykorzystania funkcji operujacych
	na zdefiniowanej strukturze z dodatkowym rozwiazaniem polegajacym
	na dynamicznej alokacji pamieci na strukture.

	@author Marcin Mironczuk
*/
int main()
{
	using namespace std;

	// Tworzenie zmiennych o typie statStr (struktura)
	statStr s1, s2;
	
	// Tworzenie zmiennej przechowujacej informacje z obu ww. struktur
	statStr sumaStr;

	// Uzupelnianie struktur
	fillStr(s1);
	fillStr(s2);

	std::cout << std::endl;

	// Pokazanie zawartosci struktur
	showStr(s1);
	showStr(s2);

	// Polaczenie struktur
	sumaStr = joinStr(s1, s2);

	// Pokazanie zawartosci struktury polaczonej
	showStr(sumaStr);

	/**
		Zawansowane uzycie struktur z alokacja dynamiczna pamieci
	*/
	statStr *s = new statStr;

	fillStr(s);
	showStr(s);

	// Zwolnienie przydzielonej pamieci
	delete s;

	std::cin.get();
	std::cin.get();

	return 0;
}

void fillStr(statStr &sStr) {
	std::string temp;
	
	int countLetter = 0;
	int countToken = 0;

	std::cout << "Podaj imie i nazwisko: " << std::endl;
	getline(std::cin, sStr.uName);

	std::cout << "Podaj lancuch do wprowadzenia: " << std::endl;
	getline(std::cin, temp);
	
	countLetter = cLetter(temp);
	countToken = cToken(temp);

	sStr.cLetter = countLetter;
	sStr.cToken = countToken;
}

void fillStr(statStr *sStr) {
	std::string temp;
	
	int countLetter = 0;
	int countToken = 0;

	std::cout << "Podaj imie i nazwisko: " << std::endl;
	getline(std::cin, sStr->uName);

	std::cout << "Podaj lancuch do wprowadzenia: " << std::endl;
	getline(std::cin, temp);
	
	countLetter = cLetter(temp);
	countToken = cToken(temp);

	sStr->cLetter = countLetter;
	sStr->cToken = countToken;
}

void showStr(const statStr &sStr) {
	std::cout << "Podane imie i nazwisko to: " << sStr.uName << std::endl;
	std::cout << "Ilosc znakow w wprowadzonym lancuchu to: " << sStr.cLetter << std::endl;
	std::cout << "Ilosc wyrazen w wprowadzonym lancuchu to: " << sStr.cToken << std::endl;
	std::cout << std::endl;
}

void showStr(const statStr *sStr) {
	std::cout << "Podane imie i nazwisko to: " << sStr->uName << std::endl;
	std::cout << "Ilosc znakow w wprowadzonym lancuchu to: " << sStr->cLetter << std::endl;
	std::cout << "Ilosc wyrazen w wprowadzonym lancuchu to: " << sStr->cToken << std::endl;
	std::cout << std::endl;
}

statStr joinStr(const statStr &sStr1, const statStr &sStr2) {
	// Algorytm laczenia pol struktury
}

void joinStr(?, ..., ?) {
	// Algorytm laczenia struktur
}

int cLetter(string s) {
	return s.length();
}

int cToken(string s) {
	// Algorytm zaimplementowany na wczesniejszych zajeciach

	return 0;
}

Jedna odpowiedź do tego wpisu.

  1. Autor: Kareem dnia 28.05.11 o godz. 11:16

    Very nice post. I just stumbled upon your blog and wishewd to ssay that I’ve truly enjoyed browsing your blog posts.
    After all I’ll be subscribing to your feed and I hope youu wrte again soon!

Skomentuj ten wpis