Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: z PHP na C, ostatnie szlify kodu
Forum PHP.pl > Inne > Hydepark
invx
napisalem kod w php, i teraz chce to na C przelozyc, ile pamietalem zrobilem sam w C
kod jest taki
  1. <?php
  2. // uzylem bbcodu php, zeby bardziej bylo czytelne
  3.  
  4. main ()
  5. {
  6.  
  7. int $a;
  8. int $b;
  9. int $c;
  10. int $przeciw;
  11. int $przy_1;
  12. int $przy_2;
  13.  
  14. print(&#092;"Wprowadz 1 bok trójkąta /n\");
  15. #kurcze tu mi uciekla z glowy funkccja zeby za $a podstawila wartosc z klawiatur
  16.  wpisana
  17. print(&#092;"Wprowadz 2 bok trójkąta /n\");
  18. # j.w.
  19. print(&#092;"Wprowadz 2 bok trójkąta /n\");
  20. # j.w
  21. if ( empty ( $a ) || empty ( $b ) || empty ( $c ) || ( $a+$b>$c && $c+$a>$b && $c+$b>$a ) )
  22. {
  23.  
  24. if ( $a < $b )
  25. {
  26. $przeciw = $b;
  27. $przy_1 = $a;
  28. }
  29. else
  30. {
  31. $przeciw = $a;
  32. $przy_1 = $b;
  33. }
  34. if ( $przeciw < $c )
  35. {
  36. $przy_2 = $przeciw;
  37. $przeciw = $c;
  38. }
  39. else
  40. {
  41. $przy_2=$c;
  42. }
  43.  
  44. if ( ($a == $b) || ($a == $c) || ($b == $c) )
  45. {
  46. if ( $a == $b && $b == $c )
  47. {
  48. if ( ($przy_1*$przy_1 + $przy_2*$przy_2) == ( $przeciw*przeciw) )
  49. {
  50. print(&#092;"Trójkąt jest równoramienny, prostokątny\");
  51. }
  52. if ( $a == $b && $b == $c )
  53. {
  54. print(&#092;"Trójkąt jest równoboczny\");
  55. }
  56. }
  57. else
  58. {
  59. print(&#092;"Trójkąt jest równoramienny\");
  60. }
  61. }
  62.  
  63. elseif ( ((($przy_1*$przy_1) + ($przy_2*$przy_2))) == ($przeciw*$przeciw) )
  64. {
  65. print(&#092;"Trójkąt jest prostokątny\");
  66. }
  67.  
  68. else
  69. {
  70. print(&#092;"Trójkąt jest różnoboczny\");
  71. }
  72. }
  73.  
  74. else
  75. {
  76.  print(&#092;"Z podanych boków nie można utworzyć trójkąta, upewnij się czy podałeś wszyt
    s
  77. ie\");
  78. }
  79.  
  80. {
  81.  
  82. ?>


do was mam prosbe, zebyscie rzuciili na to okiem, czy nie ma bledow i ew. cos poprawili, no i powiedzciie mi jak ta funkcja sie nazywala smile.gif
bela
to jest c ? kompilowałeś to ? jak nie to sprobuj

1. nazwy zmiennych bez $ to nie perl, php
2. nie /n a \n
Cytat
#kurcze tu mi uciekla z glowy funkccja zeby za $a podstawila wartosc z klawiatury wpisana

3. to jest w pierwszym lepszym 'kursie' c
4. zamiast main powinna byc void main(void) (chyba dry.gif )
hwao
Bela z 4 to pewnie zalezy od kompilatora ale w c++ musi byc dane co funckja dana zwraca (tak sie ja "rejestruje")
Tylko imho zazwyczaj tjest int (return 1; )
anas
Hej.

Skoro piszesz o C, a przy nazwach zmienny jak wspomnial bella stawiasz znak $ to chyba sam do konca nie wiesz co robisz, szczerze mowiac zawsze mialem stycznosc z c++ i do obslugi danych wejsciowych uzywalem "cout" i "cin" pamietaj o dolaczaniu bibliotek niezbednych do dzialania programu.

Moze taki prosty przyklad Ci pomoze:

Kod
#include <iostream.h>
#include <conio.h>


void main ()
{

    int a,b,c,przeciw,przy_1,przy_2;

    cout << "Wprowadz pierwszy bok trojkata: ";
    cin >> a;
                /* dalsza czesc kodu sprawdzajaca co tam chcesz i pobierajac dane*/

}


Aby zlamac wiersz mozesz uzyc skladni cout << "Tekst \n" lub cout << "Tekst" << endl;

pozdrawiam

anas
sf
Cytat(serafin @ 2005-02-06 00:12:41)
sorry ale strumienie o ktorych mowisz sa straaaaaaasznie wolne (czyli ogolnie mowiac do d...)

Lepiej dolaczyc stdio.h i uzywac strumieni poprzez scanf() i printf() winksmiley.jpg

Pokaż swoje wyliczenia tej różnicy prędkości tongue.gif
hwao
Cytat(sf @ 2005-02-06 10:53:56)
Cytat(serafin @ 2005-02-06 00:12:41)
sorry ale strumienie o ktorych mowisz sa straaaaaaasznie wolne (czyli ogolnie mowiac do d...)

Lepiej dolaczyc stdio.h i uzywac strumieni poprzez scanf() i printf() winksmiley.jpg

Pokaż swoje wyliczenia tej różnicy prędkości tongue.gif

Ja tez czytalem ze tamte sa "gorsze" od tych za proponowanych przez Serafina...
Sf wystarczy poczytac :-)
sf
To, że są wolniejsze to oczywiste (mają większe możliwości niż printf), ale chciałbym zobaczyć różnice tongue.gif Zwłaszcza, że już odrazu lepiej poznać możliwości cin i cout niż słuchać rad, że lepiej tego nie używać bo to jest wolniejsze. Pozorne optymalizowanie na takim poziome jest poprostu stratą czasu ;] To czy użyjemy cout czy printf nie jest ważne. Nie odczujemy żadnej różnicy po uruchomieniu.
Jabol
dobrze, ale zobaczmy na temat. Pzekładamy do C, czyli problem odpada, trzeba użyć printf.
a teraz:
- # nie oznacza w C komentarza (tylko instrukcje preprocesora)
- nie ma takiej funkcji jak empty, w Twoim przypadku wystarczyłoby sprawdzić, czy a, b oraz c są większe od zera.
- printf, puts itp. , a nie print
- w C nie ma czegoś takiego jak elseif, musisz napisać if(){} else if(){} else{}
- int main(void){return 0;} tak się definiuje funkcję, jeżeli nie przyjmuje ona argumentów
A do wczytania inputu, polecam:
- zrobić sobie bufor
- zaalokować miejsce (malloc)
- wczytać X znaków (określoną liczbę żeby uniknąć przeciążenia bufora) // fread albo for i to X getc
- atoi lub strtol
- zdealkować bufor
lub
- scanf (ale polecam pierwszą możliwość)
invx
Cytat
A do wczytania inputu, polecam:
- zrobić sobie bufor
- zaalokować miejsce (malloc)
- wczytać X znaków (określoną liczbę żeby uniknąć przeciążenia bufora) // fread albo for i to X getc
- atoi lub strtol
- zdealkować bufor


a mogl bys to na kod przezucic, bo brzmi przerazliwie
sf
zrob sobie tablice tylko, do ktorej wczytasz dane, nie trzeba alokowac dynamiecznie pamieci na taka bzdure ;]

no i w ogole przeczytaj sobie jakis kurs C
invx
a w czym lepsza bedzie tablica od zwyklej zmiennej ?
sf
E, sorry, tutaj masz same int wiec ok, myslalem, ze wprowadzasz str, a wtedy trzeba stworzyc tablice char smile.gif
hawk
Hint: najstarsi górale piszą czasami int main(int argc, char *argv[]) winksmiley.jpg.
scanner
Lekko OT: sugeruję zmienić temat wątku. Poziom zagadnień w dyskusji raczej nie pasuje do "ostatanie szlify kodu" - to raczej pierwsze odłupki.
Jabol
Cytat(hawk @ 2005-02-07 11:03:02)
Hint: najstarsi górale piszą czasami int main(int argc, char *argv[]) winksmiley.jpg.

ale ten program nie przyjmuje argumentów więc można spokojnie użyć `int main(void)`
a teraz... tak, co do kodu
Kod
// kompilujemy:
// gcc -pedantic -std=gnu99 -o test test.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
  int bok=0, i=0, c=0;
  char buf[20];

  memset((void *)buf, 0, 20);
  for(i=0; i<20; i++)
    if((c=getchar())!='\n')
      buf[i]=c;
    else
      break;
  bok=strtol(buf, (void*)((void *)NULL), 0);
  printf("%d\n", bok);
  return 0;
}
Tak wczytujemy bok!
sztosz
To ponizej to jest dokladnie to co ty napisałes tyle że w c++, działa, jezeli źle to pomyliles cos z funkcjami warunkowymi IF ELSE (ja z nich usunałem tylko $). I wywalłem ostatniee ELSE bo nie bylo poprzedzone zadnym IF (każdy IF ma najwyzej jedno ELSE).
To link do skompilowanego programu w Dev-C++: www.sztosz.no-ip.org/trojkat/trojkat.exe
Kod
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
//---------INICJACJA ZMIENNYCH--------------------
   int a, b, c, przeciw, przy_1, przy_2;
//---------INICJACJA ZMIENNYCH KONIEC-------------

//---------WCZYTYWANIE DANYCH---------------------
//Muszą byc liczby całkowite wpisane, sprawdzanie
//typu to juz inna para kaloszy
   cout << "Podaj 1 bok: ";
   cin >> a;
   cout << "Podaj 2 bok: ";
   cin >> b;
   cout << "Podaj 3 bok: ";
   cin >> c;
//---------WCZYTYWANIE DANYCH KONIEC--------------
   
//---------DOPASOWYWANIE BOKOW I INFO NA EKRAN----
   if ( a < b )
   {
       przeciw = b;
       przy_1 = a;
   }
   else
   {
       przeciw = a;
       przy_1 = b;
   }
   if ( przeciw < c )
   {
       przy_2 = przeciw;
       przeciw = c;
   }
   else
   {
       przy_2=c;
   }
       if ( (a == b) || (a == c) || (b == c) )
       {
       if ( a == b && b == c )
       {
           if ( (przy_1*przy_1 + przy_2*przy_2) == ( przeciw*przeciw) )
           {
               cout << "Trójkąt jest równoramienny, prostokątny" << endl;
           }
           if ( a == b && b == c )
           {
               cout << "Trójkąt jest równoboczny" << endl;
           }
       }
       else
       {
           cout << "Trójkąt jest równoramienny" << endl;
       }
       }

   else

   if ( (((przy_1*przy_1) + (przy_2*przy_2))) == (przeciw*przeciw) )
   {
       cout << "Trójkąt jest prostokątny" << endl;
   }

   else
   {
       cout << "Trójkąt jest różnoboczny" << endl;
   }
   
//--DOPASOWYWANIE BOKOW I INFO NA EKRAN KONIEC----

//----------"Press any key.." I EXIT--------------
   system("PAUSE");
   return EXIT_SUCCESS;
//----------"Press any key.." I EXIT KONIEC-------
}
invx
wielkie dzieki, wszytsim, za odpowiedzi, i przeedewszystkim pomoc smile.gif dawno nie mialm kontaktu z C i pozapominalem, ale dzieki wam znowy mi zaswiecilo co i jak smile.gif jeszce raz dzieki smile.gif
sf
Hm, jak juz jestesmy przy C... zna ktos jakies IDE pod konsole? Chodzi o cos takiego co by odrazu tworzylo pliki umozliwiajace szybkie stworzenie plikow configure, by programy byly przenosne :} Kiedys szukalem jakiegos artykulu jak tworzyc configi za pomoca automake, autoconfig czy cos tam jeszcze, ale nie udalo mi sie znalezc.. ble.
Jabol
info|man automake|autoconf
Ozzy
Cytat
Pokaż swoje wyliczenia tej różnicy prędkości

Osobiście nie sprawdzałem, ale kolega twierdzi, że 14 razy wolniejsze.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.