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

Moja pierwsza aplikacja w C [ Proszę o ocene ]


s1wykam1l

Rekomendowane odpowiedzi

Opublikowano

Hejka, ludziska . Proszę was o ocenienie mojego kodu żródłowego. Właśnie skończyłem kurs ze strefykursów.pl no i moim zdaniem dość sporo się nauczyłem ale to juz pozostawiam wam do ocenienia:


Moja pierwsza aplikacja (Kalkulator):




#include <stdio.h>
#include <stdlib.h>
#include <math.h>

long long wyniksilni;
long long silnia(liczba)
{
if(liczba<2) return 1;
wyniksilni=liczba*silnia(liczba-1);

return wyniksilni;
}

int main()
{


char wybor1;
double a,b,c,wynik;
int licznik=1;
int liczba;


printf("*** Kaukulator *** \n \n");
printf("*** s1wykam1l @ Copyright by Kamil Rychlicki *** \n \n");
printf("[A]Mnozenie: \n");
printf("[B]Dzielenie: \n");
printf("[C]Dodawanie: \n");
printf("[D]Odejmowanie: \n");
printf("[E]Potegowanie: \n");
printf("[F]Pierwiastkowanie: \n");
printf("[G]Przeciwprostokatna Trojkata: \n");
printf("[H]Silnia: \n");


do
{
scanf("%c", &wybor1);

switch(wybor1){
case 'a':
case 'A':
printf("\n[A]Mnozenie: \n");
printf("Podaj pierwsza liczbe czynnika: \n");
scanf("%lf", &a);
printf("Podaj druga liczbe czynnika: \n");
scanf("%lf", &;
if(b==0){ printf("Nie mozna mnozyc przez 0! \n \n");}else if(a==0){printf("Nie mozna mnozyc przez 0! \n \n");}else{
printf("Iloczyn mnozenia (%f * %f)= %f \n",a,b,wynik=(a*);}
break;
case 'b':
case 'B':
printf("\n[B]Dzielenie: \n");
printf("Podaj liczbe dzielna: \n");
scanf("%lf", &a);
printf("Podaj liczbe dzielnika: \n");
scanf("%lf", &;
if(b==0){ printf("Nie mozna dzielic przez 0! \n \n");}else if(a==0){printf("Nie mozna dzielic przez 0! \n \n");}else{
printf("Iloraz dzielenia (%f / %f)= %f \n",a,b,wynik=(a/b));
}
break;
case 'c':
case 'C':
printf("\n[C]Dodawanie: \n");
printf("Podaj pierwsza liczbe skladnika: \n");
scanf("%lf", &a);
printf("Podaj druga liczbe skladnika: \n");
scanf("%lf", &;
printf("Suma dodawania (%f + %f)= %f \n",a,b,wynik=(a+);
break;
case 'd':
case 'D':
printf("\n[D]Odejmowanie: \n");
printf("Podaj liczbe odejmna: \n");
scanf("%lf", &a);
printf("Podaj liczbe odejmnika: \n");
scanf("%lf", &;
printf("Roznica odejmowania (%f - %f)= %f \n",a,b,wynik=(a-);
break;
case 'e':
case 'E':
printf("\n[E]Potegowanie: \n");
printf("Podaj liczbe podstawy: \n");
scanf("%lf", &a);
printf("Podaj liczbe wykladnika: \n");
scanf("%lf", &;
wynik= pow(a,;
if(b==0){ printf("Wykladnik nie moze byc 0. \n \n");}else if(a==0){printf("Podstawa nie moze byc 0. \n \n");}else{
printf("Wynik potegowania (%f ^ %f)= %f \n",a,b,wynik);}
break;
case 'f':
case 'F':
printf("\n[F]Pierwiastkowanie: \n");
printf("Podaj liczbe do pierwiastkowania: \n");
scanf("%lf", &;
if(b==0){ printf("Zero po pierwiastkowaniu wynosi zero. \n \n");}else{
wynik= sqrt(;
printf("Wynik pierwiastkowania liczby (%f)= %f \n",b,wynik);}
break;
case 'g':
case 'G':
printf("\n[G]Przeciwprostokatna Trojkata: \n");
printf("Podaj dlugosc boku [A]: \n");
scanf("%lf", &a);
printf("Podaj dlugosc boku [B]: \n");
scanf("%lf", &;
c = pow(a,2) + pow(b,2);
wynik=sqrt(c);
if(b==0){ printf("Gdy dlugosc [A]lub[B] jest 0.[C] wynosi 0. \n \n");}else if(a==0){printf("Gdy dlugosc [A]lub[B] jest 0.[C] wynosi 0. \n \n");}else{
printf("Przeciwprostokatna [C] wynosi = %f \n",wynik);}

break;
case 'h':
case 'H':
printf("\n[H]Silnia \n");
printf("Podaj liczbe: ");
scanf("%d", &liczba);
printf("Wynik (%d) to %d",liczba,silnia(liczba));

break;
licznik++;
}

}while(licznik <= 1000);

system("pause");
return 0;


}

Opublikowano

Kod pełen błędów, aczkolwiek najlepsze jest "Nie mozna mnozyc przez 0!".

Opublikowano

No źle to zformułowałem. Nie że nie można tylko mnożenie przez 0 daje 0 :D

To czemu błąd wywalasz, zamiast napisać, że to jest 0.

Kalkulator nie prościej było oprzeć na scanf?

TuByłaSygnatura.png

Opublikowano

...

 

Ale błędów jest więcej, przykłady:

  • To samo tyczy się dzielenia, pierwiastkowania i potęgowania
  • Jednakże przy całym tym sprawdzaniu nie patrzysz czy ktoś nie spróbuje spierwiastkować liczby ujemnej...
  • ... ani czy ktoś nie wprowadzi niepoprawnych danych(np. "kot" zamiast liczby)
  • Używasz implicit int, a wywalono to ze standardu 16 lat temu
  • Podczas wypisywania wyniku silni używasz złego formatu, porównaj sobie wynik silni z 25 który wypisze twój program z wynikiem który poda kalkulator w Windowsie
  • licznik++ nigdy nie jest wykonywane
  • Niepotrzebnie wypisujesz zera po przecinku
  • system("PAUSE") to świetny sposób aby bez najmniejszej potrzeby stworzyć kod który odpali się tylko na Windowsie
  • "@ Copyright"
Opublikowano

Miło, że exModeratora lubi tak ludzi hejtować mimo że to ich pierwsze użycie jezyka oprogramowania C  :D

 

Jak nie chcesz dostać listy błędów to nic nie wstawiaj. Chwalić się początkowym kodem nie ma co - takie rzeczy się robi do szuflady, przecież to się nikomu na nic nie przyda.

Dostałeś od @Fireho piękną listę błędów, o których nie miałeś pojęcia. Podziękuj, nawet jeśli jego ton wydał Ci się lekko sarkastyczny to potraktował Cię poważnie i poświęcił swój czas - widać niepotrzebnie.

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Opublikowano

Miło, że exModeratora lubi tak ludzi hejtować mimo że to ich pierwsze użycie jezyka oprogramowania C  :D

 

No i czego oczekiwałeś?

 

,, Wow super aplikacja, fajnie ją zrobiłeś ''.

 

Walnąłeś na start zmienną globalną, copyright to szczerze z*******y, szkoda, że tutaj nie ma co poddać prawom autorskim (może jak zrobisz jakąś klasę to też pierdolnij takie coś). Dostałeś informacje, że system() sprawia, że program odpala się tylko na Windowsie - Ty dostałeś to z dupy, ja z ciekawości. Ja się ciesze, że coś takiego znalazłem, Ty nie, bo po co?

 

 

Pomijając już to, że wątek o C jest gdzie indziej a tutaj jest C++.

­

pyhvh7E.png


 


Opublikowano

Miło, że exModeratora lubi tak ludzi hejtować mimo że to ich pierwsze użycie jezyka oprogramowania C  :D

Po przeczytaniu ,, Copyright '' dostałem załamania... Jak można było aż tak zwalić kod.. Nie rozumiem a jego estetyczność powala.

while(licznik <= 1000);

    system("pause"); // Na pewno uruchomisz program na linux'ie
    return 0;


}

Rozumiem ja też popełniam czasami błędy ale uczę się i aktualnie będę korzystał z biblioteki graficznej [opengl]

Mógłbyś tak zrobić:

void wait(int time, bool exitv){
	
	if(time > 0) Sleep(time);

	if(exitv == true) 
		exit(0);
	else if(exitv == false){}
	
}

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

    while(true){
    
        wait(120, false);
    
    }

    return 0;
}
Opublikowano

@damian1920 On może nie wiedział/nie dbał o to, ale żeby zastąpić system("PAUSE") Sleep'em aby program odpalał się nie tylko na Windowsie to już trzeba być geniuszem.
 
Lepiej użyć tego:

#include <thread>
std::this_thread::sleep_for(std::chrono::milliseconds(120));
Opublikowano

 

@damian1920 On może nie wiedział/nie dbał o to, ale żeby zastąpić system("PAUSE") Sleep'em aby program odpalał się nie tylko na Windowsie to już trzeba być geniuszem.

 

Lepiej użyć tego:

#include <thread>
std::this_thread::sleep_for(std::chrono::milliseconds(120));

Ale w C nie ma <thread> :s

 

Możesz użyć kbhit() z conio.h.

708121422388637873334.png

Opublikowano

 

@damian1920 On może nie wiedział/nie dbał o to, ale żeby zastąpić system("PAUSE") Sleep'em aby program odpalał się nie tylko na Windowsie to już trzeba być geniuszem.

 

Lepiej użyć tego:

#include <thread>
std::this_thread::sleep_for(std::chrono::milliseconds(120));

Kto powiedział że ja zastępuje Sleep'em System("pause") ??

Ja tylko napisałem jak lepiej zrobić tą dziwną pętlę nic o ,, pause '' nie mówiłem

Opublikowano

Chciałbym zobaczyć wasze pierwsze kody "geniusze"

 

Ja polecam taką prostą pętlę "while(getch()==ZNAK);"

Linux pozwoli wycisnąć ostatnią łzę z twojego procesora.

Opublikowano

Chciałbym zobaczyć wasze pierwsze kody "geniusze"

 

Ja polecam taką prostą pętlę "while(getch()==ZNAK);"

Zapewniam cię że nasze kody były o wiele lepiej napisane niż to coś znajdujące się na górze ponieważ większość z nas zapewne uczyła się do końca a nie na switchu przestała i pisze zbędną aplikację... Jeju tak trudno nacisnąć ,, Calculator '' na klawiaturze?

Opublikowano

Akurat uwierzę że pierwszą aplikacją jaką napisałeś był sterownik albo odtwarzacz filmów video.

 

-------------------------------------------------------------------------------------------------------------------------

 

Nie piszę tutaj że @Fireho zrobił źle pisząc co @s1wykam1l zrobił źle, ale denerwują mnie takie osoby co piszą jak by wszystkie rozumy pozjadały(Nie będę wymieniał nickiem).

Linux pozwoli wycisnąć ostatnią łzę z twojego procesora.

Opublikowano

Akurat uwierzę że pierwszą aplikacją jaką napisałeś był sterownik albo odtwarzacz filmów video.

 

-------------------------------------------------------------------------------------------------------------------------

 

Nie piszę tutaj że @Fireho zrobił źle pisząc co @s1wykam1l zrobił źle, ale denerwują mnie takie osoby co piszą jak by wszystkie rozumy pozjadały(Nie będę wymieniał nickiem).

Oczywiście że nie napisałem sterowników ani odtwarzacza filmów video.. Mam większe ambicje a moją pierwszą aplikacją była prosta gra typu Tetris napisana za pomocą biblioteki graficznej opengl więc nawet nie próbowałem bawić się w samym C++ ponieważ jest to bez sensu no ale co tutaj więcej mówić... -_-

Te tak zwane osoby ,, jak by wszystkie rozumy pozjadały '' przez ciebie chcą pomóc autorowi więc nie widzę w tym problemu co prawda każdy pisze na swój sposób ale to nie powód aby zaczynać ,, awantur '' :|

Opublikowano

Akurat uwierzę że pierwszą aplikacją jaką napisałeś był sterownik albo odtwarzacz filmów video.

 

-------------------------------------------------------------------------------------------------------------------------

 

Nie piszę tutaj że @Fireho zrobił źle pisząc co @s1wykam1l zrobił źle, ale denerwują mnie takie osoby co piszą jak by wszystkie rozumy pozjadały(Nie będę wymieniał nickiem).

 

 

Oczywiście, że nie. Nie spinaj się tak.

 

Problem w tym, że podaje kalkulator - pomijając już jakość to czepia się, że zwracamy uwagę na błędy.

 

Nikt tutaj nie pozjadał rozumów.

 

 

A jak myślisz? Część z tych co zwracała uwagi pewnie pisała już swoje aplikacje, niektórzy nawet gry, więc siłą rzeczy znają język lepiej i wiedzą co i jak lepiej zrobić.

 

W programowaniu jest multum sposób na poprawę jakości programu, a czego oni się czepiają...

 

 

 

 

­

pyhvh7E.png


 


Opublikowano

@1373230489-U611928.pngmistake010

To, że większość z nas to leszcze w asemblerze, nie znaczy, że nie można napisać lepszego kodu niż kompilator - inaczej nie byłoby czegoś takiego jak wstawki aseblerowe w programach wymagających wysokiej wydajności.

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Opublikowano

Mój kompilator Dev-C++ pokazał błędy i nie da się uruchomić a po za tym popracuj nad kodem bo narazie nie wyszedł ci na dobre...

Posty: 50/100/150/300/500/1000/5000/?
Chcesz się dowiedzieć nieco o mnie? Zapraszam na mój profil ?

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...