Wątek przeniesiony 2020-11-17 10:23 z Coyote przez Patryk27.

Ciąg arytm, geometr, referencje

0

znowu nie wiem jak zamienic program zeby dzialal przez referencje :/

/*Napisz funkcję, która jako argumenty przyjmuje trzy liczby całkowite. Funkcja ma
zwrócić informację, czy podane liczby tworzą ciąg arytmetyczny, geometryczny czy
żaden (zwraca literę A dla arytmetycznego, G dla geometrycznego, Z dla żadnego z
nich). W funkcji main wprowadź trzy liczby całkowite, wywołaj funkcję i wypisz na
ekranie informację o ciągu.*/
#include<iostream>
#include<cstdlib>
using namespace std;


float liczbywciagu(int x, int y, int z)
{
if (x==(y+z)/2 || y==(x+z)/2 || z==(x+y)/2)
    cout<<"A";
else if(x*x==(y*x) || y*y==(x*z) || z*z==(y*x))
    cout<<"G";
    else
    cout<<"Z";
    return 0;

}
main()
{
    liczbywciagu(6,7,100);
    return 0;
}
0

W sensie, że dodanie ampersanda po nazwie typu jest dla ciebie trudnością czy co?
https://www.w3schools.com/cpp/cpp_function_reference.asp

2

Zadanie jest nie do końća jasno sformułowane:
[2, 1, 3] -> dla Ciebie to ciąg arytmetyczny
[8, 2, 4] -> dla Ciebie to ciąg geometryczny
a dla mnie nie ;-)

Ponadto:
else; - błąd
x*x==(y*x) - literówka?
liczbywciagu zwraca int, po co? Ani tego nie używasz, ani nie zwracasz nic sensownego. IMHO funkcja powinna się nazywać GetSeriesType i zwracać wartość z jakiegoś utworzonego przez Ciebie enuma (np. SeriesType), a main powinna wypisywać nazwę typu. BTW używaj camel case albo pascal case do nazwenictwa.

2

"zwrócić" to nie znaczy "wydrukować".
Funkcja nie ma niczego drukować, ale mądrze użyć return. Takie drukowanie to koszmar prac studenckich.
Dla czytelności typ funkcji zmienić z int na char, choć technicznie to nie ma wielkiego znaczenia.

masz świadomość, jak działa dzielenie na liczbach całkowitych?

0
  1. return 'a' np.? 2. czyli powinnam zastosowac float? bo nie bedzie to dzialac dla sumy niepodzielne przez 2? — polka123 6 minut temu
  1. return 'G' itd...

  2. Nie wiem, jaki jest twój cel, więc nie rozstrzygnę.
    Z kolei jeśli tak, to sprawdzenie na równość zmiennego przecinka jest problematyczne, porównania się robi z "epsylonem".

0

no wlasnie ja zalozylam, ze chodzi ogolnie o to ze z danych liczb ktore wpisze mozna pewnien rodzaj ciagu ulozyc

Tak czy siak, program daje błędne wyniki: zwraca, że z liczb 1, 2, 1 można ułożyć ciąg arytmetyczny, a nie można.

1

Warunek dla ciągu arytmetycznego powinien być bez dzielenia:

if( 2*x == y+z || 2*y == x+z || 2*z == x+y )
5
polka123 napisał(a):

znowu nie wiem jak zamienic program zeby dzialal przez referencje :/

Najwyraźniej twój nauczyciel jest niezbyt kompetentny. Zadania typu "wciśnij na siłę referencję" (w sumie każde zadanie typu zastosuj X w rozwiązaniu jakiegoś problemu), są szkodliwe dla procesu nauczania. Takie coś tylko namąci ci w głowie i zniechęci do programowania.
A to jest kolejne zadanie, które zastosowanie referencji nie ma najmniejszego sensu.

Jakbyś miał napisać funkcję "swap" to wtedy referencja jest wręcz zalecana.

bool isAritmeticProgression(int x, int y, int z) {
     return x + z == 2 * y;
}

bool isGeometricProgression(int x, int y, int z)  {
     return x * z == y * y;
}

A to zadanie robi się bardziej pouczające, dla liczb zmiennoprzecinkowych.

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