Zaloguj się, aby obserwować  
Bartuc

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

1979 postów w tym temacie

Na uczelni kazali nam przesiąść się z C++ na C#, a ja mam z tym problem już na samym początku. Chciałem napisać prosty program, który dodawałby dwie liczby do siebie, ale nie mogę sobie z tym poradzić.

Kod w C++:

{
int a,b,suma;
cout<<"Podaj a: ";
cin>>a;
cout<<"Podaj b: ";
cin>>b;
suma = a + b;
cout<<"Suma wynosi: "<<suma;
}

Kod w C#:

{
int a = 0, b = 0, suma = 0;
Console.WriteLine("Podaj a: ");
Console.Read(a);
Console.WriteLine("Podaj b: ");
Console.Read(b);
suma = a + b;
Console.WriteLine("Suma tych liczb wynosi " + suma);
Console.ReadKey();
}

Co robię źle? Kompilator wywala mi błąd przy Console.Read(a) o treści "No overload for method ''Read'' takes 1 arguments".

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Od dawna nie używałem C# ale czy to aby nie powinno być: ReadLine(); zamiast Read() ?
A konkretniej:
string tekst = Console.ReadLine();
a = int.Parse(line);

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

W przypadku komendy ReadLine pojawia się ten sam błąd, lecz z odpowiednio nazwaną metodą. Próbowałem Twojego sposobu, ale wciąż wyskakuje mi ten sam problem.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Udało mi się już ogarnąć ten problem, jednak nie wiem właściwie, co takiego zrobiłem :P Byłbym wdzięczny, gdyby ktoś wytłumaczył mi sens pisania "a = int.Parse(Console.ReadLine());" oraz napisał, czy nie ma innego sposobu na wczytanie danej zmiennej.

{
int a = 0, b = 0, suma = 0;
Console.WriteLine("Podaj a: ");
a = int.Parse(Console.ReadLine());
Console.WriteLine("Podaj b: ");
b = int.Parse(Console.ReadLine());
suma = a + b;
Console.WriteLine("Suma tych liczb wynosi " + suma);
Console.ReadKey();
}

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 04.12.2013 o 18:44, Gumisiek2 napisał:

Byłbym wdzięczny, gdyby ktoś wytłumaczył mi sens pisania "a = int.Parse(Console.ReadLine());"


Dane z konsoli są zwykle traktowane jako dane tekstowe, jeśli chcesz je traktować jako liczby, musisz je przeparsować na odpowiedni typ.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 04.12.2013 o 18:44, Gumisiek2 napisał:

Udało mi się już ogarnąć ten problem, jednak nie wiem właściwie, co takiego zrobiłem
:P Byłbym wdzięczny, gdyby ktoś wytłumaczył mi sens pisania "a = int.Parse(Console.ReadLine());"
oraz napisał, czy nie ma innego sposobu na wczytanie danej zmiennej.


O, to byłem blisko poprawnej metody, coś jeszcze pamiętam :D
string tekst = Console.ReadLine();
a = int.Parse(tekst); <-- to powinno już zadziałać.
Po prostu w przypadku C++ miałeś przeładowany operator <<. Dzięki któremu cout mógł wyświetlać w zasadzie wszystko a jak nawet standardowo nie mógł to zazwyczaj nawet twórca niezależnej biblioteki/klasy go przeciążał by umożliwić współpracę z tą funkcją.
W przypadku C# nie ma czegoś takiego. Jako język typowo obiektowo zorientowany nie jest dla niego priorytetem uproszczenie tego typu funkcji, w końcu stworzono go z myślą o wielowątkowych aplikacjach graficznych, na co mu szybka obsługa standardowego wyjścia. Więc wczytujesz sobie tekst korzystając z funkcji ReadLine() należącej do klasy Console. To generuje ci stringa.
I teraz:
a= int.Parse(string_name); - a to z kolei ci tego stringa zamieni na inta.
Ciesz się że na razie wczytywałeś tylko jedną zmienną naraz, jak łatwo zgadnąć czegoś takiego jak cin >> a >> b >> c tutaj nie ma. Na każdą zmienną ma być osobna komenda :D

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Już się tego dowiedziałem, ale dzięki za zainteresowanie ;-) A wiesz może, czemu mam zablokowaną opcję debugowania programu po jego ponownym załadowaniu do kompilatora? Tzn. wygląda to tak, że piszę sobie program, debuguję go, wszystko działa super. Wyłączam kompilator, a następnie włączam program i lipa. Opcja debugowania zablokowana, a jedynym wyjściem jest skopiowanie kodu programu i wklejenie go do nowego projektu.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Pospamuję dziś w wątkach o programowaniu, ale znalazłem rozwiązanie i tego problemu. Nie zapisywałem całego projektu, lecz sam plik. Wystarczyło włączyć wcześniejsze programy i zapisać je ponownie przy użyciu opcji "Save all" ;-)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Czy Java wspiera użycie html/css w programach? Ogólna idea jest taka, by zbudować interfejs programu z użyciem css. Dla dużych programów jest Scaleform, ale dla mniejszych nie wiem. Tworząc prostą grę natknąłem się na idee "głównej pętli gry" i zastanawiam się, czy jest jakieś polskie opracowanie/tutorial dla gier czasu rzeczywistego na ten temat.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 14.12.2013 o 22:55, Boguslav4 napisał:

Czy Java wspiera użycie html/css w programach? Ogólna idea jest taka, by zbudować interfejs
programu z użyciem css.


Jeśli do pisania widoków użyłbyś JavyFX to tak - jeśli dobrze pamiętam to od Java7_u25 ta biblioteka jest z automatu instalowana, kiedyś trzeba było ją dociągać ręcznie. Tutaj trochę więcej na ten temat:
http://docs.oracle.com/javafx/2/css_tutorial/jfxpub-css_tutorial.htm

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Są jakieś ciekawe narzędzia programistyczne na OS X?

W ogóle takie pytanie do bardziej doświadczonych kolegów. Czego używa się do programowania w Javie i C#?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 07.01.2014 o 02:28, Sigu napisał:

W ogóle takie pytanie do bardziej doświadczonych kolegów. Czego używa się do programowania
w Javie i C#?


Java na Macu: Xcode na to pozwala (podobnie jak na wiele innych języków), fakt że trzeba się nieco pobawić żeby działał. Ewentualnie NetBeans albo Eclipse, zależy który ci się bardziej podoba.
C# - zainstaluj Mono a potem Mono Develop. Uwaga - nie wszystkie cechy języka zostały przeniesione z .NET do Mono, zwłaszcza te z najnowszej wersji która wyszła wraz z Windows 8. No i co by nie mówić - darmowy Visual Studio Express jest imho o wiele wygodniejszy od Mono Develop. Ale jako dzieło Microsoftu (podobnie jak zresztą cały C#) jest oczywiście dostępny tylko na Windowsach.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Mam program szyfrujący zdanie Cezarem. Potrzebuję, aby ktoś pomógł mi dodać opcję wyboru (switch) szyfrowania 1 lub deszyfrowania 2. Jakoś nie może mi to wyjść. :< Pomoże ktoś? Myślę, że raczej proste jak ktoś się tym zajmuje.

Kod (szyfrujący):

#include <iostream>
#include <string>
#include <iomanip>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
int main() {

string zdanie;
int n;
int dlugosc;
cout<<"Podaj zdanie:";
getline(cin, zdanie);
dlugosc=zdanie.length();
char *p=new char[dlugosc];

cout<<dlugosc<<endl;
cout<<zdanie<<endl;

for (int i=0;i<dlugosc;i++)
{
p=(zdanie).at(i);
}

cout<<"O ile chcesz dokonac przesuniecia?: ";
cin>>n;
cout<<endl<<endl;

cout<<endl<<endl;
for (int i=0;i<dlugosc;i++)
{
if (((int(p)>64)&&(int(p)<100))||((int(p)>96)&&(int(p)<123)))
if(p>=''a'' && p<=''z'')
p=''a''+((p-''a''+n)%26); //aby deszyfrować do zmienamy znak przy n
else
p=''A''+((p-''A''+n)%26); // aby deszyfrować do zmienamy znak przy n
else;

}
cout<<"Po zaszyfrowaniu:";
for (int i=0;i<dlugosc;i++)
{
cout<<(p);
}

return 0;
}

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Ktoś tu może zna się na OpenGL i GLUTcie? Mam zrobiony program z pierścieniem. Muszę zgodnie z poleceniem dodać do niego odpowiedni materiał [teraz to sam szkielet] i dwa źródła światła, jedno stałe, drugie krążące po orbicie. Ktoś byłby w stanie pomóc? Kompletnie tego nie ogarniam, próbuję się wspomagać innymi programami, ale niewiele z tego wychodzi. Zresztą tak czy inaczej nie umiem wyznaczyć wektorów normalnych.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 08.01.2014 o 23:16, JayL napisał:

Ktoś tu może zna się na OpenGL i GLUTcie? Mam zrobiony program z pierścieniem. Muszę
zgodnie z poleceniem dodać do niego odpowiedni materiał [teraz to sam szkielet] i dwa
źródła światła, jedno stałe, drugie krążące po orbicie. Ktoś byłby w stanie pomóc? Kompletnie
tego nie ogarniam, próbuję się wspomagać innymi programami, ale niewiele z tego wychodzi.
Zresztą tak czy inaczej nie umiem wyznaczyć wektorów normalnych.


Miałem Gluta 2 lata temu i jedyne co mogę polecić, to ten tutorial:

http://www.videotutorialsrock.com/opengl_tutorial/get_opengl_setup_windows/text.php

Gość pokazuje i krok po kroku kod i jego efekty. Nie wiem, czy tam dokładnie jest to co chcesz, ale wydaje mi się, że być powinno.

Z porad co do światła to z tego co pamiętam mogę tylko stwierdzić - pamiętaj, żeby po dodaniu materiału dodać jeszcze do niego wektor normalny, prostopadły do powierzchni - bo inaczej dupa z jakimkolwiek odbijaniem. Jak to robiłem to i tak randomowo wstawiałem tam wartości (:P), ale to się z tego co pamiętam sprowadza do wstawienia jedynki do ciągu zer.

Jeśli chcesz, mogę Ci wysłać mój projekt z GLUT-a - i nawet jest tam dynamiczne źródło światła (i jego ruch widać na obiekcie - projektem był strzelające działko Gatlinga). Ale byłem młody i głupi i wszystko pisałem ciągem w jednym pliku, więc dla każdego chociaż trochę znającego obiektowość to straszna sieczka :P

Ale jak chcesz, mogę wysłać - może Ci się przydać. Jak chcesz to podaj swój mail.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Zrobiłem coś takiego, wiem że wygląda paskudnie ale chodzi żebyś załapał ideę:

#include <iostream>
#include <string>
#include <iomanip>
/* run this program using the console pauser or add your own getch, system("pause") or
input loop */
using namespace std;

int szyfruj(string cos, int dlug, int przes);
int deszyfruj(string cos, int dlug, int przes);
int main() {

string zdanie;
int n, wybor;
int dlugosc;

cout<<"Podaj zdanie:";
getline(cin, zdanie);
dlugosc=zdanie.length();

cout<<dlugosc<<endl;
cout<<zdanie<<endl;

cout<<"Podaj przesuniecie?: ";
cin>>n;
cout<<endl<<endl;

cout<<"Wybierz \n 1. szyfrujemy \n 2. odszyfrowyjemy\n";
cin>> wybor;
switch (wybor)
{
case 1: szyfruj(zdanie, dlugosc, n); break;
case 2: deszyfruj(zdanie, dlugosc, n); break;
default: szyfruj(zdanie, dlugosc, n); break;
}
char a[2];
cin>>a;
return 0;
}

int szyfruj(string zdanie, int dlugosc, int n)
{
char *p=new char[dlugosc];
for (int i=0;i<dlugosc;i++)
{
p[ i]=(zdanie).at(i);
}

cout<<endl<<endl;
for (int i=0;i<dlugosc;i++)
{
if (((int(p[ i])>64)&&(int(p[ i])<100))||((int(p[ i])>96)&&(int(p[ i])<123)))
if(p[ i]>=''a'' && p[ i]<=''z'')
p[ i]=''a''+((p[ i]-''a''+n)%26); //aby deszyfrować do zmienamy znak przy n
else
p[ i]=''A''+((p[ i]-''A''+n)%26); // aby deszyfrować do zmienamy znak przy n
else;

}
cout<<"Po zaszyfrowaniu:";
for (int i=0;i<dlugosc;i++)
{
cout<<(p[ i]);
}
return 0;
}

int deszyfruj(string zdanie, int dlugosc, int n)
{
return szyfruj(zdanie, dlugosc, -n);
}

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dzięki, pobadam ten kurs. Tylko problem mam głównie z tymi wektorami normalnymi. Z tego co przeglądam programy często faktycznie wystarcza wstawić ciąg zer z jedynką, ale niestety nie zawsze i chyba nie w moim przypadku - kumpel podesłał mi swój fragment kodu i ma różne parametry wpisywane. Głównie chyba dlatego, że figura nie jest statyczna a modyfikowalna i tworzy się w pętli z wielu brył. Sam niestety nie mam pojęcia, skąd się to bierze, a że projekt mam na jutro rano to nikt mi tak szybko nie wytłumaczy...

Akurat my nadal piszemy wszystko ciągiem w 1 pliku, więc mi to nie przeszkadza. ;p To jak możesz podeślij na jayl93pl@gmail.com, dzięki.

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ć