Poslao: 05 Apr 2012 20:12
|
offline
- kupi
- Novi MyCity građanin
- Pridružio: 09 Feb 2012
- Poruke: 8
|
Imam za zadaću da napravim funkciju koja simulira rad funkcija find_if i replace_copy_if. Napravljene funkcije trebaju biti zasnovane na pokazivačkoj aritmetici i na potpunoj dedukciji tipova. Također treba da rade i sa iteratorima. Za test funkcija se koriste dekovi. Napravio sam funkcije koje cu postaviti u nastavku teksta, ali je problem što kad pozivam te funkcije javlja mi codeblocks sljedecu gresku :
error: no matching function for call to `KopirajUzZamjenuUvjetno(std::_Deque_iterator<int, int&, int*>, std::_Deque_iterator<int, int&, int*>, int*&, <unknown type>, int)'.
Mislim da je problem zbog koristenja pomocne funkcije koja ispituje potrebni uslov. Uslov za pomocnu funkciju koja se koristi u find_if je da se nađe prvi element deka koji ima parnu cifru. Uslov za drugu pomocnu funkciju koja se koristi u replace_copy_if je da se svaki prosti broj zamijeni nulom.
Evo kodovi koje sam napisao. Ne znam je li po pravilima foruma ovako postaviti kodove, ali čini mi se da je ovako preglednije pošto je malo duži kod.
Kod za find_if : find_if
Kod za replace_copy_if: replace_copy_if
Nadam se da bit neko od pomoći.
Hvala.
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
|
Poslao: 05 Apr 2012 23:57
|
offline
- kupi
- Novi MyCity građanin
- Pridružio: 09 Feb 2012
- Poruke: 8
|
morando ::Kolega, imas ovde iplementacije funkcija sa primerima:
replace_copy_if
find_if
pa po tim funkcijama sam i radio
|
|
|
|
Poslao: 06 Apr 2012 10:48
|
offline
- morando
- Građanin
- Pridružio: 19 Maj 2011
- Poruke: 297
|
#include <iostream>
#include <deque>
template<class InputIterator, class Predicate>
InputIterator find_if ( InputIterator first, InputIterator last, Predicate pred )
{
for ( ; first!=last ; first++ )
if ( pred(*first) )
break;
return first;
}
template < class InputIterator, class OutputIterator, class Predicate, class T >
OutputIterator replace_copy_if ( InputIterator first, InputIterator last, OutputIterator result, Predicate pred, const T& new_value )
{
for (; first != last; ++first, ++result)
*result = (pred(*first)) ? new_value : *first;
return result;
}
bool isEven(int i)
{
return ((i%2)==0);
}
bool isPrime(int n)
{
for(int i = 2; i < n; i++)
{
if(n%i==0)
{
return false;
}
}
return true;
}
int main()
{
std::deque<int> d, d2;
d.push_back(3);
d.push_back(8);
d.push_back(11);
d.push_back(17);
d.push_back(24);
auto it = find_if(d.begin(), d.end(), isEven);
if(it != d.end())
{
std::cout << "Prvi element u deku sa parnom cifrom je " << *it << ", a nalazi se na poziciji broj " << it - d.begin() << std::endl;
}
else
{
std::cout << "U deku se ne nalazi ni jedan element sa parnom cifrom." << std::endl;
}
d2.resize(d.size());
replace_copy_if(d.begin(), d.end(), d2.begin(), isPrime, 0);
std::cout << "dek 1 : ";
for(auto it = d.begin(); it != d.end(); ++it)
{
std::cout << *it << ", ";
}
std::cout << std::endl;
std::cout << "dek 2 : ";
for(auto it = d2.begin(); it != d2.end(); ++it)
{
std::cout << *it << ", ";
}
std::cout << std::endl;
return 0;
}
Nema smisla da ti funkcije Parni i Prost budu template jer u njima koristis % (modulo) koji radi samo sa int tipovima.
|
|
|
|
Poslao: 06 Apr 2012 15:23
|
offline
- kupi
- Novi MyCity građanin
- Pridružio: 09 Feb 2012
- Poruke: 8
|
Napisano: 06 Apr 2012 15:00
morando ::
#include <iostream>
#include <deque>
template<class InputIterator, class Predicate>
InputIterator find_if ( InputIterator first, InputIterator last, Predicate pred )
{
for ( ; first!=last ; first++ )
if ( pred(*first) )
break;
return first;
}
template < class InputIterator, class OutputIterator, class Predicate, class T >
OutputIterator replace_copy_if ( InputIterator first, InputIterator last, OutputIterator result, Predicate pred, const T& new_value )
{
for (; first != last; ++first, ++result)
*result = (pred(*first)) ? new_value : *first;
return result;
}
bool isEven(int i)
{
return ((i%2)==0);
}
bool isPrime(int n)
{
for(int i = 2; i < n; i++)
{
if(n%i==0)
{
return false;
}
}
return true;
}
int main()
{
std::deque<int> d, d2;
d.push_back(3);
d.push_back(8);
d.push_back(11);
d.push_back(17);
d.push_back(24);
auto it = find_if(d.begin(), d.end(), isEven);
if(it != d.end())
{
std::cout << "Prvi element u deku sa parnom cifrom je " << *it << ", a nalazi se na poziciji broj " << it - d.begin() << std::endl;
}
else
{
std::cout << "U deku se ne nalazi ni jedan element sa parnom cifrom." << std::endl;
}
d2.resize(d.size());
replace_copy_if(d.begin(), d.end(), d2.begin(), isPrime, 0);
std::cout << "dek 1 : ";
for(auto it = d.begin(); it != d.end(); ++it)
{
std::cout << *it << ", ";
}
std::cout << std::endl;
std::cout << "dek 2 : ";
for(auto it = d2.begin(); it != d2.end(); ++it)
{
std::cout << *it << ", ";
}
std::cout << std::endl;
return 0;
}
Nema smisla da ti funkcije Parni i Prost budu template jer u njima koristis % (modulo) koji radi samo sa int tipovima.
ali uslov zadatka je potpuna dedukcija tipova, tako da moram to stavit :/
Dopuna: 06 Apr 2012 15:23
Probat ću sa int tipom pa valjda mi se prizna. Hvala u svakom slučaju.
|
|
|
|
Poslao: 06 Apr 2012 15:36
|
offline
- morando
- Građanin
- Pridružio: 19 Maj 2011
- Poruke: 297
|
Pa jel moze neki drugi tip osim int da bude paran, neparan i prost?
Mora da ti priznaju, a mozda te ovako testiraju da li razmisljas.
|
|
|
|