Obliczenie wskaźnika podstawowej przemiany materii

0

Witam. Chce rozwiązać zadanie (screen poniżej) odnośnie referencji i wskaźników. Dopiero zaczynam z programowaniem i nie wiem kompletnie jak użyć wskaźnika w tym zadaniu.

screenshot-20230103133956.png\

Zacząłem tak:

screenshot-20230103134123.png
Ktoś podeśle jakieś wskazówki bądź etapy jak rozwiązać te zadanie?
Z góry dzięki ;)

1

Czego właściwie tutaj nie rozumiesz?

0
enedil napisał(a):

Czego właściwie tutaj nie rozumiesz?

Nie mam pojęcia jak dalej rozwiązać te zadanie przy użyciu wskaźników i referencji. Wiem że jest łatwiejszy sposób, jednak zależy mi żeby rozwiązać te zadanie właśnie w taki sposób.

0
WiszuLIVEE napisał(a):

Wiem że jest łatwiejszy sposób, jednak zależy mi żeby rozwiązać te zadanie właśnie w taki sposób.

To pokaż ten łatwiejszy sposób jak zrobiłeś a my przerobimy na wskaźniki. Ja lubię przerabiać cudze kody

2
#include <functional>
#include <array>
#include <iostream>
using namespace std;

int main()
{
	array<function<double(int*,int*,int*)>,2> ppm
	{
		[](int *age,int *height,int *weight) { return 10.0**weight+6.25**age+5; },
		[](int *age,int *height,int *weight) { return 10.0**weight+6.25**age-161; }
	};
	int age,height,weight;
	cin>>age>>height>>weight;
	char sex;
	cin>>ws>>sex;
	bool isfemale=(tolower(sex)=='k');
	cout<<"ppm="<<ppm[isfemale](&age,&height,&weight)<<endl;
    return 0;
}
0
KamilAdam napisał(a):
WiszuLIVEE napisał(a):

Wiem że jest łatwiejszy sposób, jednak zależy mi żeby rozwiązać te zadanie właśnie w taki sposób.

To pokaż ten łatwiejszy sposób jak zrobiłeś a my przerobimy na wskaźniki. Ja lubię przerabiać cudze kody

#include<iostream>
using namespace std;

void ppm_man() {
	float a, h, w;
	cout << "Podaj wiek: "; cin >> a;
	cout << "\nPodaj wage: "; cin >> w;
	cout << "\nPodaj wzrost: "; cin >> h;
	float ppm_m;
	ppm_m = (10 * w) + (6.25 * h) - (5 * a) + 5;
	cout << "Twoj wskaznik wynosi: " << ppm_m;
}
void icm_man() {
	float h;
	cout << "\nPodaj wzrost: "; cin >> h;
	float icm_m;
	icm_m = 50 + 0.9 * (h - 152);
	cout << "Twoj wskaznik wynosi: " << icm_m;
}
void ppm_kob() {
	float a, h, w;
	cout << "Podaj wiek: "; cin >> a;
	cout << "\nPodaj wage: "; cin >> w;
	cout << "\nPodaj wzrost: "; cin >> h;
	float ppm_k;
	ppm_k = (10 * w) + (6.25 * h) - (5 * a) -161;
	cout << "Twoj wskaznik wynosi: " << ppm_k;
}

void icm_kob() {
	float h;
	cout << "\nPodaj wzrost: "; cin >> h;
	float icm_k;
	icm_k = 45.5 + 0.9 * (h - 152);
	cout << "Twoj wskaznik wynosi: " << icm_k;
}

int main() {
		int wybor_wskaz;
		cout << "Wybierz plec oraz wskaznik ktory chcesz obliczyc\n <1> -> PPM dla m.\n <2> -> ICM dla m.\n <3> -> PPM dla k. \n <4> -> ICM dla k.\n";
		cin >> wybor_wskaz;
		if (wybor_wskaz == 1) {
			ppm_man();
		}
		else if (wybor_wskaz == 2) {
			icm_man();
		}
		else if (wybor_wskaz == 3) {
			ppm_kob();
		}
		else if (wybor_wskaz == 4) {
			icm_kob();
		}
	}
1

W zadaniu napisano: - "... na podstawie przekazanych ..." - czy rozumiesz różnicę pomiędzy przekazany a wczytany?

0
_13th_Dragon napisał(a):

W zadaniu napisano: - "... na podstawie przekazanych ..." - czy rozumiesz różnicę pomiędzy przekazany a wczytany?

Chodzi o to, że dane nie są bezpośrednio pobierane od użytkownika?

2

@enedil: okej, teraz rozumiem, to jakim sposobem wprowadzić te dane w program? — WiszuLIVEE 10 sekund temu

Masz je raz wszystkie wprowadzić (np. w funkcji main), a potem tak wczytane wartości przekazać poszczególnym funkcjom liczącym.

0
enedil napisał(a):

@enedil: okej, teraz rozumiem, to jakim sposobem wprowadzić te dane w program? — WiszuLIVEE 10 sekund temu

#include <functional>
#include <array>
#include <iostream>
using namespace std;

int main()
{
	int wybor;
	cin >> wybor;

	if (wybor == 1) {
		array<function<double(int*, int*, int*)>, 2> ppm
		{
			[](int* age,int* height,int* weight) { return 10.0 * *weight + 6.25 * *age + 5; },
			[](int* age,int* height,int* weight) { return 10.0 * *weight + 6.25 * *age - 161; }
		};
		int age, height, weight;
		cin >> age >> height >> weight;
		char sex;
		cin >> ws >> sex;
		bool isfemale = (tolower(sex) == 'k');
		cout << "ppm=" << ppm[isfemale](&age, &height, &weight) << endl;
		return 0;
	}
	else if(wybor==2){
	array<function<double(int*, int*, int*)>, 1> icm; {

		[]( int* weight) { return 50 + 0.9 * (*weight - 152); };
		[]( int* weight) { return 45.5 + 0.9 * (*weight - 152); };
		int  weight;
		cin >> weight;
		char sex;
		cin >> ws >> sex;
		bool isfemale = (tolower(sex) == 'k');
		cout << "icm=" << icm[isfemale] (&weight) << endl;
		return 0; }
	}
	}

Nie wiem do końca jak to ma wyglądać.
Tak jak mówiłem, dopiero zaczynam z programowaniem

Oto błędy :
!screenshot-20230103180021.png

0

Czy przeczytałeś zadanie ze zrozumieniem?
Masz napisać funkcję:
void funkcja(char sex,int age,int weight,int height,double *ppm,double *imc,double *d) { ... }
Czy twój kod wygląda przynajmniej blisko zadaniu?

0
#include<iostream>;
using namespace std;

void oblicz_ppm(char sex, int age, int weight, int height, double* ppm) {
    // Obliczenie ppm
    if (sex == 0) { // mężczyzna
        *ppm = 10 * weight + 6.25 * height - 5 * age + 5;
    }
    else if (sex == 1) { // kobieta
        *ppm = 10 * weight + 6.25 * height - 5 * age - 161;
    }
}
void oblicz_imc(char sex, int height, double* imc) {
    // Obliczenie imc
    if (sex == 0) { // mężczyzna
        *imc = 50 + 0.9 * (height - 152);
    }
    else { // kobieta
        *imc = 45.5 + 0.9 * (height - 152);
    }

}
int main()
{
    double weight, height, age, imc, ppm;
    char sex;
    // Pobranie danych pacjenta
    cout << "Podaj mase ciala (w kg): ";
    cin >> weight;
    cout << "Podaj wzrost (w cm): ";
    cin >> height;
    cout << "Podaj wiek (w latach): ";
    cin >> age;
    cout << "Wybierz parametr\n<1> -> icm\n<2> -> ppm\n";
    int parametr;
    cin >> parametr;
    if (parametr == 1); {
        cout << "Wybrales paramater imc";
        oblicz_imc(sex, height, imc);
        return 0;

Napisałem coś takiego.

2
  1. Gdzie ty ta płeć wczytujesz?
  2. Przeczytaj zadanie uważnie i ze zrozumieniem screenshot-20230104143044.png
0

Nie przekazalem drugiej fukncji poniewaz nawet ta pierwsza nie dziala i właśnie nie wiem czemu

No to łaskawie uświadom nas o fakcie, że nie działa (skąd niby mamy wiedzieć) - i także, w jaki sposób nie działa.

0
enedil napisał(a):

Nie przekazalem drugiej fukncji poniewaz nawet ta pierwsza nie dziala i właśnie nie wiem czemu

No to łaskawie uświadom nas o fakcie, że nie działa (skąd niby mamy wiedzieć) - i także, w jaki sposób nie działa.

screenshot-20230104143355.png
Program zatrzymuje sie przed wywołaniem fukncji.

0
#include<iostream>;
using namespace std;
//	Parametry ppm, imc, d są przekazywane do funkcji przez referencję:
void oblicz_ppm_imc_d(double w, double h, int a, char plec, double& ppm, double& imc, double& d) {
    if (plec == 'm') {
        ppm = 10 * w + 6.25 * h - 5 * a + 5;
        imc = 50 + 0.9 * (h - 152);
    }
    else {
        ppm = 10 * w + 6.25 * h - 5 * a - 161;
        imc = 45.5 + 0.9 * (h - 152);
    }
    d = w - imc;
}
int main() {
    double w = 757;
    double h = 1807;
    int a = 206;
    char plec = 'm';
    double ppm, imc, d;

    oblicz_ppm_imc_d(w, h, a, plec, ppm, imc, d);

    cout << "ppm: " << ppm << endl;
    cout << "imc: " << imc << endl;
    cout << "d: " << d << endl;

    return 0;
}

Tak to ma wyglądać?

0

Teraz jest zgodne z zadaniem.
Jedynie bym dał else if(plec == 'k') oraz zwrócił false jeżeli "nie ryba, nie mięso"
Oraz: http://forum.4programmers.net/1208091

1

a ja zaczne mały refactor

double calculatePpm(double w, double h, int a, int coff) {
    return 10 * w + 6.25 * h - 5 * a + coff;
}

double calculateImc(double h, double coff) {
    return coff + 0.9 * (h - 152);
}

prawda że przyjemniejsze dla oka? A jak fajnie testować w UT(np. w catch2)

0
revcorey napisał(a):

prawda że przyjemniejsze dla oka? A jak fajnie testować w UT(np. w catch2)

Jeżeli już to wg mnie lepiej:

double calculatePpm(bool male,int h,int w,int a) { return 10 * w + 6.25 * h - 5 * a + (male?5:-161); }
double calculateImc(bool male,int h) { return (male?50.0:45.5) + 0.9 * (h - 152); }

0 użytkowników online, w tym zalogowanych: 0, gości: 0