Edycja długości geograficznej

0

Witam. Mam problem z tym programem najpierw chciałam zamienić minuty na stopnie i dodać całe stopnie i później zająć się resztą programu, ale mi nie wychodzi

/*Napisz program który poprosi użytkownika o podanie długości geograficzne w stopniach minutach i sekundach wyliczający następnie
długość geograficzną w formacie dziesiętnym 60 sekund składa się na minutę, 60 minut na stopień; zapisz te wartości jako stałe symboliczne
Przykładowe uruchomienie
Podaj długość w stopniach, minutach i sekundach:
Najpierw podaj stopnie:37
Następnie podaj minuty stopnia łuku:51
Na koniec podaj sekundy łuku:19
37 stopni, 51 minut, 19 sekund = 37,8553 stopni*/
#include <iostream>
#include <cmath>
using namespace std;
static const double minutyprzelicznik = 60;
static const double stopnieprzelicznik = 3600;
double Wczytajdane()
{
    double stopnie, minuty;
    cout << "Podaj dlugosc w stopniach, minutach i sekundach\n";
    cout << "Najpierw podaj stopnie";
    cin >> stopnie;
    cout << "Nastepnie podaj minuty stopnia luku\n";
    cin >> minuty;
    cout << "Na koniec podaj sekundy luku\n";
    return stopnie, minuty;
}
double zamiana(double sto, double min)
{
    double suma;
    suma = sto + (min / minutyprzelicznik);
    return suma;
}
void wypisz(double st, double min, double sum)
{
    cout << st << "sotopni" << min << "minut"
         << "=" << sum;
}
int main()
{
    cout.setf(ios_base::fixed, ios_base::floatfield);
    double stopnie, minuty = Wczytajdane();
    double suma = zamiana(stopnie, minuty);
    wypisz(stopnie, minuty, suma);
}

0
ZrobieDobrze napisał(a):
Nikto0 napisał(a):
return stopnie, minuty;

To nie działa tak jaki myślisz.
Moze po raz pierwszy od lat, coś by przeczytac ?

właśnie przerabiam szkołę programowania Stephana Prata wcześniej nie miałam czasu na regularną naukę teraz to się zmieniło jak to zrobić poprawnie?

1

return zamiana(stopnie, minuty);
lub
return tuple<double,double>(stopnie, minuty);

1

Możesz zwrócić tylko 1 obiekt z metody.
Czyli jak chcesz współrzędne to musisz je opakować w klasę i zwrócić jej instancję zawierającą obie wartości.

0

Albo tak jak zaproponował poprzednik.
Choć ja mam uczulenie na używanie krotek bo to jest w poprzek obiektowości trochę ;-)

0
_13th_Dragon napisał(a):

return zamiana(stopnie, minuty);
lub
return tuple<double,double>(stopnie, minuty);

zmieniłam tak nie wiem w którym momencie mam to dodać i myślę że przy zamianie funkcji mamy jedną zmienną i chyba chodziło o to patrzyłam w książce i tam nie ma takiego przykładu ze zwracaniem dwóch zmiennych

/*Napisz program który poprosi użytkownika o podanie długości geograficzne w stopniach minutach i sekundach wyliczający następnie
długość geograficzną w formacie dziesiętnym 60 sekund składa się na minutę, 60 minut na stopień; zapisz te wartości jako stałe symboliczne
Przykładowe uruchomienie
Podaj długość w stopniach, minutach i sekundach:
Najpierw podaj stopnie:37
Następnie podaj minuty stopnia łuku:51
Na koniec podaj sekundy łuku:19
37 stopni, 51 minut, 19 sekund = 37,8553 stopni*/
#include <iostream>
#include <cmath>
using namespace std;
static const double minutyprzelicznik = 60;
static const double stopnieprzelicznik = 3600;
double Wczytajdane()
{
    double stopnie, minuty;
    cout << "Podaj dlugosc w stopniach, minutach i sekundach\n";
    cout << "Najpierw podaj stopnie";
    cin >> stopnie;
    cout << "Nastepnie podaj minuty stopnia luku\n";
    cin >> minuty;
    cout << "Na koniec podaj sekundy luku\n";
    return Wczytajdane(stopnie, minuty);
}
double zamiana(double sto, double min)
{
    double suma;
    suma = sto + (min / minutyprzelicznik);
    return suma;
}
void wypisz(double st, double min, double sum)
{
    cout << st << "sotopni" << min << "minut"
         << "=" << sum;
}
int main()
{
    cout.setf(ios_base::fixed, ios_base::floatfield);
    double stopnie, minuty = Wczytajdane();
    double suma = zamiana(stopnie, minuty);
    wypisz(stopnie, minuty, suma);
}

0
return Wczytajdane(stopnie, minuty);

Nie masz takiej metody.

Tak jak sugerowano wcześniej.
Warto zapoznać się z podstawami przy pomocy jakiejś publikacji.

0
opiszon napisał(a):
return Wczytajdane(stopnie, minuty);

Nie masz takiej metody.

Tak jak sugerowano wcześniej.
Warto zapoznać się z podstawami przy pomocy jakiejś publikacji.

A możesz napisać jak to ma wyglądać poprawnie?

0

Problem w tym, że to totalne podstawy podstaw. Na prawdę przyda się najpierw przyswojenie teorii żeby znać podstawowe koncepty. W dowolnym języku programowania.

0
_13th_Dragon napisał(a):

return zamiana(stopnie, minuty);
lub
return tuple<double,double>(stopnie, minuty);

gdzie to mam wpisać możesz przedstawić rozwiązanie?

0

Problem w tym, że nie ma możliwości zwrócenia z funkcji dwóch elementów (obiektów, zmiennych itp.). Zawsze się zwraca co najwyżej jeden obiekt, odpowiadający typowi funkcji.

Jeżeli potrzebujesz zwracać dwie zmienne (w tym wypadku dwie liczby), jest kilka sposobów:

Sposób 1 - parametry funkcji:

void Wczytajdane(double &stopnie, double &minuty)
{
    cout << "Podaj dlugosc w stopniach, minutach i sekundach\n";
    cout << "Najpierw podaj stopnie";
    cin >> stopnie;
    cout << "Nastepnie podaj minuty stopnia luku\n";
    cin >> minuty;
    cout << "Na koniec podaj sekundy luku\n";
}

int main()
{
    double stopnie, minuty;
    Wczytajdane(stopnie, minuty);
    double suma = zamiana(stopnie, minuty);
}

Sposób 2 - zmienne globalne:

double Wczytajdane_stopnie, Wczytajdane_minuty;
void Wczytajdane()
{
    cout << "Podaj dlugosc w stopniach, minutach i sekundach\n";
    cout << "Najpierw podaj stopnie";
    cin >> Wczytajdane_stopnie;
    cout << "Nastepnie podaj minuty stopnia luku\n";
    cin >> Wczytajdane_minuty;
    cout << "Na koniec podaj sekundy luku\n";
}

int main()
{
    Wczytajdane();
    double suma = zamiana(Wczytajdane_stopnie, Wczytajdane_minuty);
}

Sposób 3 - zmienne ujęte w pojedynczy obiekt (należy pamiętać o destrukcji, jak obiekt przestanie być potrzebny):

double * Wczytajdane()
{
    double * obj = new double[2];
    cout << "Podaj dlugosc w stopniach, minutach i sekundach\n";
    cout << "Najpierw podaj stopnie";
    cin >> obj[0];
    cout << "Nastepnie podaj minuty stopnia luku\n";
    cin >> obj[1];
    cout << "Na koniec podaj sekundy luku\n";
    return obj;
}

int main()
{
    double * obj = Wczytajdane();
    double suma = zamiana(obj[0], obj[1]);
    delete[] obj;
}
0

może ktoś napisać sposób z krotką jak to zrobić w całości, bo w książce którą przerabiam tego na razie nie było?

0
Nikto0 napisał(a):

może ktoś napisać sposób z krotką jak to zrobić w całości, bo w książce którą przerabiam tego na razie nie było?

Ale struktura NA PEWNO była, więc siąść i zrobić.

0
ZrobieDobrze napisał(a):
Nikto0 napisał(a):

może ktoś napisać sposób z krotką jak to zrobić w całości, bo w książce którą przerabiam tego na razie nie było?

Ale struktura NA PEWNO była, więc siąść i zrobić.

Próbowałam już. Proszę o pomoc

0
Nikto0 napisał(a):
ZrobieDobrze napisał(a):
Nikto0 napisał(a):

może ktoś napisać sposób z krotką jak to zrobić w całości, bo w książce którą przerabiam tego na razie nie było?

Ale struktura NA PEWNO była, więc siąść i zrobić.

Próbowałam już. Proszę o pomoc

/*Napisz program który poprosi użytkownika o podanie długości geograficzne w stopniach minutach i sekundach wyliczający następnie
długość geograficzną w formacie dziesiętnym 60 sekund składa się na minutę, 60 minut na stopień; zapisz te wartości jako stałe symboliczne
Przykładowe uruchomienie
Podaj długość w stopniach, minutach i sekundach:
Najpierw podaj stopnie:37
Następnie podaj minuty stopnia łuku:51
Na koniec podaj sekundy łuku:19
37 stopni, 51 minut, 19 sekund = 37,8553 stopni*/
#include <iostream>
#include <cmath>
using namespace std;
static const double minutyprzelicznik = 60;
static const double stopnieprzelicznik = 3600;
double Wczytajdane()
{
    double stopnie, minuty;
    cout << "Podaj dlugosc w stopniach, minutach i sekundach\n";
    cout << "Najpierw podaj stopnie";
    cin >> stopnie;
    cout << "Nastepnie podaj minuty stopnia luku\n";
    cin >> minuty;
    cout << "Na koniec podaj sekundy luku\n";
    return Wczytajdane(stopnie, minuty);
}
double zamiana(double sto, double min)
{
    double suma;
    suma = sto + (min / minutyprzelicznik);
    return suma;
}
void wypisz(double st, double min, double sum)
{
    cout << st << "sotopni" << min << "minut"
         << "=" << sum;
}
int main()
{
    cout.setf(ios_base::fixed, ios_base::floatfield);
    double stopnie, minuty = Wczytajdane();
    return zamiana(stopnie, minuty);
    double suma = zamiana(stopnie, minuty);
    wypisz(stopnie, minuty, suma);
}
0
  1. Czy wiesz, co to są struktury lub klasy w C++? Słowa kluczowe structclass.
  2. Czego nie rozumiesz w dokumentacji std::tuple? https://en.cppreference.com/w/cpp/utility/tuple Lub std::pair? https://en.cppreference.com/w/cpp/utility/pair W szczególności, w przykładowym kodzie stamtąd.
0
Althorion napisał(a):
  1. Czy wiesz, co to są struktury lub klasy w C++? Słowa kluczowe structclass.
  2. Czego nie rozumiesz w dokumentacji std::tuple? https://en.cppreference.com/w/cpp/utility/tuple Lub std::pair? https://en.cppreference.com/w/cpp/utility/pair W szczególności, w przykładowym kodzie stamtąd.

no właśnie nie wiem, bo to jest w dalszych rozdziałach książki może jakby ktoś napisał jak to zrobić to by mi było łatwiej

1

Przeczytać dalsze rozdziały książki, w takim razie — już masz dobry początek, wiesz czego szukać, nie stracisz więcej niż piętnaście minut na to…

1
  1. przeczytaj clean code (czysty kod)
  2. przeczytaj Opus Magnum C++ Jerzy Grębosz
  3. nie używaj w kodzie języka polskiego
  4. Mirosław Zelent ma kurs C++ dla początkujących, polecam przerobić
  5. są zadania na portalach typu spoj, codeforces - polecam poćwiczyć

Kluczem jest wytrwałość i systematyczność, też kiedyś robiłem (jeszcze gorsze) błędy :)

1
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;

static const double MinPerGrad = 60;
static const double SecPerMin = 60;

int inputInt(const string &msg)
{
    cout<<msg<<": ";
    int value;
    cin>>value;
    return value;
}

double recalc(int grad,int min,int sec)
{
    return grad+(min+sec/SecPerMin)/MinPerGrad;
}

void show(int grad,int min,int sec)
{
    cout<<grad<<"°"<<min<<"'"<<sec<<"\"";
}

int main()
{
	//std::setlocale(LC_ALL,"pl_PL.UTF-8");
	int grad=inputInt("Podaj stopnie");
	int min=inputInt("Podaj minuty");
	int sec=inputInt("Podaj sekundy");
    show(grad,min,sec);
    cout<<" = "<<recalc(grad,min,sec)<<"°"<<endl;
    return 0;
}

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