Cześć, miałem napisać funkcję, która wypisze koty, których waga jest powyżej średniej i zapisze do pliku.
Napisałem, ale niestety nie można tego zrobić w taki sposób z powodu niezgodnych typów argumentów i braku konwersji.
Proszę o pomoc.
#include <iostream>
#include <fstream>
#include <sstream>
#include <cstring>
#include <string>
#include <vector>
#include <cstdlib>
#include <algorithm>
struct Kot
{
std::string imie; //skoro piszemy w C++ bardziej zasadne używać jest 'std::string' niżeli 'C-string'
std::string rasa; //skoro piszemy w C++ bardziej zasadne używać jest 'std::string' niżeli 'C-string'
int wiek;
float waga;
};
std::vector<Kot> wczytajDane(std::ifstream& Plik);
void wyswietlDane(const std::vector<Kot>& wektor);
std::vector<Kot> wczytajDane(std::ifstream& Plik)
{
std::vector<Kot> Koty;
Kot kot;
while (Plik >> kot.imie >> kot.rasa >> kot.wiek >> kot.waga)
{
Koty.push_back(kot);
}
return Koty;
}
void wyswietlDane(const std::vector<Kot>& wektor)
{
for (const auto& k : wektor)
{
std::cout << k.imie << " " << k.rasa << " " << k.wiek << " " << k.waga << " " << "\n";
}
}
void szukajRasy(const std::vector<Kot>& tabela, std::string r)
{
bool czy_znaleziono = false;
for (size_t i = 0; i < tabela.size(); i++)
{
czy_znaleziono = (tabela[i].rasa == r);
if (czy_znaleziono)
{
std::cout << "\n" << tabela[i].imie << " " << tabela[i].rasa << " " << tabela[i].wiek << " " << tabela[i].waga << " " << "\n";
}
}
if (!czy_znaleziono)
{
std::cout << "\nNie znaleziono rasy";
}
}
void sortujRasy(std::vector<Kot>& tabela)
{
std::sort(tabela.begin(), tabela.end(), [](const Kot& a, const Kot& b) { return a.rasa < b.rasa; });
}
float srWaga(std::vector<Kot>& tabela)
{
float suma = 0;
int ile = 0;
for (size_t i = 0; i < tabela.size(); i++)
{
suma += tabela[i].waga;
ile++;
}
suma = suma / ile;
std::cout << "\nSrednia waga kota wynosi: " << suma << "\n";
return suma;
}
void powSr(std::vector<Kot>& tabela) //powSr - 'powyzej sredniej'
{
std::ofstream zapis("waga.txt");
for (int i = 0; i < tabela.size(); i++)
{
if (tabela[i].waga > srWaga)
{
zapis << tabela[i].imie << " " << tabela[i].rasa << " " << tabela[i].wiek << " " << tabela[i].waga;
std::cout << "\n" << tabela[i].imie << " " << tabela[i].rasa << " " << tabela[i].wiek << " " << tabela[i].waga << " " << "\n";
}
}
zapis.close();
}
int main()
{
//Kot Koty[8];
std::ifstream Plik;
Plik.open("kotki.txt");
if (!Plik.is_open())
{
std::cout << "Plik nie moze zostac otwarty. \n";
std::cin.get();
exit(1);
}
auto Koty = wczytajDane(Plik);
wyswietlDane(Koty);
std::string rasa;
std::cout << "\nPodaj rase: ";
std::cin >> rasa;
szukajRasy(Koty, rasa);
std::cout << "\n-------------------------\n";
sortujRasy(Koty);
wyswietlDane(Koty);
srWaga(Koty);
powSr(Koty);
std::cin.ignore();
std::cin.get();
return EXIT_SUCCESS;
}