Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Początki z vc++ express


Rekomendowane odpowiedzi

Opublikowano

Od paru dni zacząłem się uczyć programować . Najpierw w dev-c++, ale w końcu zauważyłem że nie mogę zbudować lepszych programów ( troszkę bardziej skomplikowanych niż najprostsze ), więc przesiadłem się na vc++ express, który mnie ewidentnie przytłoczył.

 

 

Dzisiaj starałem się utworzyć program który miał za zadanie. Najpierw zapytać o promień koła a następnie obliczyć go.

Promień ma się znajdować w przedziale liczb od 0 do 1000, jeśli się nie znajduje to powinna wyskoczyć wiadomość np. "Nie można obliczyć promienia".

Niby wszystko spoko ale wynik się nie zgadza :>

 

Czy ktoś mógłby napisać takowy program abym mógł zobaczyć w którym momencie popełniam błąd ? Nie mogę do tego dojść...

 

Programuje od 3 dni więc wybaczcie ;p wiele nie potrafię ;) i nie piszcie mi tutaj zbyt skomplikowanie, bo nie zrozumiem :)

pl ;)

Opublikowano

A co ma środowisko programistyczne do takich typu zadań  o.O

 

Co do zadania to:

Zmienna, którą podaje użytkownik i mnożona jest przez samą siebie, a następnie przez Pi - jeżeli chcesz mieć dokładny wynik.

Warunek dla zbyt wysokiej liczby i zbyt niskiej.

pyhvh7E.png


 


Opublikowano
­@Szymon2727 akurat Visual robi różnicę bo używa swojego kompilatora (VC++), a DevC++/C::B domyślnie zazwyczaj korzystają z GCC. Niewielkie różnice, Visual rzuca się o używanie aliasów niektórych funkcji (np. _getch zamiast getch) ze względu na "bezpieczeństwo" na przykład.
846331404756772371599.jpeg
Opublikowano


#include <iostream>

 

int main()

{

   int podanyPromien;

   std::cin >> podanyPromien;

   if(podanyPromien < 0 || podanyPromien > 1000)

   {

      std::cout << "Nie mozna obliczyc promienia";

   }

   else

   {

      int policzonyPromien = podanyPromien * 1;

   }

}

 

Opublikowano

wpiszę u siebie i zobaczę :D zapisywałem tak w tamtym wcześniejszym środowisku. Na Vc++ takiego nie próbowałem . Zara zobacze;p

 

#include<iostream>

using namespace std:

int main()
{
    int r;
    std::cin>>r;
    if(r<0 || r>1000)
    {
        std::cout<<"Nie mozna obliczyc promienia";
    }
    else
    {
        int 3.14*(r*r) = r * 1;
    }
}
 

Tak łoo wpisuje. Niestety jest to co u mnie wcześniej, czyli wyniki dla liczby 2 np. wychodzą 7500. Może źle wzór zapisuje ? W dev-c++ jak pisałem tak samo to wyniki były dobre, natomiast funkcja if w ogóle mi nie działała.

pl ;)

Opublikowano

­^Niee, sopel dobrze napisał. Jeśli by było && to warunki by się wykluczały bo zbiór licz mniejszych od 0 i jednocześnie większych od 1000 jest pusty :D

 

Można też tak.

#include <iostream>

int main()
{
	int podanyPromien;
	std::cin >> podanyPromien;
	if(podanyPromien >= 0 && podanyPromien <= 1000)
	{
		int policzonyPromien = podanyPromien * 1;
	}
	else
	{
		std::cout << "Nie mozna obliczyc promienia";
	}
} 
 

­

( ͡° ͜ʖ ͡°)

Opublikowano

­

 

int 3.14*(r*r) = r * 1;
To co tu robisz to kompletna głupota, a robienie czegoś sposobem "najpierw zobaczę, potem poczytam"... to też głupota.

Ten twój kod w teorii: deklaruje zmienną int z jakimiś popierdolonymi wskaźnikami, co nigdy nie będzie działać. Po 1:

- * w deklaracjach to wskaźnik

- Nazwa zmiennej może składać się tylko z liter, cyfr i znaku _

 

Poprawnie zrobione:

int wynik = 3.14 * (r*r);
ALE deklarowanie zmiennej w if...else jest błędem, ponieważ w wypadku kiedy po ifie mamy instrukcję wypluwającą zawartość danej zmiennej np. do konsoli, to jeśli wykona nam się "zły" warunek w którym zmienna nie była deklarowana i program przejdzie dalej to nam go wykrzaczy, bo tej zmiennej nie będzie a program będzie chciał się do niej odwołać. Dlatego nawet jak wiemy co robimy i nie ma możliwości wystąpienia takiego błędu, warto sobie wyrobić taki nawyk deklarowania zmiennych przed wszelkimi strukturami typu pętle czy instrukcje warunkowe.

 

A, jeszcze co do pi: W bibliotece math.h masz ładnie zadeklarowane pi jako M_PI. A do potęg masz funkcję pow(x, y) (co wykonuje działanie x^y)

846331404756772371599.jpeg
Opublikowano

­

 

int 3.14*(r*r) = r * 1;
To co tu robisz to kompletna głupota, a robienie czegoś sposobem "najpierw zobaczę, potem poczytam"... to też głupota.

Ten twój kod w teorii: deklaruje zmienną int z jakimiś popierdolonymi wskaźnikami, co nigdy nie będzie działać. Po 1:

- * w deklaracjach to wskaźnik

- Nazwa zmiennej może składać się tylko z liter, cyfr i znaku _

 

Poprawnie zrobione:

int wynik = 3.14 * (r*r);
ALE deklarowanie zmiennej w if...else jest błędem, ponieważ w wypadku kiedy po ifie mamy instrukcję wypluwającą zawartość danej zmiennej np. do konsoli, to jeśli wykona nam się "zły" warunek w którym zmienna nie była deklarowana i program przejdzie dalej to nam go wykrzaczy, bo tej zmiennej nie będzie a program będzie chciał się do niej odwołać. Dlatego nawet jak wiemy co robimy i nie ma możliwości wystąpienia takiego błędu, warto sobie wyrobić taki nawyk deklarowania zmiennych przed wszelkimi strukturami typu pętle czy instrukcje warunkowe.

 

A, jeszcze co do pi: W bibliotece math.h masz ładnie zadeklarowane pi jako M_PI. A do potęg masz funkcję pow(x, y) (co wykonuje działanie x^y)

 

Po prostu inaczej mogłem pisać w Dev-C++ i dlatego tak pisałem :>, gdy się przesiadłem na vc++ to się zacząłem gubić dlatego tutaj zadałem pytanie aby zobaczyć swój błąd :>. Tak najpierw się czyta, ale gdy się nie rozumie tego to najlepiej zobaczyć na przykładzie, a następnie sprawdzać dlaczego ma być tak, a nie inaczej. 

Najłatwiej zadania matematyczne rozwiązuje się zaczynając od wyniku, następnie można spokojnie sobie poradzić dlaczego ma być tak a nie inaczej. Tak samo podchodzę do informatyki. Najpierw próba zrobienia. Gdy długo nie ogarniam tego to po prostu sprawdzam i dochodzę dlaczego ma być inaczej.

Ale widzę że ten vc++ to całkiem  inna bajka i muszę się go uczyć, a nie dokładać kolejne rzeczy ;) Pewnie z 2 dni mi to zajmie żeby to ogarnąć no ale sobie poradze.

Jestem dyslektykiem choć po mnie tego nie widać i nie bardzo ogarniam tak skomplikowane(dla mnie ) teksty jak czasami są w poradnikach. Inaczej myślę niż większość.

pl ;)

Opublikowano

Tam inaczej pisałem. Tutaj po prostu źle odczytałem co było u góry, bo jest trochę inaczej pisane niż w devc++. Dla mnie robi wielką różnicę i męcze się z tym vc++, mam nadzieje że w końcu mi wyjdzie :D .

#include"stdafx.h"
#include<iostream>
using namespace std;

int main()
{
    int r, wynik = 3.14*(r*r);
    std::cout<<"Podaj promien ";
    cin>>r;
    if(r > 0 && r < 1000)
    {
        std::cout<<"Wynik to "<.14*(r*r);
    }
    else
    {
        std:cout<<"Nie mozna obliczyc";
    }
    system("pause");
    return 0;
}

Zrobiłem teraz to tak. Praktycznie robiłem to tak na początku, tylko drobne rzeczy zmieniłem i wyszło.

 

Jeśli można to jakoś prościej napisać to napiszcie, jeśli są jakieś uwagi aby to w taki sposób nie robić ( na przyszłość) to też piszcie i najlepiej na przykładzie pokazać to sobie będę analizował.

 

pl ;)

Opublikowano

wpiszę u siebie i zobaczę :D zapisywałem tak w tamtym wcześniejszym środowisku. Na Vc++ takiego nie próbowałem . Zara zobacze;p

 

#include<iostream>

 

using namespace std:

 

int main()

{

    int r;

    std::cin>>r;

    if(r<0 || r>1000)

    {

        std::cout<<"Nie mozna obliczyc promienia";

    }

    else

    {

        int 3.14*(r*r) = r * 1;

    }

}

 

Tak łoo wpisuje. Niestety jest to co u mnie wcześniej, czyli wyniki dla liczby 2 np. wychodzą 7500. Może źle wzór zapisuje ? W dev-c++ jak pisałem tak samo to wyniki były dobre, natomiast funkcja if w ogóle mi nie działała.

 

 

 

Po co piszesz using namespace std JAK UŻYWASZ STD???  o.O

 

Co Ty robisz? Robisz nową zmienną o typie int, bez nazwy, a obok wypisujesz jej wartość, a potem dodajesz wskaźnik (nie wiem po Ci adres tej całej zmiennej bez nazwy).

 

Po za tym pole nie jest nigdzie wypisywana.

 

 

Po prostu inaczej mogłem pisać w Dev-C++ i dlatego tak pisałem :>, gdy się przesiadłem na vc++ to się zacząłem gubić dlatego tutaj zadałem pytanie aby zobaczyć swój błąd :>. Tak najpierw się czyta, ale gdy się nie rozumie tego to najlepiej zobaczyć na przykładzie, a następnie sprawdzać dlaczego ma być tak, a nie inaczej. 

Najłatwiej zadania matematyczne rozwiązuje się zaczynając od wyniku, następnie można spokojnie sobie poradzić dlaczego ma być tak a nie inaczej. Tak samo podchodzę do informatyki. Najpierw próba zrobienia. Gdy długo nie ogarniam tego to po prostu sprawdzam i dochodzę dlaczego ma być inaczej.

Ale widzę że ten vc++ to całkiem  inna bajka i muszę się go uczyć, a nie dokładać kolejne rzeczy ;) Pewnie z 2 dni mi to zajmie żeby to ogarnąć no ale sobie poradze.

Jestem dyslektykiem choć po mnie tego nie widać i nie bardzo ogarniam tak skomplikowane(dla mnie ) teksty jak czasami są w poradnikach. Inaczej myślę niż większość.

 

 

Szczerze to wątpię, że takie byki mogłeś robić w innym kompilatorze. Dysleksja nic do tego nie ma - po prostu trzeba analizować kod tak, by wiedzieć co się w danej linijce robi, potem by wiedzieć jaki jest wynik, a na końcu samemu to zastosować - rozumiem, żebyś zapomniał nadać typ funkcji oraz przekazywanej jej zmiennej, gdy piszesz na szybko, albo nawiasu zapomnieć, ale to?

pyhvh7E.png


 


Opublikowano

Po co piszesz using namespace std JAK UŻYWASZ STD???  o.O

 

Co Ty robisz? Robisz nową zmienną o typie int, bez nazwy, a obok wypisujesz jej wartość, a potem dodajesz wskaźnik (nie wiem po Ci adres tej całej zmiennej bez nazwy).

 

Po za tym pole nie jest nigdzie wypisywana.

 

 

 

 

Szczerze to wątpię, że takie byki mogłeś robić w innym kompilatorze. Dysleksja nic do tego nie ma - po prostu trzeba analizować kod tak, by wiedzieć co się w danej linijce robi, potem by wiedzieć jaki jest wynik, a na końcu samemu to zastosować - rozumiem, żebyś zapomniał nadać typ funkcji oraz przekazywanej jej zmiennej, gdy piszesz na szybko, albo nawiasu zapomnieć, ale to?

Tutaj chciałem zrobić to co wyżej pisali, ale źle ich chyba zrozumiałem i dlatego tak napisałem, a wkleiłem to, ponieważ stwierdziłem, że prędzej oni mają dobrze niż ja robiący to od 3 dni.

 

Na ogół nie pisałem tego std przed cout itp. Zobaczyłem tutaj, że tak piszą to postanowiłem pisać jak oni, bo ja się na tym jeszcze nie znam i staram się coś zrobić ;p a że źle wywnioskowałem z ich rad to tu leży problem.

pl ;)

Opublikowano
#include "stdafx.h"
#include<iostream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    unsigned short int r, wynik = 3.14*(r*r), a, pole = a*a;
    cout<<"Podaj promien kola.\n";
    cin>>r;
    cout<<"Podaj bok kwadratu.\n";
    cin>>a;
    if( a>2*r && r>0 && a<100)
    {
        cout<<"Pole kola wynosi .\n"<.14*(r*r);
        cin>>wynik; // co mam tu wpisać aby przechodziło do następnej linijki ?
        cout<<"Pole kwadratu wynosi ,\n"<<a*a;
        cin>>pole;  // co mam tu wpisać aby przechodziło do następnej linijki ?
        cout<<"Pole kwadratu odjac pole kola wynosi .\n"<<pole - wynik;
    }
    else
    {
        cout<<"Warunki zadania nie zostały spelnione.\n";
    }
    system("pause");
    return 0;
}

Tam jest pytanie w kodzie do was ;p

a z tym PI i biblioteką math.h nie ogarniam ;p wpisuje tak a jednak ciągle podkreśla mi błąd.

 

 

pl ;)

Opublikowano

­

#include <cmath> //tu się pomyliłem, tzn. w C używało się math.h, ale w C++ powinno się używać cmath
#include <iostream>

int main()
{
   std::cout << M_PI << std::endl;
   return 0;
}
Odpal to i powinno działać.

 

A co do postu:

 

unsigned short int r, wynik = 3.14*(r*r), a, pole = a*a;
Głupota. Zmienne r i a są niezainicjalowane (nie mają wartości przypisanej przez usera, ani w kodzie), przez co do wynik i pole zostaną przypisane liczby kompletnie z dupy. Intellisense powinien cię o tym powiadomić w Visualu, czytaj czasem co ma do powiedzenia zanim tu przyjdziesz.

 

Żeby to zadziałało musisz wykonać działania 3.14*(r*r) i a*a dopiero po tym jak user wprowadzi dane i zostaną ode przypisane do zmiennych a i r.

 

Poza tym, przemyśl czy w celu zachowania dokładności działań, nie warto by było użyć zmiennoprzecinkowego typu danych (float)

 

A co do następnej linijki:

 

std::cout << "trochętekstu\nnastępna linijka";
Tutaj masz \n jako nową linijkę w stringu, ewentualnie możesz zrobić tak:

 

std::cout << "trochę tekstu" << std::endl << "następna linijka";
I nie używaj system("pause") tylko np. getch() z biblioteki conio.h, albo takiego czegos:

 

std::cin.ign.ore();
std::cin.get();
bo ogólnie funkcja system() jest... zła. Tutaj masz wyjaśnione dlaczego, ale to już tak bardziej na przyszłość bo teraz niewiele pewnie z tego zrozumiesz. Korzystaj z dwóch powyższych rozwiązań

Poza tym, odczytaj pw ;)

846331404756772371599.jpeg
Opublikowano
#include "stdafx.h"
#include<iostream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    unsigned short int r, wynik = 3.14*(r*r), a, pole = a*a;
    cout<<"Podaj promien kola.\n";
    cin>>r;
    cout<<"Podaj bok kwadratu.\n";
    cin>>a;
    if( a>2*r && r>0 && a<100)
    {
        cout<<"Pole kola wynosi .\n"<.14*(r*r);
        cin>>wynik; // co mam tu wpisać aby przechodziło do następnej linijki ?
        cout<<"Pole kwadratu wynosi ,\n"<<a*a;
        cin>>pole;  // co mam tu wpisać aby przechodziło do następnej linijki ?
        cout<<"Pole kwadratu odjac pole kola wynosi .\n"<<pole - wynik;
    }
    else
    {
        cout<<"Warunki zadania nie zostały spelnione.\n";
    }
    system("pause");
    return 0;
}

Tam jest pytanie w kodzie do was ;p

a z tym PI i biblioteką math.h nie ogarniam ;p wpisuje tak a jednak ciągle podkreśla mi błąd.

 

 

 

Świetnie, że korzystasz teraz z using namespace std; ale nie powinieneś tak robić.

 

Czemu załącz jakiś drugi projekt? Nie rozumiem co Ty jakiś klas używasz? I potrzebujesz danych z innego programu (tym bardziej, że zadanie jest tak proste, że to powinno się robić tylko w jednym pliku cpp) - w taki sposób nie załącza się bibliotek.

 

Co Ty robisz z tym mainem??? Napisz po prostu int main() chyba, że odwalasz coś większego.

 

Do reszty nie ma się co za bardzo przyczepić, oprócz system pause, ale to pewnie też jakiś większy projekt.

pyhvh7E.png


 


Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...