Zaloguj się, aby obserwować  
UthersonL

Programowanie - pytania, problemy, przykłady programów

1812 postów w tym temacie

Dnia 03.06.2010 o 13:46, Harrolfo napisał:

To w którym miejscu tego kodu ma być return? I jaki wynik, skoro mam tam couty?

return zawsze jest ostatnim poleceniem w funkcji i powinien się na jej końcu.
Dla przykładu:
function XXX(int a)
{
cout<<"podaj A";
cin>>a;
return a;
}

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Wpisałem returny gdzie się da:

#include <iostream>
using namespace std;

int wypisz(int a)
{
int b;
b=1;
while(cin>>a)
{
if(a>0)
{
for(b=1;b<=a/2;b=b+1)
{
if(a%b==0)
{
cout << b << " ";
return b;
}
}
cout << a << " ";
return a;
}
if(a==0)
{
cout << " ";
}
if(a<0)
{
a=-a;//dzielniki liczby ujemnej takie same jak dodatniej
for(b=1;b<=a/2;b=b+1)
{
if(a%b==0)
{
cout << b << " ";
return b;
}
}
cout << a << " ";
return a;
}
if(a==0)
{
cout << " ";
}
cout << endl;
}
return wypisz(a);
}

int main()
{
cout << "Testowanie funkcji wypisz:\n";
cout << "----- Test 1 -----\n";
cout << "Uruchomienie z parametrem 1, spodziewany wynik:\n";
cout << "1\n";
cout << "Odpowiedz funkcji:\n";
wypisz(1);
cout << "----- Test 2 -----\n";
cout << "Uruchomienie z parametrem 65, spodziewany wynik:\n";
cout << "1 5 13\n";
cout << "Odpowiedz funkcji:\n";
wypisz(65);
cout << "----- Test 3 -----\n";
cout << "Uruchomienie z parametrem 43, spodziewany wynik:\n";
cout << "1\n";
cout << "Odpowiedz funkcji:\n";
wypisz(43);
cout << "----- Test 4 -----\n";
cout << "Uruchomienie z parametrem 1000002, spodziewany wynik:\n";
cout << "1 2 3 6 166667 333334 500001\n";
cout << "Odpowiedz funkcji:\n";
wypisz(1000002);

string s;
getline(cin,s);
return 0;
}


Bez efektu...

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Nic z tego nie kumam...Jest inny sposób? Bo ta funkcja działa bez referencji chyba:

#include <iostream>

using namespace std;

int minimum(int a, int b)
{
if(a>b)
{
return b;
}
else
{
return a;
}
return 0;
}

int main()
{
cout << "Testowanie funkcji minimum:\n";

cout << "----- Test 1 -----\n";
cout << "Uruchomienie z parametrami 2 i 4, spodziewany wynik: 2\n";
cout << "Odpowiedz funkcji: " << minimum(2, 4) << "\n";
if (minimum(2, 4)==2)
cout << "Odpowiedz prawidlowa\n";
else
cout << "Odpowiedz nieprawidlowa\n";

cout << "----- Test 2 -----\n";
cout << "Uruchomienie z parametrami 4 i 2, spodziewany wynik: 2\n";
cout << "Odpowiedz funkcji: " << minimum(4, 2) << "\n";
if (minimum(4, 2)==2)
cout << "Odpowiedz prawidlowa\n";
else
cout << "Odpowiedz nieprawidlowa\n";

cout << "----- Test 3 -----\n";
cout << "Uruchomienie z parametrami 1000 i 1001, spodziewany wynik: 1000\n";
cout << "Odpowiedz funkcji: " << minimum(1000, 1001) << "\n";
if (minimum(1000, 1001)==1000)
cout << "Odpowiedz prawidlowa\n";
else
cout << "Odpowiedz nieprawidlowa\n";

cout << "----- Test 4 -----\n";
cout << "Uruchomienie z parametrami 100 i -100, spodziewany wynik: -100\n";
cout << "Odpowiedz funkcji: " << minimum(100, -100) << "\n";
if (minimum(100, -100)==-100)
cout << "Odpowiedz prawidlowa\n";
else
cout << "Odpowiedz nieprawidlowa\n";

string s;
getline(cin,s);

return 0;
}

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Zwykle warto na początku posta napisać co ma program robić i jakie wyniki są oczekiwane. Ułatwia to nam zrozumienie do czego dążysz.
Pamiętaj, że "return" powoduje wysłanie zmiennej z powrotem do programu i natychmiastowe zakończenie funkcji.
Dodatkowo z tego co widzę wypisujesz liczbę w funkcji, a zwracanej wartości w ogóle nie używasz.

Przeanalizuj taki program:

int max(int a, int b)
{
if (a>b) return a;
return b; //to sie juz nie wykona jak a bedzie wieksze
}

main()
{
int x = 5;
int y = 10;
int wieksza;
wieksza = max(x,y); //przypisanie wartosci zwracanej do zmiennej
count << wieksza << endl;
wieksza = max(83,28);
count << wieksza << endl;
count << max(39,68) << endl; //a tu od razu wynik funkcji przypisany do strumienia wyjscioewgo
}

PS. Pisalem na poczekaniu wiec moze cos sie nie kompilowac, ale ogolnie powinno byc ok ;)
PS2. Odpisywałem na twojego wczesniejszego posta i zauwazylem ze juz conieco poprawiles ;)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

No ok, więc po prostu: co gdzie mam dopisać do tego pierwszego programu (ma wypisywać kolejne dzielniki liczby), żeby działało?

BTW: Zamiast count powinno byc chyba cout, nie? ;)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

#include<iostream>
#include<algorithm>
using namespace std;

int wypisz(int a,int b){
int wynik=min(a,b);
return wynik;
}
main(){
int a,b;
cin>>a>>b;
cout<<wypisz(a,b)<<endl;
}

Nie prościej uzyć biblioteki algorithm do wyznaczania min/max z dwóch liczb?;>

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Chcesz zrobić program, który sprawdza dzielniki danej liczby? To może coś takiego:

#include <cstdlib>
#include <iostream>
#include <cmath>
using namespace std;

int licz(int &liczba, int &dzielnik)
{
if (liczba%dzielnik==0){return 1;}
return -1;
}

int main()
{
int liczba;
cin >> liczba;
liczba=abs(liczba);
for (int a=1; a<=liczba; a++)
{
if (licz(liczba, a)==1){cout << "Liczba " << a << " jest dzielnikiem liczby " << liczba << endl;}
}
system("PAUSE");
return EXIT_SUCCESS;
}

EDIT Wprowadziłem małą poprawkę, żeby program radził sobie z liczbami ujemnymi.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Zakładam że while(cin>>a) ma pobrać od użytkownika liczbę której dzielniki chce znaleźć? Jeśli tak, to wywal to do głównego programu i wynik tego wywołania przekaż do funkcji.
np.
cout << "podaj liczbe";
cin >> a
funkcja(a);

wynik albo może funkcja wyświetlać na ekran albo przekazywać wynik. Ten drugi sposób wymagałby użycia tablicy intów (bo masz parę wyników), albo tablicy znaków (czyli tekstowo zapisany wynik), albo funkcja przyjmowała by 2 parametry czyli liczbe której dzielnik chcesz znaleźć oraz który dzielnik i później w programie masz pętle która prosi kolejno o następne wyniki a gdy nie ma kolejnego to funkcja zwraca 0 (np. while (x!=0){ x=funkcja(tej_liczby_dzielnik, który_dzielnik); x++;}
Oczywiście podobnie można użyć referencji/wskaźnika jak umiesz ;)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Jesteś wielki, dzięki!
A co z tym zadaniem, w którym program ma wyszukiwać wystąpienia wszystkiego ciągu w drugim. Kompletnie nie wiem jak to zrobić...


I z tym:

#include <iostream>
using namespace std;
string numtel(string tekst)
{
int rozmiar,i,znak,tmp=0;
string nowytekst;
nowytekst="";
rozmiar=tekst.size();
for(i=0;i<=13;i=i+1)
{
znak=tekst.at(i);
if((znak>=48)&&(znak<=57))
{
if(tmp==3)
{
nowytekst+=" ";
tmp=0;
}
nowytekst+=znak;
tmp=tmp+1;
}
}
return nowytekst;
}
int main()
{
string tekst;
getline(cin,tekst);
cout<<numtel(tekst);
system("pause");
return 0;
}

Mimo system("pause"); okno się zamyka, więc nie mogę zobaczyć wyniku (progrram pobiera cyfry i znaki i drukuje 9 cyfr po 3 ze spacjami jako numer teleonu)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 03.06.2010 o 12:50, Harrolfo napisał:

I drugie zadanie, z którym mam problem polega na tym, że program ma wyszukiwać wystąpienia
wszystkiego ciągu w drugim. Kompletnie nie wiem jak to zrobić. Pomożecie?

Znaczy podajesz wzorzec i program ma go szukać w ciągu? Czy problem sprowadza się do znalezienia najdłuższego wspólnego podciągu? Jesli to drugie, to poczytaj o LCS.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Chodzi o coś takiego, że:
Podaję dwa słowa, np:
Lalalalalalala
i ma znaleźć la
i wypisać
2, potem 4, 6, 8, 10, 12
Każde miejsce, w którym ten szukany wyraz występuje

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 03.06.2010 o 15:35, Harrolfo napisał:

Jesteś wielki, dzięki!
A co z tym zadaniem, w którym program ma wyszukiwać wystąpienia wszystkiego ciągu w drugim.
Kompletnie nie wiem jak to zrobić...


Wiesz ze program który wkleiłeś nie robi nic takiego co opisałeś? (nawet nie jest blisko, bo ma robić coś zupełnie innego) :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 03.06.2010 o 15:54, Harrolfo napisał:

Chodzi o coś takiego, że:
Podaję dwa słowa, np:
Lalalalalalala
i ma znaleźć la
i wypisać
2, potem 4, 6, 8, 10, 12
Każde miejsce, w którym ten szukany wyraz występuje

Napisz to bardziej po polsku, bo nic z tego nie rozumiem. Co mają wspólnego cyfry, które podałeś z miejscem występowania wzorca?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Krócej:
Podaję dwa słowa:
Lalala
la
I program ma wypisać po przecinku, wszystki miejsca w pierwszym wyrazie, w których występuje drugi.
czyli 2 i 4 (bo litery w wyrazach są numerowane od 0)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 03.06.2010 o 16:36, Harrolfo napisał:

Przecież tego programu nie wkleiłem, bo nie wiem jak się za to zabrac ;P


Warto sprawdzić czy sama klasa string nie ma jakiejś takiej funkcji gotowej :)
A robiąc ręcznie to chyba zrobiłbym to tak (wymyślone na poczekaniu):
1. Duża pętla która sprawdza czy pierwsza litera wyrazu zgadza się z pierwsza literą zdania
2. jeśli nie to następna litera to sprawdzamy następną (1), jeśli tak to przechodzimy do Małej pętli (3)
3. Mała pętla sprawdza drugą literę z kolejną literą zdania
4. jeśli nie jest taka sama to wracamy do dużej pętli (1), jeśli jest taka sama to przechodzimy dalej (5)
5. sprawdzamy czy wyraz ma więcej liter.
6. jeśli tak to sprawdzamy kolejna literę (3), jeśli nie to znaleźliśmy szukany wyraz w zdaniu.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Ok, mam tak:

#include <iostream>
#include <string>
using namespace std;
int main ()
{
string wyraz1,wyraz2,a;
while(cin>>wyraz1>>wyraz2)
{
cout << wyraz1.find(wyraz2);
}
system("pause");
return 0;
}

Ale jak zrobić, żeby przeszukiwało dopóki wyraz się nie skończył?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 03.06.2010 o 18:58, Harrolfo napisał:

Ale jak zrobić, żeby przeszukiwało dopóki wyraz się nie skończył?


Każdy string (czyli zadany ciąg znaków) kończy się znakiem /0 (znak końca) i trzeba go po protu znaleźć. Czyli za każdym razem jak sprawdzasz czy znak należy do wyrazu to wpierw sprawdź czy nie nie jest to znak końca. Można jeszcze poznać rozmiar tablicy poprzez funkcję sizeof.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Utwórz konto lub zaloguj się, aby skomentować

Musisz być użytkownikiem, aby dodać komentarz

Utwórz konto

Zarejestruj nowe konto na forum. To jest łatwe!


Zarejestruj nowe konto

Zaloguj się

Masz już konto? Zaloguj się.


Zaloguj się
Zaloguj się, aby obserwować