O co chodzi w stwierdzeniu "funkcja może bezpośrednio zwracać tylko jedną wartość".

0

Nie wiem o co chodzi w tym stwierdzeniu a muszę je zrozumieć aby wykonać zadanie którego treść brzmi.

Napisz funkcję, która pobiera dwa argumenty i zwraca dwa odrębne wyniki. Jednym z wyników powinien być iloczyn obu argumentów, a drugim ich suma. Ponieważ funkcja może bezpośrednio zwracać tylko jedną wartość, druga wartość powinna być zwracana poprzez parametr wskaźnikowy albo referencję.

Nie chodzi mi o rozwiązanie tego zadania lecz jakąś sugestie w zrozumieniu jego treści.

0

Kiedy ktoś chce np 4 liczby całkowite 8 bitów każda to bierze inta dzieli na 4 części i zwraca cztery liczby w 1 zmiennej unsigned int. Więc może zwracać wiele wartości.

5

Przypomnę syntax returnu:

return cokolwiek;

z tym, że "cokolwiek" jest tylko jedno.
Dwóch "gołych" liczb nie zwrócisz *), dlatego zdanie mówi jak mówi, drugi rezultat jako jeden z parametrów referencyjny lub wskaźnikowy

*) ja bym zwracał struct z dwoma liczbami - ale nie taka jest treść zadania

kamil kowalski napisał(a):

Kiedy ktoś chce np 4 liczby całkowite 8 bitów każda to bierze inta dzieli na 4 części i zwraca cztery liczby w 1 zmiennej unsigned int. Więc może zwracać wiele wartości.

Chciałeś się popisać? Bardzo, ale bardzo kręte.
Równie dobrze możesz tłumaczyć, że zwracasz 64 dane.

1
StachuBond9 napisał(a):

Napisz funkcję, która pobiera dwa argumenty i zwraca dwa odrębne wyniki. Jednym z wyników powinien być iloczyn obu argumentów, a drugim ich suma. Ponieważ funkcja może bezpośrednio zwracać tylko jedną wartość, druga wartość powinna być zwracana poprzez parametr wskaźnikowy albo referencję.

struct FunResult {
    int product;
    int sum;
};


FunResult fun(int a, int  b)
{
    return { a * b, a + b};
}
0
#include <iostream>
#include <tuple>

using namespace std;

std::tuple<int,int>result(int a,int b)
{
  return std::make_tuple(a + b, a * b);
}

int main()
{

    for(int s=0x61,a{0},b{0},add{0},mul{0};(cout<<"\rEnter "<<(char)(s)<<" ")&&(cin>>a)&&(++s)&&(cout<<"Enter "<<(char)(s)<<" ")&&(cin>>b);
    (cout<<add<<" "<<mul<<'\n'),s=0x61)
    {
        tie(add,mul)=result(a,b);
    }

    return 0;
}

//edit

a jeszce od c++17 tuple i moja wersja ze strukturą zadziała z: auto [add, mul] = result(a,b);. — MarekR22

#include <iostream>
#include <utility>
#include <cmath>

using namespace std;

template <typename T1, typename T2>
auto result(const T1 & a, const T2 & b) {
  const auto add = a + b;
  const auto multiplication = a * b;
  return std::make_pair(add, multiplication);
}

int main()
{
    for(int s=0x61,a{0},b{0};(cout<<"\rEnter "<<(char)(s)<<" ")&&(cin>>a)&&(++s)&&(cout<<"Enter "<<(char)(s)<<" ")&&(cin>>b);s=0x61)
    {
        auto [add,mul] = result(a,b);
        cout << "add = " << add << "  mul = " << mul << '\n';
    }

    return log10(1);
}

3

Ludzie jak ktoś się uczy to najpierw się uczy podstaw, a nie kopiowania rozwiązań których w ogóle nie rozumie
@ZrobieDobrze: napisał o co chodzi ze zwracaniem pierwszego cokolwiek
a funkcję deklarujesz i wywołujesz tak

int funkcja (int * wynik2){
    *wynik2=cokolwiek2;    
    return cokolwiek1;
}
int main()
{
    int wynik2;
    int wynik1=funkcja(&wynik2);
    return 0;
}

przy czym cokolwiek wcześniej policz se w ciele funkcji

0

Czy dla OP już wszystko jasne ?

0

Proste pytanie, a pierdyliard mylnych odpowiedzi🤪
@Miang wyłożył lopatologicznie.

0
Adamek Adam napisał(a):

Czy dla OP już wszystko jasne ?

OP is dead, baby
(albo poszedł się douczyć podstaw, choć w to nie wierzę)

0
Miang napisał(a):

Ludzie jak ktoś się uczy to najpierw się uczy podstaw, a nie kopiowania rozwiązań których w ogóle nie rozumie

xkpit napisał(a):

Proste pytanie, a pierdyliard mylnych odpowiedzi🤪
@Miang wyłożył lopatologicznie.

Idę o zakład, że OP załapie (jeśli załapie) rozwiązania w następującej kolejności: rozwiązanie Marka > rozwiązanie Reicha > rozwiązanie Miang.
:-)

0
PaulGilbert napisał(a):

Idę o zakład, że OP załapie (jeśli załapie) rozwiązania w następującej kolejności: rozwiązanie Marka > rozwiązanie Reicha > rozwiązanie Miang.
:-)

Idę o zakład, że nawet nie przeczytałeś ze zrozumieniem zadania.

0

Poruszyłeś ciekawy temat - informatycy powinni dokształcać się z polskiego, bo często mają problemy z prawidłowym, prostym i logicznym sformułowaniem tego co chcą wyrazić. Jeden z moich wykładowców prowadząc zajęcia na zadaniach przygowowanych przez swojego kolegę przez połowę zajęć rozkminiał, co autor zadań miał na myśli. I to niestety dosyć powszechne zjawisko, w tej grupie zawodowej.

1
PaulGilbert napisał(a):

Poruszyłeś ciekawy temat - informatycy powinni dokształcać się z polskiego ...

Owszem to o czym mówisz istnieje w tym zawodzie jak i w każdym innym związanym z nauczaniem i/lub zarządzaniem.
Natomiast w tym przypadku wszystko napisano prawidłowym, prostym i logicznym sformułowaniem i w tym przypadku należało by rozpatrywać problem z uczniami dla których prawidłowe, proste i logiczne sformułowanie nie jest zrozumiałe z powodu braków w języku polskim oraz podstaw do tego czego ich aktualnie się naucza.

0

Tak czy inaczej niech OP napisze, czy nie miałem racji.
:-)

0

Ja kiedyś coś takiego robiłem na zadanie. Tyle że tutaj są dwie referencje. pobiera dwa argumenty i zamienia wartosci zmiennych miejscami. Nie pamiętam dokładnej treści zadania niestety.

#include <iostream>

using namespace std;

string& zmiana_miejsc(string &imie, string &nazwisko){
    cout<<"Podaj imie: ";
    cin>>imie;
    
    string wejscie;
    while (getline(cin, wejscie) && wejscie == "") {
        cout<<"Podaj nazwisko: ";
    }
    nazwisko = wejscie;
   
    string pomocnicza = imie;
    imie = nazwisko;
    nazwisko = pomocnicza;
    
    return imie, nazwisko;
}

int main()
{
    string imie;
    string nazwisko;
    
    zmiana_miejsc(imie, nazwisko);
    cout<<imie + " " + nazwisko <<endl;
    
    return 0;
}
1

Wersja edukacyjna. have fun. good luck.

// g++ (Debian 10.2.1-6) Code::Blocks 20.03 -std=c++17 or higher
// g++ -Wall -fexceptions -g -std=c++20 -c main.cpp -o main.o
// Unix/Linux 64bit / Windows Xp 32bit, Windows 7 or higher 64bit,
#include <iostream>
#include <vector>
#include <cmath>
#include <iomanip>
#include <cstdio>
#include <limits>
#include <chrono>
#include <thread>
#include <cstring>
#include <algorithm>
// title {       Elektromechanische Verschlusselungsmaschine Ratsel       }
/* {AlanTuring} {MarianRejewski} {HenrykZygalski} {JerzyRozycki} {WilliamShakespeare}
{BjarneStroustrup} {DennisRitchie} {KenThompson} {StanleyB.Lippman} {AndersHejlsberg}
{StefanBanach} {NikolaTesla} {BlaisePascal} {AlexanderGrahamBell} {NiklausWirth} */
#define Thanks                                                   "5468616e6b7320746f203a20"
#define RejewskiZygalskiRozycki     enigma(v,e,r,s,c,h,l,u,s,s,e,l,u,n,g,s,m,a,s,c,h,i,n,e)
#define WilliamShakespeare                          "57696c6c69616d205368616b65737065617265"
#define AlanTuring                                                  "416c616e20547572696e67"
#define NikolaTesla                                              "4e696b6f6c61205465736c61"
#define OfE1                                                        RejewskiZygalskiRozycki
#define BlaisePascal                                            "426c616973652050617363616c"
#define I int
#define NiklausWirth                                            "4E696b6c617573205769727468"
#define StefanBanach                                            "53746566616e2042616e616368"
#define MarianRejewski                                      "4d617269616e2052656a6577736b69"
#define HenrykZygalski                                      "48656e72796b205a7967616c736b69"
#define JerzyRozycki                                            "4a65727a7920526f7a79637969"
#define JerzyGrebosz                                            "4a65727a7920477265626f737a"
#define StephenPrata                                            "5374657068656e205072617461"
#define S (char)
#define Magic                         (Lange(essay)==pow(log2(256),log10(100)))
#define DennisRitchie                                         "44656e6e69732052697463686965"
#define KenThompson                                               "4b656e2054686f6d70736f6e"
#define StanleyBLippman                               "5374616e6c657920422e204c6970706d616e"
#define BjarneStroustrup                                "426a61726e65205374726f757374727570"
#define AndersHejlsberg                                   "416e646572732048656a6c7362657267"
#define AlexanderGrahamBell                     "416c6578616e6465722047726168616d2042656c6c"
#define Thompson std::cin
#define beginPascal /*            				bracket							        */ {
#define endPascal   /*            				bracket         						*/ }
#define Shakespeare 																	string
#define R 																				return
#define ZERO 																			log10(1)
#define NL 																				0x0A
#define PB                                                                              push_back
#define A 									/*antrakt*/									(S(NL))
#define offsetRight 																	std::right
#define offsetLeft 																		std::left
#define Turing for																	//loop for
#define enigma(M,e,c,h,a,n,i,s,m,u,S,C,H,I,f,F,r,V,E,R,w,A,l,z) 						/* enigmatically*/\
r##V##A##l
#define F 										<< 										/*flux*/
#define Wirth while(                    	log10(10)                  				)
#define a               																auto
#define OBFUSCATED(s) 																	#s
#define equal                                                                           ==
#define CREATOR if(           Lange(essay)!=pow(log2(256),log10(100))                   )R ZERO
#define G(IN,l) 																		getline(IN,l)
#define _OBF(s) 																		OBFUSCATED(s)
#define token                                                                           char
#define blank                                                                           empty()
#define C 										>>
#define Lange(x) 																		((int)(x).size())
#define emptiness /*   							blank    								*/ void
#define msgE "\x45\x6e\x74\x65\x72\x20"
#define msgS "\x53\x75\x6d\x61\x20"
#define msgI "\x49\x6c\x6f\x63\x7a\x79\x6e\x20"
#define Ritchie std::cout
#define Stroustrup                                              						std::vector
#define SW std::setw(/*                			*/4/*                    				*/)
#define SF std::setfill(' ')
//#undef OfEl
#define OfEl(		                                                                	)a OfE1()->I beginPascal /**/\
Stroustrup<Shakespeare>str;\
Shakespeare essay = "\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x63\x29\x20\x32\x30\x32\x32\x20\x62\x79\x20\x4f\x66\x45\x6c";\
essay+="\x2e\x20\x41\x6c\x6c\x20\x52\x69\x67\x68\x74\x73\x20\x52\x65\x73\x65\x72\x76\x65\x64";\
essay.insert( (sqrt(625)+1 ), "\x20\x54\x6f\x6d\x61\x73\x7a\x20\x43\x68\x6f\x6a\x6e\x61\x63\x6b\x69");\
                            CREATOR;\
if(Magic equal true) beginPascal \
Bell(essay);Ritchie F"\xa";\
Turing(I s=0x61,x{0},y{0};(Ritchie F "\r" F msgE F (char)(s) F ": ")&&(Thompson C x)&&(++s)&&(Ritchie F msgE F (char)(s) F ": ")&&(Thompson C y);s=0x61)\
beginPascal\
        Ritchie F A;\
        result(x,y);\
        Ritchie F msgS F " = " F x F " " F msgI " = " F y F "\xa\xa";\
endPascal \
Ritchie           F           A           F           A           ;\
Turing(a e: Pay) beginPascal Ritchie F "\t\t"; Bell( say(e.n) ); endPascal \
Ritchie F "\n\t\t"; Bell("\t\t\x4f\x66\x45\x6c");\
endPascal else beginPascal \
Turing(a e: Pay) beginPascal Ritchie F "\t\t"; Bell( say(e.n) ); endPascal \
Ritchie F "\n\t\t"; Bell("\t\t\x4f\x66\x45\x6c");\
endPascal \
\
R log10(1);\
endPascal //
using namespace std;
typedef struct beginPascal Shakespeare n; endPascal Payroll;
Stroustrup < Payroll > Pay = { { Thanks }, { NikolaTesla }, { AlanTuring }, { WilliamShakespeare }, { BlaisePascal },
        { NiklausWirth }, { StefanBanach }, { MarianRejewski }, { HenrykZygalski }, { JerzyRozycki },
        { JerzyGrebosz }, { StephenPrata }, { DennisRitchie }, { KenThompson }, { StanleyBLippman },
        { BjarneStroustrup }, { AndersHejlsberg }, { AlexanderGrahamBell }
    };
emptiness Bell(Shakespeare);
Shakespeare say(Shakespeare t);
I result(I &, I &);
emptiness Bell(Shakespeare t)
beginPascal
	I c{0},l=Lange(t);
	std::chrono::milliseconds timespan(64);
	Wirth beginPascal
        Ritchie F t[c];
		std::this_thread::sleep_for(timespan);
		fflush(stdout);c++; //<-- a joke, it should be c+=1;
		if(c==l){break;}
	endPascal
	Ritchie F A; // "\xb";
endPascal
Shakespeare say(Shakespeare t)
beginPascal
    Shakespeare binary_value = "";
    I l=Lange(t);
    Turing(I i=0;i<l;i+=log10(100))
    beginPascal
        Shakespeare slice = t.substr(i, log10(100));
        token ch = stoul(slice, nullptr, 16);
        binary_value += ch;
    endPascal
    R binary_value;
endPascal
I result(I &x, I &y)
beginPascal
    I tmp = x; (x+=y);
    R (y*=tmp);
endPascal
// Copyright (c) 2022 by Tomasz "OfEl" Chojnacki. All Rights Reserved.
// Permission for personal, educational or non-profit use is granted provided
// this copyright and notice are included in its entirety and remains unaltered.
// All other uses must receive prior permission in written of the author of OfEl
/* Rejewski,Zygalski,Rozycki,Banach*/OfEl()/*NikolaTesla,BlaisePascal,AlanTuring */


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