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