Wątek przeniesiony 2016-01-31 13:01 z C# i .NET przez somekind.

Początki i trudne zadania

0

Witam ;) W tamtym roku zacząłem studia i uczę się programowania. Nie jest to jednak takie proste(może ze względu na wykładowcę). Mam do zrobienia sporą ilość zadań i całkowicie sobie nie radzę już z pierwszym. Próbuje coś stworzyć od ponad 2 dni i nic nie wychodzi. Treść zadania: "Zaprojektuj aplikacje, która pobiera od uzytkownika liczby dodatnie (wprowadzenie
zera konczy wprowadzanie) i wyswietla ich sume. Uzyj iteracji while."
Pracujemy w visual studio. Jest ktoś w stanie napisać mi jak to powinno wyglądać lub pokierować mnie na dobrą drogę? Brakuje mi przykładów.. poprzednie zadania jakoś robiłem bo miałem dany przykład który mogłem modyfikować.

1

Powinno to wyglądać mniej więcej tak.

Zadeklaruj zmienną do trzymania sumy;
Początek pętli;
Wczytaj zmienną;
Skonwertuj na int;
Dodaj wczytaną liczbę do zmiennej z sumą;
Wyświetl sumę;
Sprawdź czy liczba jest równa 0;
Jeśli tak to przerwij pętlę (break);
Koniec pętli;

Najlepiej pokaż co już masz.

0

Jakoś nie mogę tego załapać. Wziąłem sie za łatwiejsze zadnia. Zaprojektuj aplikacje, która pobierze dwie liczby i wyswietli informacje o relacji
(wieksza, mniejsza, równa) pomiedzy tymi liczbami.
Stworzyłem kod ale nie działa.

Double q, w;
            Console.WriteLine("podaj 1 liczbe: ");
            q = Double.ParseDouble.Parse(Console.ReadLine());

            Console.WriteLine("podaj 2 liczbe: ");
            w = Double.ParseDouble.Parse(Console.ReadLine());
             
            if (q > w)
            {
                Console.WriteLine(+q+ "jest wieksze od" +w+);
            }
            if (q < w)
            { 
                Console.WriteLine(+q+ "jest mniejsze od" +w+);
            }
            if (q = w)
            {
                Console.WriteLine(+q+ "jest równe" +w+);
            }

Program zaznacza że średniki na końcu poleceń po if są źle ale nie wiem dlaczego. Mam nadzieję że ktoś mnie oświeci i od razu dziękuje za wszystkie wskazówki ;)

0

Sorki, ale nie mogę nie zadać tego pytania (zadaję je bez żadnej złośliwości, jestem po prostu ciekawy):
Na zajęciach o tym nie było? Czy te studia to informatyka?

Próbowałeś sam pokombinować co może być nie tak z tymi błędnymi liniami?

1
Mecka napisał(a):

Program zaznacza że średniki na końcu poleceń po if są źle ale nie wiem dlaczego.

Zbędne operatory arytmetyczne, przez nie sygnalizuje Ci błąd.

1

if (q = w)

= jest operatorem przypisania. Jeśli przypisanie jest różne od zera to ten if się wykona.
== jest operatorem porównania i zwraca prawdę lub fałsz.

Na koniec - proponuję stosować "if else" w przypadku takiego zadania jak to.

0

Dzięki wielkie ;) mam problem przy kolejnym zadaniu: Zaprojektuj aplikacje, która pobierze od uzytkownika wartosc jego wzrostu z dokładnoscia
do pół centymetra i na podstawie tej liczby zakwalifikuje go do jednej z trzech grup:
niski (do 150 cm), sredni (150,5 cm do 175 cm), wysoki (od 175,5 cm).
Zrobiłem kod i działa lecz jest problem gdy wpiszę liczbę z przecinkiem, na przykład 155.5

 Double q;

            Console.WriteLine("podaj swój wzrost z dokładnością do 0,5cm");
            q = Double.Parse(Console.ReadLine()); //tutaj wyskakuje błąd "Nieprawidłowy format ciągu wejściowego"

            if (q <= 150)
            {
                Console.WriteLine("jesteś niski");
            }
            if (q > 150 && q <= 175)
            {
                Console.WriteLine("jesteś średniego wzrostu");
            }
            if  ( q > 175) //tu i wyżej jak napisze "if else" to jest błąd
            {
                Console.WriteLine("jesteś wysoki");
            }
            Console.ReadKey();

Double powinno przechowywać takie liczby. Gdy odpalam aplikacje wyskakuje błąd.
Odnośnie posta wyżej. Gdy napiszę "if else" to wyskakuje błąd ;/

0

Ziomek, jak chcesz przechowywać dane w zmiennej typu double, to najpierw takową poprawnie zadeklaruj ;)

0

gdy wpiszę liczbę z przecinkiem, na przykład 155.5

Gdzie Ty w liczbie 155.5 widzisz przecinek?

0

Piszesz o liczbie z przecinkiem, a wpisujesz z kropką. Wpisz 155,5.

0

Idę dalej z zadaniami i trafiłem na coś niedobrego.. "Zaprojektuj aplikacje, która pobiera od uzytkownika liczby dodatnie (wprowadzenie
zera konczy wprowadzanie) i wyswietla ich sume. Uzyj iteracji while." Następne zadanie jest takie samo ale trzeba dodać interacje "do" lecz myślę że jak będę miał podstawę to dam radę.
Wyskrobałem takie coś

Double X;
            

            Console.WriteLine("Program oblicza sume wprowadzonych liczb dodatnich");

            Console.WriteLine("Wprowadz liczbe (zero konczy wprowadzanie)");
            X = Double.Parse(Console.ReadLine());

            while (X != 0)
            {
                Console.WriteLine("Wprowadz liczbe (zero konczy wprowadzanie)");
                X = Double.Parse(Console.ReadLine());
            }

            Console.WriteLine("Suma wprowadzonych liczb wynosi ");


            Console.Read(); 

Pobiera liczby, zero kończy wprowadzanie ale nie mam pojęcia jak zrobić by zapamiętywało wprowadzone liczby a później je zsumowało. Po przeglądnięciu innych for mam mętlik w głowie. Część osób pisze że do tego trzeba używać tablic, drudzy mówią że nie ale nikt nie wyjaśnia jak to dokładniej zrobić. Było kilka przykładów ale w języku c++ a jednak jest on trochę inny i nie pomógł mi.

1

Ja bym się nie bawił w żadne tablice (bo nie o to chodzi na tym poziomie, na którym ty jesteś) tylko zadeklarowałbym zmienną np SUMA i po każdym pobraniu liczby od użytkownika zwiększałbym sumę o pobraną liczbę, a po wpisaniu przez użytkownika wartości 0 wyświetliłbym sumę.
No i dodałbym jakieś cudo uniemożliwiające wprowadzenie przez użytkownika liczby ujemnej (zgodnie z treścią polecenia). Spróbuj, pokombinuj...

0

Starałem się kierować radą dam1an:
"Zadeklaruj zmienną do trzymania sumy;
Początek pętli;
Wczytaj zmienną;
Skonwertuj na int;
Dodaj wczytaną liczbę do zmiennej z sumą;
Wyświetl sumę;
Sprawdź czy liczba jest równa 0;
Jeśli tak to przerwij pętlę (break);
Koniec pętli;"

 Console.WriteLine("Program oblicza sume wprowadzonych liczb dodatnich");


            Double q,w,suma;
            w = 2;
            
            

            while (w != 0)
            {

                Console.Write("Wprowadz liczbe dodatnią(zero konczy wprowadzanie): ");
                q = Double.Parse(Console.ReadLine()); 



                if (q == 0)
                {
                    w = 0;
                    Console.Write("suma: ");
                }
            }

            Console.ReadKey();

Nie mam pojęcia jak zrobić aby sumowało zmienną "q"... czuje się całkowicie bezradny. Szukałem już wszędzie, po dwa razy czytałem pewne rzeczy i dalej nic. (Mam wrażenie że to będzie proste jak budowa cepa)

0

Suma+=q
While(True)
Break

1

Musisz tak zaczarować, żeby po każdym pobraniu Q, wartość SUMA zwiększała się o Q, czyli coś na zasadzie "jeśli pobrano Q to SUMA=SUMA+Q". Specjalnie nie piszę jak to ma być dosłownie, żebyś trochę sam pokombinował. A i sugeruję przed pętlą while rozpoczynającą pobieranie Q, przypisać sumie wartość 0.

0

Dzięki za pomoc w dotychczasowych zadaniach ;) Doszedłem do pętli for i mam problem zrozumieć jej działanie. Jeśli zna ktoś jakieś inne słowa niż są w poradniku na tej stronie które mogą opisać tą pętlę z chęcią wszystko przeczytam. Robie aktualnie zadanie o treści: "Zaprojektuj aplikacje, która pobiera od uzytkownika liczbe naturalna i tworzy
trójkat ze znaków ”*” w taki sposób, ze w pierwszym wierszu wyswietla jedna gwiazdke,
a w kazdym nastepnym o 2 gwiazdki wiecej niz w poprzednim. Liczba wierszy trójkata (wysokosc
trójkata) powinna byc równa liczbie podanej przez uzytkownika. Wykorzystaj iteracje for."

Długie, wydaje się proste ale takie nie jest. Poszperałem w internecie i znalazłem kod na zrobienie choinki. Trochę go przerobiłem aby odpowiadał mojemu zadaniu i wyszło mi takie coś:

int q,c,p;
            string a;
            Console.WriteLine("Program rysuje z gwiazdek trójkat o wysokosci podanej przez uzytkownika.");
            Console.WriteLine("Podaj wysokosc trójkąta: ");
            q = int.Parse(Console.ReadLine());

            a = "*";

           //Console.WriteLine("*");

            for (c = 1; c <= q; c++)
            {
                for (p = 1; p <= c; p++)
                {
                    Console.Write(a);
                }

                Console.WriteLine();  // ten wiersz powoduje że każdy następny w pętli jest pisany niżej?
                
            }
            

            Console.ReadKey(); 

Wszystko ładnie pięknie ale kiedy przychodzi do wpisywania gwiazdek to daje tylko o jedną więcej. Próbowałem narzucić aby w pierwszej linijce była tylko jedna (zaznaczyłem to komentarzem w kodzie) a później aby zaczynało pisać od 3. Mam wrażenie że próbowałem wszystko już zmieniać.

0

Spróbuj sobie rozrysować ten trójkąt i mu się przyjrzyj.

Ja w nim widzę, że jeśli jesteśmy przy pierwszej linii to musi być tam jedna i tylko jedna gwiazdka, a w każdej kolejnej linii ma być o dwie więcej niż poprzedniej.
Będąc na twoim poziomie, rozbudowałbym tę pętlę poniżej dopisując do niej, że jeśli jest to pierwsza linia to ma zostać narysowana jedna gwiazdka, a jeśli jest to jakakolwiek inna linia, to ma tam być o 2 gwiazdki więcej niż w poprzedniej:

for (p = 1; p <= c; p++)
                {
                    Console.Write(a);
                }

Albo zrobiłbym tak jak kombinowałeś z tą pierwsza narzuconą linią z jedną gwiazdką, ale myślę, że wersja z poprawioną pętlą będzie lepsza.
Spróbuj sobie słownie wypowiedzieć jak ma ta pętla działać. Ale cię męczę co?

PS

Console.WriteLine();

// ten wiersz powoduje że każdy następny w pętli jest pisany niżej? Tak.

0

No męczysz mnie ale jestem pewien że zapamiętam dzięki temu więcej rzeczy więc jest ok. To zadanie mnie przerasta a dokładnie to nie mogę sobie zobrazować działania tej pętli. Próbuje słownie sobie to opisać tak jak mówiłeś. To pierwsze for rozumiem ale jak łączy się to z drugim for? nie mam pojęcia. Trochę zmieniłem kod, pierwsza gwiazdka jest dobrze, druga linijka też ale teraz zostaje to czego nie czaje.

int q, c, p;
            string a; 
            Console.WriteLine("Program rysuje z gwiazdek trójkat o wysokosci podanej przez uzytkownika.");
            Console.WriteLine("Podaj wysokosc trójkąta: ");
            q = int.Parse(Console.ReadLine());

            a = "*";

            Console.WriteLine("*");

            for (c = 3; c <= q + 1; c++) 
            {
                for (p = 1; p <= c; p++)
                {
                    
                    
                        Console.Write(a);
                    
                }

                Console.WriteLine();  

            }


            Console.ReadKey();  
1

Jeśli nie potrafisz zobrazować sobie jak coś działa to jest w Visual Studio takie narzędzie jak debugger.
Kliknij na margines po lewej stronie na wysokości pierwszego fora, powinna pojawić się czerwona kropka. Wciśnij F5, program zatrzyma wykonywanie kodu do tej czerwonej kropki, później za pomocą przycisku F10 będziesz mógł linia po linii sprawdzić jak działa twój kod podglądając jaką aktualnie wartość mają twoje zmienne.

0

dam1an, dzięki wielkie ;) pomogło. Chcąc iść za podpowiedzią axel234 napisałem taki kod:

 int q, c, p;
            string a;
            Console.WriteLine("Program rysuje z gwiazdek trójkat o wysokosci podanej przez uzytkownika.");
            Console.WriteLine("Podaj wysokosc trójkąta: ");
            q = int.Parse(Console.ReadLine());

            a = "*";
            
            for (c = 1; c <= q; c++)
            {
                if (c == 1) // jeśli jest to pierwsza linika napisz gwiazdkę. wszystko działa.
                {
                    Console.Write(a);
                }
                if (c >= 2) //jeśli jest to druga linijka i każda następna "napisz 2 gwiazki więcej jak w poprzedniej linijce"
                {
                    for (p = 1; p <= c ; p++)
                    {
                        Console.Write(a);


                    }
                }
                


                Console.WriteLine();  
            }


            Console.ReadKey(); 

W drugim komentarzu specialnie dałem polecenie w cudzysłowie ponieważ nie mam pomysłu jak to zapisać. Próbowałem dodać do "c" jeden ale to sprawdziło sie tylko przy drugiej linijce. Robiłem jeszcze inne dziwne rzeczy ale nic nie zadziałało tak jak to było zaplanowane.

0

Linijka

 if (c == 1) // jeśli jest to pierwsza linika napisz gwiazdkę. wszystko działa.
                {
                    Console.Write(a);
                }

trafiona w dziesiątkę, ale kombinuj dalej. Podpowiem co ja bym zrobił: wstawiłbym tę linijkę trafioną w dziesiątkę do tej drugiej pętli i zastosowałbym ELSE do warunku IF, który w niej jest, a to:

 if (c >= 2) //jeśli jest to druga linijka i każda następna "napisz 2 gwiazki więcej jak w poprzedniej linijce"
                {

bym usunął.

1
p <= c*2
0
 int q, c, p;
            string a;
            Console.WriteLine("Program rysuje z gwiazdek trójkat o wysokosci podanej przez uzytkownika.");
            Console.WriteLine("Podaj wysokosc trójkąta: ");
            q = int.Parse(Console.ReadLine());

            a = "*";

            for (c = 1; c <= q; c++)
            {
                if (c == 1) 
                {
                    Console.Write(a);
                }
                else 
                {
                    for (p = 1; p <= c * 2; p++)
                    {
                        Console.Write(a);


                    }
                }



                Console.WriteLine();
            }


            Console.ReadKey();  

Nie do końca rozumiem jak tą linijkę trafioną w dziesiątkę mam dać niżej..

1

Ja bym spróbował tak:

int q, c, p;
            string a;
            Console.WriteLine("Program rysuje z gwiazdek trójkat o wysokosci podanej przez uzytkownika.");
            Console.WriteLine("Podaj wysokosc trójkąta: ");
            q = int.Parse(Console.ReadLine());
 
            a = "*";
 
	for (c = 1; c <= q; c++)
            {
                for (p = 1; p <= c; p++)
                {
                    if (p == 1) Console.Write(a);//jeśli jest to linia nr 1 wyświetl na ekranie jedna gwiazdkę
                    else //a jeśli jest to jakakolwiek kolejna linia wyświetl o dwie gwiazdki więcej
                    //TU WSTAW ODPOWIEDNIĄ JEDNA LINIJKĘ KODU, KTÓRA SPOWODUJE, ŻE ZADANIE BĘDZIE ZALICZONE
                }

                Console.WriteLine();

            }
 
 
            Console.ReadKey();  

1 użytkowników online, w tym zalogowanych: 0, gości: 1