Strona 1 z 1

[c++] test funkcji/pobranie linii tekstu

: 28 kwie 2016, o 16:17
autor: alchem
Mam napisać funkcję testująca dla planu spłaty kredytu.
Kod wygląda tak:

Kod: Zaznacz cały

#include <iostream>
#include <cstdlib>
#include <cassert>
//using namespace std;

std::string napis (float k, float r, float R, int dzien, int miesiac, int rok);

void test_napis(void)
{

 assert(napis(123, 0.01, 1, 10, 10, 2000) == "Takiego kredytu to Ty nigdy nie splacisz!");

}


int main()
{
    test_napis();
    float wys_kredytu, stopa_pro, wys_splaty;
    int dzien, miesiac, rok;
    std::cout << "Podaj wysokosc kredytu: ";
    std::cin  >> wys_kredytu;
    std::cout << "Podaj wysokosci rocznej stopy procentowej "<<std::endl;
    std::cout << "(np dla 3 % wpisz '0.03'): ";
    std::cin  >> stopa_pro;
    std::cout << "Podaj w jakiej kwocie rocznej bedziesz splacal kredyt: ";
    std::cin  >> wys_splaty;
    std::cout << "Podaj date wziecia kredytu"<<std::endl;
    std::cout << "(dd mm rrrr): ";
    std::cin  >> dzien >> miesiac >> rok;
    std::cout << napis (wys_kredytu, stopa_pro, wys_splaty, dzien, miesiac, rok);


    return EXIT_SUCCESS;
}


std::string napis (float k, float r, float R, int dzien, int miesiac, int rok)
{

 k = k*(1+r);
 int i = 0;

 while(k > 0)
 {
   i++;
   if(k - R > k/(1+r))
     {
      return "Takiego kredytu to Ty nigdy nie splacisz!";
     }
   if(k > 0)
          std::cout << "Zadluzenie na dzien: "<<dzien<<"."<< miesiac << "." << rok+i<<" wynosi: "  << k << std::endl;
   if(k >= R )
          std::cout << "Placisz: " << R <<"zl" << std::endl<< std::endl;
   else
          std::cout << "Placisz: " << k <<"zl" << std::endl<< std::endl;

   k = k*(1+r) - R;

 }
  std::cout << "Splaciles wlasnie kredyt!" << std::endl<< std::endl;


return "???????";

}









Nie wiem jednak jak mogę napisać test kiedy kredyt da się spłacić, wtedy funkcja generuje kilka/kilkanaście linii tekstu, myślałem o tablicach typu string, ale to chyba słaby pomysł?
Ma ktoś jakiś pomysł?

[c++] test funkcji/pobranie linii tekstu

: 28 kwie 2016, o 19:36
autor: xxmikolajx
co znaczy, że kredyt da się spłacić?
i co ma robić funkcja testująca? (specyfikacja)

[c++] test funkcji/pobranie linii tekstu

: 28 kwie 2016, o 19:59
autor: alchem
Jeśli po spłacie pierwszej raty pozostała kwota do spłacenia będzie wyższa, równa od tej, którą pożyczyliśmy to nigdy go nie spłacimy.

Napisz funkcję, która obliczy napis będący rozpisaniem planu wpłat dla zadanego zadłużenia K, stopy r i raty R. Rozpoznaj sytuację, w której wybrana rata R nie wystarczy do spłaty zadłużenia. Napisz funkcję testującą wygenerowany napis.


Mój napis wygląda mniej więcej tak:


Zadłużenie na dzien 10.10.2001 150 zl
Placisz : 50zl

Zadłużenie na dzien 10.10.2002 110 zl
Placisz : 50zl

.
.
.
Zadłużenie na dzien 10.10.200x 10 zl
Placisz : 10zl

Splaciles wlasnie kredyt!



[c++] test funkcji/pobranie linii tekstu

: 28 kwie 2016, o 20:10
autor: Afish
Zamiast wypisywać bezpośrednio przygotuj najpierw wielki string i zwróć go z funkcji, a wypisz piętro wyżej. Potem w funkcji testującej sprawdzisz cały string.

[c++] test funkcji/pobranie linii tekstu

: 28 kwie 2016, o 21:09
autor: alchem
Myślałem o takim 'stringu' ale pojawia się problem jak tam umieścić

Kod: Zaznacz cały

std::cout << "Zadluzenie na dzien: "<<dzien<<"."<< miesiac << "." << rok+i<<" wynosi: "  << k << std::endl;
bo nie mogę sobie tego tak poprostu dopisać do stringu bo wystepuja tam zmienne interaktywne (jeśli można tak to nazwać), do wrzucenia tego nie będzie służyło czasem c_str();??
Używałem to kiedy chciałem podać w konsoli nazwę pliku do otwarcia tzn

Kod: Zaznacz cały

std::ifstream plik (nazwa_pliku.c_str());
Ale nawet jeśli tak to chyba nie za bardzo wiem jak go użyć.

[c++] test funkcji/pobranie linii tekstu

: 29 kwie 2016, o 09:10
autor: Afish
Użyj stringstreama: ... -tutorial/
A jak nie rozumiesz jakiejś metody, to szukaj w dokumentacji: ... ring/c_str

[c++] test funkcji/pobranie linii tekstu

: 30 kwie 2016, o 15:37
autor: alchem
[Edit]

-- 30 kwi 2016, o 20:43 --

Już wiem jak to zrobić, tzn :

Kod: Zaznacz cały

 
   stringstream ss;
    int a = 23;

    ss << 1234 << "tak " << a;
    std::string lol = ss.str();
    std::cout << lol << " tekst";
Tylko dlaczego w moim programie wywala mi błąd??
aggregate 'std::stringstream ss' has incomplete type and cannot be defined

Kod: Zaznacz cały

std::string napis (float k, float r, float R, int dzien, int miesiac, int rok)
{
 std::string liscik;
 k = k*(1+r);
 int i = 0;
 while(k > 0)
 {
   i++;
   if(k - R > k/(1+r))
     {
      return "Takiego kredytu to Ty nigdy nie splacisz!";
     }


   if(k > 0)
        {

          liscik = "Zadluzenie na dzien: ";
          std::stringstream ss;
          ss << dzien;
          liscik = liscik + ss.str();




          std::cout << ".";
          std::cout << miesiac;
          std::cout << ".";
          std::cout << rok+i;
          std::cout << " wynosi: ";
          std::cout << k;
          std::cout << ". " << std::endl;
       }



   if(k >= R )
          std::cout << "Placisz: " << R <<"zl" << std::endl<< std::endl;
   else
          std::cout << "Placisz: " << k <<"zl" << std::endl<< std::endl;
   k = k*(1+r) - R;
 }
  std::cout << "Splaciles wlasnie kredyt!" << std::endl<< std::endl;

return liscik;
}
-- 1 maja 2016, o 11:05 --

Problem rozwiązany.