Kupa activated [PL]

EDN Admin

Well-known member
Joined
Aug 7, 2010
Messages
12,794
Location
In the Machine
Korzystając z mechanizmów szablonów i iteratorów, napisz następujące podprogramy niezależnie od typu kontenerów i typów danych:
1.Wypisz(poczatek, koniec, n) – podprogram ma za zadanie wypisanie w (…) iteratorów przechowywanych w kontenerze pomiędzy strukturami początek i koniec. Dane mają być wypisane w n kontenerach. Do wypisania należy skorzystać z std::cout.
2. Unikat (poczatek, koniec, znaleziono) – podprogram zwracający iterator wskazujący na unikatowy (występujący tylko jednokrotnie) element kontenera. W przypadku braku unikatowego elementu ma zostać zwrócony iterator do końca przedziału. Jeżeli unikatowych
elementów jest więcej niż jeden, zostawiamy element pierwszy.
3. Arytmetyczny(początek koniec, a0, r) – podprogram uzupełnia kontener wartościami ciągu arytmetycznego. Przykład: Przed wypełnieniem: [1 2 3 4] -> Po generacji a0 = 2, r = 5 [2 7 12 17]
Działanie podprogramów przestaw na wektorach przechowujących wartości typu int i float.
Aby wyznaczyć ile elementów znajduje się między dwoma iteratorami, należy odjąć iterator początkowy od iteratora końcowego.
<pre class="prettyprint #include "stdafx.h"
#include <typeinfo>
#include <stdio.h>
#include <iostream>
#include <vector>
#include <conio.h>
using namespace std;
template <typename TYPa, typename TYPb>
void Wypisz (TYPa poczatek, TYPa koniec, TYPb n){
vector<TYPb>::iterator V1_Iter;
short unsigned int i=0;
for (V1_Iter = poczatek; V1_Iter != koniec; V1_Iter++){
cout<< " " << *V1_Iter;
i++;
if(i==n){
cout<<endl;
i=0;
}
}
}
template <typename TYPa, typename TYPb>
TYPb Unikat (TYPa poczatek, TYPa koniec, TYPb znaleziono){
vector<TYPb>::iterator V1_Iter;
for (V1_Iter = poczatek; V1_Iter != koniec; V1_Iter++){
if ( *V1_Iter == znaleziono)
return *V1_Iter;
}
V1_Iter = koniec - 1;
return *V1_Iter;
}
template <typename TYPa, typename TYPb>
void Arytmetyczny(TYPa poczatek, TYPa koniec, TYPb a0, TYPb r){
vector<TYPb>::iterator V1_Iter;
TYPb temp = a0;
for (V1_Iter = poczatek; V1_Iter != koniec; V1_Iter++){
*V1_Iter = temp;
temp+=r;
//cout<< " " << temp;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
vector<int> i1 (5,2);
vector<float> f1 (2,4);
float unique_f; int unique_i;
Arytmetyczny<vector<int>::iterator,int>(i1.begin(),i1.end(),2,6);
Wypisz<vector<int>::iterator,int>(i1.begin(),i1.end(),3);
unique_i=Unikat<vector<int>::iterator,int>(i1.begin(),i1.end(),8);
cout <<endl << "Unikat int: "<< unique_i << endl;
Arytmetyczny<vector<float>::iterator,float>(f1.begin(),f1.end(),2.80,5.31);
Wypisz<vector<float>::iterator,float>(f1.begin(),f1.end(),3);
unique_f=Unikat<vector<float>::iterator,float>(f1.begin(),f1.end(),8.11);
cout<< endl<<"Unikat float: "<< unique_f << endl;
getch();
return 0;
} [/code]
<br/>
<img alt="" src="http://img545.imageshack.us/img545/3637/78569490.jpg
<pre class="prettyprint #include "stdafx.h"
#include <vector>
#include <list>
#include <iostream>
using namespace std;
class Dzialka
{
private:
double szerokosc, wysokosc, cena;
public :
Dzialka (double SZER, double WYS, double CENA) : szerokosc(SZER), wysokosc(WYS), cena(CENA) {}
double ZwrocSzer() { return szerokosc; }
double ZwrocWys() { return wysokosc; }
double Cena() { return szerokosc*wysokosc*cena; }
};
template <class Kontener>
void Wyszukaj(double Cena, typename Kontener::iterator &poczatek,
typename Kontener::const_iterator &koniec)
{
for (Kontener::iterator Aktualny = poczatek; Aktualny != koniec; ++Aktualny)
{
if (Aktualny->Cena() < Cena)
{
printf ("Szerokosc %.2lf, Wysokosc %.2lf, dzialka o cenie : %.2lfn",
Aktualny->ZwrocSzer(), Aktualny->ZwrocWys(), Aktualny->Cena());
}

}
}
int main()
{
vector <Dzialka> tab;
list <Dzialka> lista;
double szer,wys,cena;
FILE *plik = fopen("baza.txt","r");
if(plik)
{
while(!feof(plik))
{
fscanf(plik, "%lf %lf %lfn", &szer, &wys, &cena);
tab.push_back(Dzialka(szer, wys, cena));
lista.push_back(Dzialka(szer, wys, cena));
}
fclose(plik);
printf ("Podaj cene : ");
scanf("%s", &cena);
printf ("Wyswietlam dla Vectora : n");
Wyszukaj<vector<Dzialka>>(cena, tab.begin(), tab.end());
printf ("Wyswietlam dla Listy : n");
Wyszukaj<list<Dzialka>>(cena, lista.begin(), lista.end()); system("pause"); return 0; } [/code]
<br/>
<pre class="prettyprint #include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>
#include <list>
#include <fstream>
#include <conio.h>
using namespace std;
struct Adres
{
private:
string nazwisko;
string ulica;
unsigned int numer;
public:
Adres(const string &Nazwisko, const string &Ulica, const unsigned int Numer)
: nazwisko(Nazwisko), ulica(Ulica), numer(Numer)
{};
bool Pasuje(const string &Szukane) {
return (nazwisko.find(Szukane) != -1) ? true : false;
}
void Wyswietl() const {
cout << nazwisko << ", ul. " << ulica << << numer << endl;
}
};
template <class Kontener>
void Wyszukaj(typename Kontener::iterator &poczatek, typename Kontener::iterator &ostatni, const string &Szukane)
{
for(Kontener::iterator aktualny=poczatek; aktualny!=ostatni; ++aktualny)
{
if(aktualny -> Pasuje(Szukane))
aktualny->Wyswietl();
}
}
int _tmain(int argc, _TCHAR* argv[])
{
unsigned int tempNr;
string tempNazwisko, tempUlica;
string Szukam;
vector<Adres> wektor;
list<Adres> lista;
fstream plik;
plik.open("rekordy.txt");
if(plik.is_open())
{
while(!plik.eof())
{
plik >> tempNazwisko; plik >> tempUlica; plik >> tempNr;
wektor.push_back(Adres(tempNazwisko, tempUlica, tempNr));
lista.push_back(Adres(tempNazwisko, tempUlica, tempNr));
}
plik.close();
for(;;)
{
cout << "Szukane: ";
cin >> Szukam;
Wyszukaj<vector<Adres>>(wektor.begin(), wektor.end(), Szukam);
Wyszukaj<list<Adres>>(lista.begin(), lista.end(), Szukam);
}
}
_getch();
return 0;
} [/code]
<br/>
<img alt="" src="http://img254.imageshack.us/img254/4860/12998461.jpg
<pre class="prettyprint #include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>
#include <list>
#include <fstream>
#include <conio.h>
using namespace std;
struct Adres
{
private:
string nazwisko;
string ulica;
unsigned int numer;
public:
Adres(const string &Nazwisko, const string &Ulica, const unsigned int Numer)
: nazwisko(Nazwisko), ulica(Ulica), numer(Numer)
{};
bool Pasuje(const string &Szukane) {
return (nazwisko.find(Szukane) != -1) ? true : false;
}
void Wyswietl() const {
cout << nazwisko << ", ul. " << ulica << << numer << endl;
}
};
template <class Kontener>
void Wyszukaj(typename Kontener::iterator &poczatek, typename Kontener::iterator &ostatni, const string &Szukane)
{
for(Kontener::iterator aktualny=poczatek; aktualny!=ostatni; ++aktualny)
{
if(aktualny -> Pasuje(Szukane))
aktualny->Wyswietl();
}
}
int _tmain(int argc, _TCHAR* argv[])
{
unsigned int tempNr;
string tempNazwisko, tempUlica;
string Szukam;
vector<Adres> wektor;
list<Adres> lista;
fstream plik;
plik.open("rekordy.txt");
if(plik.is_open())
{
while(!plik.eof())
{
plik >> tempNazwisko; plik >> tempUlica; plik >> tempNr;
wektor.push_back(Adres(tempNazwisko, tempUlica, tempNr));
lista.push_back(Adres(tempNazwisko, tempUlica, tempNr));
}
plik.close();
for(;;)
{
cout << "Szukane: ";
cin >> Szukam;
Wyszukaj<vector<Adres>>(wektor.begin(), wektor.end(), Szukam);
Wyszukaj<list<Adres>>(lista.begin(), lista.end(), Szukam);
}
}
_getch();
return 0;
} [/code]
<br/>


View the full article
 
Back
Top