Zaloguj się, aby obserwować  
UthersonL

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

1812 postów w tym temacie

Witam!
Mój problem dotyczy prostej gry, którą staram się napisać w Qt w wersji 4.6. Mianowicie napisałem dwie funkcje ''saveGame'' i ''loadGame'' zapisujące i wczytujące stan gry (w tym przypadku ustawienie pionków na planszy) do pliku tekstowego. Każdą z tych funkcji chciałbym "przyczepić" do stworzonych wcześniej przycisków ''Zapisz'' i ''Wczytaj''. I tu pojawia się problem.

W moim programie umieściłem dwie klasy: Interface - w której znajdują się między innymi wspomniane wcześniej przyciski i Game - w której znajdują się funkcje save i load. W pliku nagłówkowym zadeklarowałem funkcje jako public slots, a w klasie Interface stworzyłem obiekt klasy Game. Potem próbowałem użyć funkcji connect() w następujący sposób : connect(pbZapisz, SIGNAL(clicked()), this, SLOT(saveGame())); i na kilka innych, niestety bez powodzenia. Ma ktoś jakiś pomysł? Byłbym wdzięczny.

PS Moje funkcje sprawdzałem i działają poprawnie, więc to nie ich wina.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Wybaczcie post pod postem ale uświadomiłem sobie błahość mojego problemu - w funkcji connect() trzeba było zamienić ''this'' na ''game'' - czyli klasę w której znajduje się wywoływana funkcja. :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Krótko - 3 klasa gim. Pascal, kompletnie nie ogarniam, nie umiem nic, potrzebuje szybko 4 proste ( a przynajmniej tak mówi nauczycielka ) programy. Pomoże ktoś? Będę niesamowicie wdzięczny.
1) Napisać program obliczający długość obwodu trójkąa, jeśli jego boki wynoszą a=5, b=7, c=9. Zmienną jest obwód. Dla obliczonego wyniku przyjąć format o polu 6-znakowym.
2) Napisać program obliczający wartość x z równania:
a*x+b=c
3) Napisać program obliczający pole koła. średnica koła ma być wprowadzona do programu z zewnątrz. Zmienną jest pole.
4) Napisać program obliczający obwód koła o średnicy równej 5cm. Zmienną jest Obwód. Program ma wyświetlić odpowiedź.
Z góry dzięki, uratujecie mi dupe :p

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 24.05.2010 o 18:51, Pernia napisał:

2) Napisać program obliczający wartość x z równania:
a*x+b=c

A te a i b mają mieć jakieś wartości czy je będziesz wprowadzać?
Pozostałe mogę zrobić bo to góra 3 minuty roboty ;-)

Edit. A jeśli chodzi o pierwsze to co to jest za pole 6-znakowe?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 24.05.2010 o 19:08, Fun_g_1_2_3 napisał:

> 2) Napisać program obliczający wartość x z równania:
> a*x+b=c
A te a i b mają mieć jakieś wartości czy je będziesz wprowadzać?

wprowadzać

Dnia 24.05.2010 o 19:08, Fun_g_1_2_3 napisał:

Pozostałe mogę zrobić bo to góra 3 minuty roboty ;-)
Edit. A jeśli chodzi o pierwsze to co to jest za pole 6-znakowe?

chodzi o to, ze zostanie wyswietlone 6 cyfr liczby.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

łups, zapomniałem, ale przy drugim zadaniu jest jeszcze, że wartości a, b, c, x należą do zbioru liczb rzeczywistych. Do tego format x:6:2, cokolwiek to znaczy, i jeżeli cokolwiek to zmienia :P

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Nadal nie wiem o co chodzi z tymi 6 znakami więc będziesz musiał dorobić to w jakiś sposób sam.
Wynik w tym zadaniu jest 2 cyfrowy + 3 liczby to jest według mnie 5 liczb ;-)

program trojkat;
uses CRT;
var
obwod:integer;
begin
obwod:=5+7+9;
writeln(obwod);
readkey;
end;

program pole;
uses CRT;
var
r, srednica:integer;
pole:real;
begin
readln(srednica);
r:=srednica/2;
pole:=3,14*(r*r);
writeln(pole:3:2);
readkey;
end;

program obwod;
uses CRT;
var
obwod:real;
begin
obwod:=2*3,14*(5/2);
writeln(obwod);
readkey;
end;

co do drugiego zadania to miałeś funkcję IF?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 24.05.2010 o 19:27, Fun_g_1_2_3 napisał:

co do drugiego zadania to miałeś funkcję IF?

nie.
O ile widzę są to zadania 1, 3, 4, tak? I readkey znaczy to samo co readln, prawda?:P
Aa właśnie - w czwartym zadaniu jeszcze chodzi o wyświetlenie odpowiedzi typu 'Obwód wynosi tyle i tyle', z tym, że oczywiście nie wiem jak to zrobić xD

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 24.05.2010 o 19:30, Pernia napisał:

O ile widzę są to zadania 1, 3, 4, tak? I readkey znaczy to samo co readln, prawda?:P

Z kolejnością zgadłeś ;-)
readln bez parametru to oczekiwanie na wciśnięcie klawisza ENTER
readkey bez parametru to oczekiwanie na wciśnięcie dowolnego klawisza.
Nad zadaniem 2 to muszę chwilkę pomyśleć ;-)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Jak jakieś pytania/niejasności to pytaj ;-)

program trojkat;
uses CRT;
var
obwod:integer;
begin
obwod:=5+7+9;
writeln("Obwod wynosi: "+obwod);
readkey;
end;

program rownanie;
uses CRT;
var
a, b, c, x:real;
begin
writeln("podaj A");
readln(a);
writeln("podaj B");
readln(b);
writeln("podaj C");
readln(c);
x:=((-1*b)/a)+(c/a);
writeln ("X jest rowny: "+x:6:2);
readkey;
end;

program pole;
uses CRT;
var
r, srednica:integer;
pole:real;
begin
writeln("Podaj srednice:");
readln(srednica);
r:=srednica/2;
pole:=3,14*(r*r);
writeln("Pole wynosi: "+pole:6:2);
readkey;
end;

program obwod;
uses CRT;
var
obwod:real;
begin
obwod:=2*3,14*(5/2);
writeln("Obwod wynosi: "+obwod:6:2);
readkey;
end;

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Cześć, mam problem z napisaniem programu w C++. Oto polecenie:
Napisz program, który będzie wczytywać kolejne linie zawierające dziewięciocyfrowe numery telefonów w różnych formatach i wypisywać je w jednym formacie - trzy grupy po trzy cyfry.

Dla każdej kolejno wczytanej linii utwórz nową zmienną typu string. W pętli przejrzyj wczytaną linię znak po znaku, i jeśli dany symbol jest cyfrą to dodaj go do utworzonego stringa.


Niestety nie wiem jak się za to zabrać. Pomoże mi ktoś chociaż pisząc dokładny algorytm?

Udostępnij ten post


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

Napisz program, który będzie wczytywać kolejne linie zawierające dziewięciocyfrowe
numery telefonów w różnych formatach i wypisywać je w jednym formacie - trzy grupy po
trzy cyfry.

Dla każdej kolejno wczytanej linii utwórz nową zmienną typu string. W pętli przejrzyj
wczytaną linię znak po znaku, i jeśli dany symbol jest cyfrą to dodaj go do utworzonego
stringa.


1) Kłaniają się operację na znakach i przeszukiwanie każdego wprowadzonego znaku w celu pozostawienia samych liczb.
2) W C++ nie ma zmiennej String - będziesz musiał użyć tablicy.
3) Resztę masz w drugim akapicie zadania ;-)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 24.05.2010 o 20:06, Fun_g_1_2_3 napisał:

2) W C++ nie ma zmiennej String - będziesz musiał użyć tablicy.

Oczywiście, że są, bo stosowałem stringi do podania napisu

Dnia 24.05.2010 o 20:06, Fun_g_1_2_3 napisał:

3) Resztę masz w drugim akapicie zadania ;-)

Mi chodzi o dokładny algorytm, taki dla debila ;)

Udostępnij ten post


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

Dla każdej kolejno wczytanej linii utwórz nową zmienną typu string. W pętli przejrzyj
wczytaną linię znak po znaku, i jeśli dany symbol jest cyfrą to dodaj go do utworzonego
stringa.


#include <iostream>
#include <string>

using namespace std;

string numtel(string tekst)
{
int rozmiar, i, znak;
string nowytekst;
nowytekst="";

rozmiar=tekst.size(); // odczytanie długości stringa
for (i=0;i<rozmiar;i++)
{
znak=tekst.at(i); // odczytanie kodu znaku (w ASCII) o indeksie "i"
if ((znak>=48) and (znak<=57)) //sprawdzenie czy znak jest liczbą
nowytekst+=znak; //dodanie znaku do nowego stringa
}

return nowytekst;

}

int main()
{
string tekst;

getline(cin, tekst); //wczytanie linii
cout<<numtel(tekst);

return 0;
}

Masz tu funkcję, która wczytuje dowolny string, i zwraca tylko liczby jakie zawierał. Przerobienie go na twoje potrzeby nie powinno ci zająć dużo czasu. W razie problemów - pytaj. ;]

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Cześć, mam problem z programem. Ma odczytać wartości z funkcji. Ale nie odczytuje - muszę je wpisać ręcznie. Móżecie mi powiedzieć co jest źle? Na pewno jakiś banał, bo sama funcja działa :)
Oto kod źródłowy:

#include <iostream>
using namespace std;

void wypisz(int a)
{
int b;
b=1;
while(cin>>a)
{
if(a!=1)
{
if(a>0)
{
for(b=1;b<=a/2;b=b+1)
{
if(a%b==0)
{
cout << b << " ";
}
}
//cout << 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 << " ";
}
}
//cout << a << " ";
}
if(a==0)
{
cout << " ";
}
cout << endl;
}
if(a==1)
{
cout << "1\n";
}
}
}
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;
}


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?

Udostępnij ten post


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

void wypisz(int a)

void przed nazwą funkcji oznacza, że nie zwraca ona żadnej wartości.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

void to jest procedura, a procedura wartości nie zwraca. Musisz sobie napisać funkcję int wypisz(int liczba){...}, gdzie na końcu wynik zwracany to np. return wynik;
Później tylko wypisujesz cout<<wypisz(liczba)<<endl;

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ć