• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Proszę o pomoc w prostym zadaniu c++

Object Storage Arubacloud
0 głosów
1,773 wizyt
pytanie zadane 26 stycznia 2017 w C i C++ przez vega Użytkownik (510 p.)
edycja 26 stycznia 2017 przez vega

Cześć, mam problem z zadaniem, nie wiem kompletnie jak się za nie zabraćfrown

1.Napisz fukncje, która zwraca odwrotność liczby podanej jako parametr 

Bardzo proszę o pomoc, konkretnie chodzi mi o to czym jest parametr i jak go potraktowac 

2 odpowiedzi

+4 głosów
odpowiedź 26 stycznia 2017 przez Sinnley Stary wyjadacz (12,810 p.)
wybrane 26 stycznia 2017 przez vega
 
Najlepsza

Jeśli nie wiesz co to parametr, to może powinieneś sobie powtórzyć co to w ogóle jest funkcja. Parametr to coś co dajesz funkcji, żeby coś z tym zrobiła. Funkcji Sleep() dajesz w środku liczbę reprezentującą ilość milisekund, na które program ma się zatrzymać.NP:

Sleep(1000);

Powoduje zatrzymanie programu na sekundę.

Ty swojej funkcji powinieneś przekazywać liczbę rzeczywistą, zmiennoprzecinkową, i taką samą zwracać, ale już jako jej odwrotność, czyli liczba odwrotna do x to 1/x.

komentarz 26 stycznia 2017 przez vega Użytkownik (510 p.)
edycja 26 stycznia 2017 przez vega

dzięki! wyleciało mi to z głowy laugh


#include <iostream>
#include <string>

using namespace std;

string liczba;

string odwrotnosc(string liczba)
{	
	
	int dl = liczba.length();
	int p = 0, k = dl - 1, z;
    
	do
	{
		z = liczba[p];
		liczba[p] = liczba[k];
		liczba[k] = z;
		p++;
		k--;
	} while (p < k);

	
	return liczba;

}


int main()
{

	cout << "Podaj dowolna liczbe: ";
	cin >> liczba;

	cout << "Odwrotnosc liczby: " << odwrotnosc(liczba) << endl;
	cout <<endl<< "Liczba ma " << dl << " cyfry/ cyfr" << endl;
	
	

	system("PAUSE");
	return 0;
}

mogłabym prosić o korekte tego kodu, odwrotność w tym przypadku ma zwracac liczbe zapisną od tyłu, tylko jak podesłać do main ilosc cyfr liczby? czy lepiej to

cout <<endl<< "Liczba ma " << dl << " cyfry/ cyfr" << endl;

umiescic poprostu w funkcji odwrotnosc? 

komentarz 26 stycznia 2017 przez Sinnley Stary wyjadacz (12,810 p.)

Liczba zapisana od tyłu to trochę co innego niż jej odwrotność ;d

Kod sprawdzę później, jak będę mieć dostęp do komputera.

Jeśli chcesz przesłać do maina ilosc cyfr liczby to możesz zwracać ją zamiast tej odwrotnej liczby, a do definicji funkcji dodać & czyli skorzystać z referencji. Dzięki temu będziesz pracował na oryginalnej zmiennej.

int odwroc(string& liczba)
{

// kod

return liczba.length();
}

 

komentarz 26 stycznia 2017 przez efiku Szeryf (75,160 p.)
komentarz 26 stycznia 2017 przez vega Użytkownik (510 p.)

niefortunne sformułowanie smiley

Okej, ale ja potrzebuje wyświetlić własnie tą liczbe zapisaną od tyłu i ilość jej cyfr, czyli mam stworzyć jakby nową funkcje, która zliczy cyfry i wywołać ja w mainie? 

komentarz 26 stycznia 2017 przez Sinnley Stary wyjadacz (12,810 p.)
@efik, kolega źle się wyraził, chodziło mu o liczbe zapisaną od tyłu, czyli po prostu o odwrócenie stringa, tablicy.
komentarz 26 stycznia 2017 przez Sinnley Stary wyjadacz (12,810 p.)
Nie, jeśli skorzystasz z referencji, to będziesz pracował na oryginalnej zmiennej, nie musisz jej więc zwracać. Wystarczy, że ją potem wypiszesz w mainie.

Zwróć za to inta - liczbe cyfr.
komentarz 26 stycznia 2017 przez Sinnley Stary wyjadacz (12,810 p.)

Ok, żeby zamnąć temat nagryzmoliłem to na telefonie.

Aby odwrócić tą liczbę wystarczy prosty algorytm. Twój kod sprawdzę dokładnie potem, tutaj jest moje proponowane rozwiązanie.

int odwroc(string& liczba)
{

char temp;

for (int i = 0; i <= (liczba.length() / 2); i++) 
{

	temp = liczba[i];
	liczba[i] = liczba[liczba.length() - i -1];
	liczba[liczba.length() - i - 1] = temp;

}

return liczba.length();

}

Jeśli coś niejasne - pytaj.

komentarz 26 stycznia 2017 przez vega Użytkownik (510 p.)

nie berdzo rozumiem, bo nigdy nie korzystałam z referencji frown

komentarz 26 stycznia 2017 przez vega Użytkownik (510 p.)

dziękuje, spróbuje po koleji zrozumieć! laugh

komentarz 26 stycznia 2017 przez Sinnley Stary wyjadacz (12,810 p.)

Przeczytaj to: http://cpp0x.pl/kursy/Kurs-C++/Poziom-3/Przekazywanie-argumentow-funkcji-przez-referencje/356

 

W skrócie:

Kiedy przekazujesz argumenty do funkcji "normalnie", czyli nie przez referencje, to wewnątrz funkcji tworzy się kopia tego argumentu.

Jeśli prześlesz funkcji zmienną  a, a funkcja w srodku zmieni wartosc a na powiedzmy 4, to w mainie a dalej będzie miało starą wartość.Jeśli skorzystasz z referencji będziesz pracował na oryginalnej zmiennej i podmienisz oryginalną wartość na 4.

komentarz 26 stycznia 2017 przez vega Użytkownik (510 p.)
Próbowałam coś z tym zrobić jednak wyswietla mi tylko ilość cyfr, bez odwróconej liczby
komentarz 26 stycznia 2017 przez efiku Szeryf (75,160 p.)
edycja 26 stycznia 2017 przez efiku

http://ideone.com/soTyOo

Edit:  W takim razie wystarczyła by odpowiednio zaimplementowana pętla :

for(int begin= 0, end = string.length()-1; begin<end; begin++, end--) 

 

komentarz 26 stycznia 2017 przez Sinnley Stary wyjadacz (12,810 p.)
efik, to zadanie jawnie jest natury algorytmicznej...

Co da mu to, że użyje tutaj funkcji, skoro może pomyśleć i czegoś się nauczyć?
komentarz 26 stycznia 2017 przez Sinnley Stary wyjadacz (12,810 p.)

@vega

 

int odwroc(string& liczba)
{
 
char temp;
 
for (int i = 0; i <= (liczba.length() / 2); i++) 
{
 
    temp = liczba[i];
    liczba[i] = liczba[liczba.length() - i -1];
    liczba[liczba.length() - i - 1] = temp;
 
}
 
return liczba.length();
 
}
int main()
{

string lba;
cout << "Podaj liczbe: ";
cin >> liczba;

cout << odwroc(lba) << " cyfrowa liczba " << lba;

return 0;
}

Przykladowy wynik po podaniu "12345".

"5 cyfrowa liczba 54321"

komentarz 26 stycznia 2017 przez vega Użytkownik (510 p.)

Dziękuje bardzo! Wszystko pięknie działa jeszcze tylko musze popracować nad zrozumieniem referencji laugh

1
komentarz 26 stycznia 2017 przez Sinnley Stary wyjadacz (12,810 p.)

Może niewłaściwie rozumiesz samą ideę parametru.

Podając zmienną w ten sposób dzieje się to.

void foo(int a)
{
//kod
}
int main()
{

int x;
foo(x); // ta funkcja dostaje x,
          // a następnie tworzy nową zmienną a, która dostaje taką wartość, jak ma x.
          // jesli funkcja foo zmieni wartosc zmiennej a, zmienna x wciąż będzie taka sama.
}

//

void foo(int& a)
{
//kod
}
int main()
{

int x;
foo(x); // ta funkcja dostaje x, 
          // a nastepnie tworzy nazwe zastępczą dla x, czyli "a". W ten sposob ta zmienna
          // ma dwoje imion, tak jak ksywka i imie odnoszą się do tej samej osoby.
          // zmiana zmiennej a, powoduje zmiane x, bo to ta sama zmienna

}

Bardziej obrazkowo:

Masz niebieski rower. Komuś spodobał się twój rower, ale woli go w kolorze czerwonym. Robi więc sobie taki sam rower, ale czerwony. W ten sposob jeden rower jest czerwony, a drugi niebieski. - W ten sposob dziala zwykle przekazywanie argumentu.

Masz niebieski rower. Komuś spodobał się twój rower, ale woli go w kolorze czerwonym. Bierze więc twój rower i przemalowuje go na kolor czerwony. W ten sposob jest jeden rower, ale ze zmienionym kolorem. - W ten sposob dziala przekazywanie argumetu przez referencje.

komentarz 26 stycznia 2017 przez vega Użytkownik (510 p.)

Czyli jak przekazuje argument przez referencje to wszystkie działania są wykonywane na tej zmiennej i nawet jak funkcja zwraca coś innego(w tym przypadku dlugosc liczby), to przy wywołaniu zmiennej, jej oryginalna wartość ginie i jest wyśwetlana np. od konca?

mam nadzieje, ze wysłowiłam sie w miarę jasno laugh

1
komentarz 26 stycznia 2017 przez Sinnley Stary wyjadacz (12,810 p.)
Nie ginie. Ta wartość "od końca" jest wartością oryginalną. Bo stara wartość została podmieniona na nową.

Jeśli używasz referencji to jest tak, jakbyś wkleiła kod z funkcji bezpośrednio do maina i wszędzie gdzie występuje zmienna, którą oznaczyłaś parametr, wsadziła zamiast tego po prostu oryginalną zmienną, tą, którą przekazywałabyś funkcji.

Jeśli nie używasz referencji to tak jakbyś zrobiła sobie nową zmienną, dała jej wartość tej pierwszej, czyli tej co trzyma tą liczbe, i na niej zrobiła wszystkie te operacje z funkcji. Pod koniec twoja pierwsza zmienna dalej trzyma pierwotną wartość, a druga, na której robiłaś operacje wartość zmienioną.

 

Po prostu - przy referencji działasz na oryginalnej zmiennej. Modyfikujesz oryginalną zmienną, zmieniajasz jej wartość. Nie musisz więc nic zwracać.
Kiedy nie używasz referencji tworzona jest kopia i to na niej wszystkie operacje mają miejsce. Tworzysz własny rower i go przemalowujesz. Jednocześnie ta zmienna żyje tak długo jak długo trwa działanie funkcji. Więc jeśli chcesz jakoś tą wartość zapamiętać musisz ją zwrócić.
komentarz 26 stycznia 2017 przez vega Użytkownik (510 p.)

Bardzo dziękuję,  wszystko jasne!  laugh

+1 głos
odpowiedź 26 stycznia 2017 przez Szymon Polaczy Obywatel (1,660 p.)
wyjaśnię ci czym jest parametr

void Funkcja(int parametr) -> parametr może być jakiegokolwiek typu

jeśli funkcja przyjmuje jakiś parametr to w jej wywołaniu (funkcji) musisz go podac czyli jezeli ja wywołam tą funkcję z góry to musze napisac Funkcja(10) <- Wysyłam do niej inta ponieważ takie coś przyjmuje funkcja

Zdaje mi się że powinieneś napisać parametr = -parametr

Mam nadzieję że pomogłem
komentarz 26 stycznia 2017 przez Sinnley Stary wyjadacz (12,810 p.)
parametr = -parametr  zwróci liczbę przeciwną, nie odwrotną.
komentarz 26 stycznia 2017 przez Szymon Polaczy Obywatel (1,660 p.)
faktycznie
1
komentarz 26 stycznia 2017 przez JAKUBW Nałogowiec (33,470 p.)
Liczba odwrotna to 1/liczba
komentarz 26 stycznia 2017 przez Szymon Polaczy Obywatel (1,660 p.)
okej zobaczyłem u Slajni na końcu
1
komentarz 26 stycznia 2017 przez Sinnley Stary wyjadacz (12,810 p.)
Przeciwna - po przeciwnej stronie osi liczbowej.

Odwrotna - po odwróceniu ułamka, czyli 1/x, albo x^(-1)
komentarz 26 stycznia 2017 przez Szymon Polaczy Obywatel (1,660 p.)
dzięki za wytłumaczenie

Podobne pytania

0 głosów
1 odpowiedź 265 wizyt
0 głosów
4 odpowiedzi 269 wizyt
0 głosów
3 odpowiedzi 232 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...