Zaloguj się, aby obserwować  
Bartuc

Język C / C++ / C# / Java - pytania, problemy...

1979 postów w tym temacie

Cześć, już to zrobiłem, tylko nie wiem jak zrobić, żeby program wyświetlił wyniki dopiero po wprowadzeniu wszystkich danych (ma sam zdecydować czy juz są wszystkie podane). Oto kod źródłowy, pomózcie!

Spoiler

#include <iostream>
using namespace std;
int main()
{
int a;
while(cin>>a)
{
for(a;a>=1;a=a/2)
{
if(a%2==0)
{
cout << "1";
}
else
{
cout << "0";
}
}
cout << endl;
}
system("pause");
return 0;
}

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Czy jest jakaś biblioteka do c/c++ na windowsa, która pozwala na... "lepsze wykorzystanie konsoli". Coś w stylu pascalowych gotoxy(x,y), setcolor, czytanie wciśniętych klawiszy(bez potwierdzania enterem) itp?

Bo jak sobie wypisuje cały ekran w znakach/spacjach to długo trwa i brzydko wygląda, a chciałem jakąś prostą "gierkę" sobie napisać zanim wejdę w winapi i dx ;]

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 21.05.2010 o 22:58, Vicot napisał:

Czy jest jakaś biblioteka do c/c++ na windowsa, która pozwala na... "lepsze wykorzystanie
konsoli". Coś w stylu pascalowych gotoxy(x,y), setcolor, czytanie wciśniętych klawiszy(bez
potwierdzania enterem) itp?

Bo jak sobie wypisuje cały ekran w znakach/spacjach to długo trwa i brzydko wygląda,
a chciałem jakąś prostą "gierkę" sobie napisać zanim wejdę w winapi i dx ;]


WinAPI: http://msdn.microsoft.com/en-us/library/ms682073(VS.85).aspx - lista funkcji do obsługi konsoli.

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

Piszę aplikację w javie, jest to rodzaj komunikatora.
Generalnie funkcja main tworzy mi okno komunikatora. Wewnątrz formatki mam możliwość zalogowania się - pola logowania/hasła, przycisk zaloguj.
Po udanym logowaniu odpalane są 2 wątki, odbierający i wysylający wiadomości i cały program ma działać tak długo jak te 2 wątki działają.

I tu pojawia się mój problem. Jak w najlepszy sposób zmusić maina by poczekał do momentu uruchomienia tych wątków?

W chwili obecnej mój main wygląda tak:

public static void main(String[] args) {
//jest zadeklarowana wyżej, jako zmienna globalna
formatka.show();

//tego wykorzystywałem dotąd by sprawdzić czy receiver, czyli wątek odbierający sie już zatrzymał
//działało dopóki to main odpowiadał za logowanie. (w tym miejscu były tworzone wątki odbierajcy i wysyłający)
// Odkąd przeniosłem logowanie poza klasę w tym momencie programu
//receiver wciąż jest w stanie NEW (jeszcze nie wystartowany)
try
{
reciver.join();
}
catch(Exception e){}

WriteOut("Goodbye!");
//rozłączenie z serwerem
c.connection.disconnect();
System.exit(0);
}

Zastanawiałem się na próbą uśpienia głównego wątku, ale nie chcę przerywać/zawieszać działania całego programu lecz nie do końca jestem pewien jak to rozwiązać. Klasa w której znajduje sie main implementuje już mi jeden interface (odpowiedzialny za połączenia).

Szczerze mówiąc na wątkach w javie nie pracowałem już od dobrych kilku lat i nie bardzo pamiętam jak się je efektownie obsługiwało :/

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 27.05.2010 o 02:26, DemoBytom napisał:

Zastanawiałem się na próbą uśpienia głównego wątku, ale nie chcę przerywać/zawieszać
działania całego programu lecz nie do końca jestem pewien jak to rozwiązać. Klasa w której
znajduje sie main implementuje już mi jeden interface (odpowiedzialny za połączenia).

A po co usypiać czy przerywać wątek main? Przecież on nie ma nic wspólnego z odbiornikiem i nadajnikiem, a nawet nie ma wiele wspólnego z wątkiem Swinga/SWT, który odpowiada za GUI (choć w SWT wątek main może być jednocześnie wątkiem GUI).
Z tego co napisałeś wynika, że main rozpoczyna 3 wątki (lub kontynuuje swój i rozpoczyna dwa): GUI, nadajnik i odbiornik. Ostatnie dwa mogą być również demonami, a wątek odpalający main() może się zakończyć gdy utworzy osobny wątek dla GUI.
Kiedy otworzysz jakieś formatki, to nie musi wcale działać nadajnik lub odbiornik bo są to rzeczy kompletnie niezależne od siebie. Jedynie zamknięcie GUI i jego wątku powinno zamykać wątki nadajnika i odbiornika (co dzieje się z automatu jeżeli są demonami).
GUI bez odbiornika i nadajnika może wyświetlać stan oczekiwania, który zniknie kiedy dotrze do niego komunikat o rozpoczęciu działania usług. Jeżeli dzieje się to równocześnie, to w warunkach dobrego połączenia informacja ta nie zostanie nawet wyświetlona.

Krótko mówiąc z tego co napisałeś, to poprzednio nie oddzielałeś modelu i kontrolera od widoku. Co akurat nie jest najszczęśliwszym pomysłem na projektowanie aplikacji okienkowej - szczególnie komunikacyjnej, która z założenia jest asynchroniczna.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 27.05.2010 o 18:52, Olamagato napisał:

Krótko mówiąc z tego co napisałeś, to poprzednio nie oddzielałeś modelu i kontrolera od widoku. Co akurat nie jest najszczęśliwszym pomysłem na projektowanie aplikacji okienkowej - szczególnie komunikacyjnej, która z założenia jest asynchroniczna.


Tak to był mój główny błąd, dziękuję za wskazanie go, wątek główny niepotrzebnie odpowiadał za dodatkowe wątki, a ponieważ to nie on je startował (jedynie tworzył, po czym miał czekać aż się zakończą.. ale ich nie startował), cały program się zamykał.. Odzieliłem obsługę GUI od wątku głównego, przeniosłem wspomniane wątki poza maina, dzięki czemu już wszystko działa jak powinno.
Z samym wzorcem MVC (rozumiem, że o to chodziło Ci w pierwszym zdaniu) nadal mam jeszcze trochę problemów, chyba nie do końca rozumiem jego założenia. W przypadku WWW trochę to łatwiej pojąć, model odpowiada za połączenia z bazą, widok to wygląd strony, kontroler je łączy (mam rację?)

>Ostatnie dwa mogą być również demonami,

Słyszałem kiedyś o wątkach - demonach.. Ale kompletnie nie pamiętam co to było. O co chodzi z tymi demonami?
Z tego co znalazłem to różnica między demonami a zwykłymi wątkami jest taka, że JVM zakończy program i ubije wszystkie demony gdy żaden normalny wątek nie będzie już działać, correct?
W takim razie po co używać demonów?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 28.05.2010 o 18:41, DemoBytom napisał:

wątek główny niepotrzebnie odpowiadał za dodatkowe wątki, a ponieważ to nie on je startował (jedynie tworzył, po czym miał czekać aż się zakończą.. ale ich nie startował)

To w takim razie jaki wątek je startował? GUI? Jeżeli tak, to GUI też jest odpalony przez wątek uruchamiający main(), więc wychodzi na jedno.

Dnia 28.05.2010 o 18:41, DemoBytom napisał:

Z samym wzorcem MVC (rozumiem, że o to chodziło Ci w pierwszym zdaniu) nadal mam jeszcze
trochę problemów, chyba nie do końca rozumiem jego założenia. W przypadku WWW trochę
to łatwiej pojąć, model odpowiada za połączenia z bazą, widok to wygląd strony, kontroler
je łączy (mam rację?)

Nie do końca. Założenie jest takie, że widok zajmuje się jedynie wyświetlaniem. Widokiem jest więc albo Swing/SWT (klasy z tej biblioteki lub dziedziczące po nich), albo klasy używające poleceń konsoli takich jak printf, println oraz odczytujące konsole (nie musi być jedna). Oczywiście oprócz tego Twój kod zajmujący się konkretnymi formatkami.
W dobrze napisanym programie jedną zmianą będziesz w stanie przełączyć w aplikacji generowanie wszelkich danych wyjściowych na GUI lub na konsolę. Tak samo z wejściem i sterowaniem. Kod generujący wyjście na Swinga, SWT, natywne okienka, formujący dane do transmisji do ufoludków lub wypluwający dane na konsolę będzie właśnie kodem "widoku". Modelem natomiast będzie to czym naprawdę program się zajmuje - a to liczeniem wagi rzeczy w pralce, rozkładem pasażerów i towaru w samolocie, a to symulacją wyścigówki na torze F1, a to generowaniem wymyślnych raportów finansowych, a to przeliczanie zmian w świecie gry.
Kontrolerem kod odpowiedzialny za przełączanie między widokami lub przepływem danych od modelu do wszystkich widoków, kod pozwalający na dostęp do baz danych widokom, wszelkie usługi, praktycznie wszystko to czego nie można jawnie zaliczyć ani do modelu programu, ani do jego widoków. Dlatego zdefiniowanie kontrolera jest trudne. W każdej aplikacji może być on czymś innym. Zwykle do kontrolera zalicza się usługi bez których cała aplikacja nie może pracować. Tymi usługami są również wątki demonów.

Dnia 28.05.2010 o 18:41, DemoBytom napisał:

Słyszałem kiedyś o wątkach - demonach.. Ale kompletnie nie pamiętam co to było. O co chodzi z tymi demonami?
Z tego co znalazłem to różnica między demonami a zwykłymi wątkami jest taka, że JVM zakończy
program i ubije wszystkie demony gdy żaden normalny wątek nie będzie już działać, correct?
W takim razie po co używać demonów?

Demony, to nic innego jak usługi. Nasłuchiwanie serwera i wysyłka danych są właśnie usługami (natomiast kod formujący ich postać do wysłania lub odbierający je z serwera do postaci zrozumiałej dla modelu jest widokiem). Ich samoistnie istnienie bez "zleceniodawcy" nie ma najmniejszej racji bytu - dlatego są ubijane od razu gdy tylko ostatni "normalny" wątek aplikacji zakończy się. Usługi wtedy przestają być do czegokolwiek potrzebne.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Witam

w tym roku w szkole będę mieć C++ , i czy jakąś książkę byście mogli mi polecić czy stronkę www czy coś ?????


Z góry dziękuję :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 13.09.2010 o 22:00, Shiraco napisał:

Witam

w tym roku w szkole będę mieć C++ , i czy jakąś książkę byście mogli mi polecić czy stronkę
www czy coś ?????

C++ Pierwsze starcie (o taka: http://alejka.pl/jezyk-c-pierwsze-starcie.html). Całkiem dobry podręcznik i nie kosztuje majątku. Oraz co najważniejsze, nie pisany z myślą o zawodowych programistach (choć trochę matmy w nim jest), więc napisano go dość przystępnym językiem.
Z kursów online z kolei odradzam wszystkie. Przez dłuższy czas będzie ci się myliła składnia itd. a mimo wszystko przejrzeć stronę w książce jest o wiele szybciej (i wygodniej) niż korzystać z wielu różnych podstron online. Zwłaszcza że wiele z nich jest pisana z myślą o starszych wersjach C++, a jednak najnowsze trochę się różnią.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 13.09.2010 o 22:11, ziptofaf napisał:



Ok , kupię tę książkę , kurczę już tyle razy mi pomogłeś że jakieś piwko czy kole powinienem Ci postawić czy coś :P

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 13.09.2010 o 22:00, Shiraco napisał:

Witam

w tym roku w szkole będę mieć C++ , i czy jakąś książkę byście mogli mi polecić czy stronkę
www czy coś ?????


Z góry dziękuję :)


Ja polecić mogę książkę "Symfonia C++" Jerzego Grębosza, jest napisana moim zdaniem bardzo przystępnym językiem i dzięki temu bardzo dobrze się ją czyta (prawie jak książkę fabularną)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 16.09.2010 o 20:57, hans_olo napisał:

> Siema , mam problem z wyrzucaniem inputa usera typu -2-2 albo +2+2 , albo -2-2-2--2-2

> lub 2=2-2-=2-=2-
>
> http://pastebin.com/JFmkp8E2
>
> // środowisko Visual Studio 2008 EE
>
>
> aplikacja robi crash''a mimo (isdigit)
>
Ale kompiluje się, tak?


Tak

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Żeby nie było niedomówień. O jakie "wyrzucanie" chodzi? W skrócie, co ma program robić. W którym momencie jest błąd? (Aktualnie jestem pozbawiony kompilatora ;]).

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 16.09.2010 o 21:16, hans_olo napisał:

Żeby nie było niedomówień. O jakie "wyrzucanie" chodzi? W skrócie, co ma program robić.
W którym momencie jest błąd? (Aktualnie jestem pozbawiony kompilatora ;]).


kiedy wprowadzę wartość typu 2-2-2-2 następuje crash ctype.h

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Kilka poprawek dałem (w tym kosmetyka), ale będziesz musiał sobie przekształcić unsigned char w liczby, bo obecnie zmienne przyjmują wartości odpowiadające kodom ASCII. JA tymczasem muszę szefowi raport napisać ;].
#include <cstdlib>
#include <iostream>
//#include "stdafx.h"
#include <string>
#include <ctime>
#include <cctype>
#include <limits>
#include <iomanip>

using namespace std;
float liczba (int i, float w) {

unsigned char z;
std::cout << "\nPodaj liczbe #" << i << " : ";
cin >> z;




if (cin.good()&& isalnum(z)==1)
{

w+=z;

}


else {
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), ''\n'');
std::cout << "\nLiczba nr #" << i << " nie jest liczba ... \n";


}

cout << "\n podales liczbe \n";
std::cout << "\nwprowadziles : " << w << "\n";
return w;
}

int iles () {

int ile;

std::cout << "\nPodaj Ile chcesz liczb wpisac ! : ";
cin >> ile;



if (cin.good()!=0)
{

if (ile>0) {



if (isdigit(ile))
{
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), ''\n'');
std::cout<< "\n Nie jest liczba ... \n";
ile=iles();

}

} else {

cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), ''\n'');
ile=iles();
}

} else {
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), ''\n'');
std::cout<< "\nNie jest liczba ... \n";
ile=iles();

}
return ile;
std::cout<< "\nwprowadziles : " << ile << "\n";
}

int main(int argc, char *argv[])
{

int ile;
float w=0;
float srednia=0;

std::cout << "Obliczanie Srednie wazonej z n liczy ! : \n\n";

ile=iles();

for (int i=1;i<=ile;i++) {

w=liczba(i, w);
}




cout << endl << "Srednia wynosi: " << w/ile;


system("PAUSE");
return EXIT_SUCCESS;
}

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 16.09.2010 o 22:32, hans_olo napisał:

Kilka poprawek dałem (w tym kosmetyka), ale będziesz musiał sobie przekształcić unsigned
char w liczby, bo obecnie zmienne przyjmują wartości odpowiadające kodom ASCII. JA tymczasem
muszę szefowi raport napisać ;].


Starczy wymuszona konwersja typu

zmienna= (int) z ?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 18.09.2010 o 23:19, Jan_Czarny napisał:

Starczy wymuszona konwersja typu

zmienna= (int) z ?

generalnie trzeba będzie jeszcze zmienić warunki na wykrywanie liczb, bo w ASCII każdy znak jest liczbą ( w sumie nie wiem czy nie lepiej byłoby zastosować zwykłego char zamiast nieokreślonego), więc 0 ma wartość 30, 1=31 itd. tymczasem litera a ma wartość 61 itd. Zatem zamiast wykrywania liczby sprawdzasz zakresy wartości ASCII. Po przepisaniu zmiennej na z musisz zatem w przypadku cyfr odjąć od zmiennej 30 czyli zmienna=(int) z - 30.

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ć