312
programozas
  • kl24h
    #312
    A printf-ben a kettős idézőjelet kell használni: Shift + az Enter melletti gomb.
  • Gladiator
    #311
    Ja, valamiért a fórum átírta. Egyébként az volt a probléma, hogy ebből a felső idézőjelből 2 fajta is létezik ("). Van ez, valamint van a döntött. Na, a döntöttet nem fogadja el. Most már ezt is tudjuk. Egyébként /223-as a hiba száma.
  • lord nihilus
    #310
    az fórum hibája
  • kl24h
    #309
    Mi ez a #8220 vagy a #8221?
    A printf() sok helyen nincs jól leírva, mert kell a ("...%d", és az értek). másképpen nem is mehet.
  • Gladiator
    #308
    Helló

    A C Programming for Dummies nevű könyvből tanulok és az összes 10. fejezetben lévő példafeledattal valami baja van a Code::Blocksnak, amit használok és egyiket se tudom futtatni, mert a printf után valamiért a zárójelben lévő első szóra azt hiszi, hogy az vmi nem meghatározott érték, és először meg kell határoznom, ha használni akarom. Pl:

    #include <stdio.h>

    void limit(int stop);
    int main()
    {
    int s;
    printf(“Enter a stopping value (0-100): “);
    scanf(“%d”,&s);
    limit(s);
    return(0);
    }
    void limit(int stop)
    {
    int x;
    for(x=0;x<=100;x=x+1)
    {
    printf(”%d ”,x);
    if(x==stop)
    {
    puts(“You won!”);
    return;
    }
    }
    puts(“I won!”);
    }


    És akkor a végére kidob vagy 20 hibaüzenetet, pl hogy:

    Error: 'Enter' undeclared value (first use in this function)

    Copy pasttek másoltam be, úgyse volt jó, saját kezűleg írtam be, úgyse.

    Tök fogyatékosan fogalmaztam, remélem érthető. Szóval valakinek ötlet?
  • Gladiator
    #307
    megvan:)
  • Gladiator
    #306
    Oké, következő problémám. Újfent egy nagyon egyszerű dolog, de mégis összeomlik tőle a gép:D Elindítom, kiírja, hogy adja meg a cél kkordinátát, beírok akármit, majd kiírja, hogy az ex0701 (a project neve) leállt. Pedig tuti, hogy ez ugyanaz a kód, mint ami a könyvben van.

    #include <stdio.h>

    int main()
    {
    int coordinate;

    printf("Input target coordinate: ");
    scanf("%d",coordinate);
    if( coordinate >= -5 && coordinate <= 5 )
    {
    puts("Close enough!");
    }
    else
    {
    puts("Target is out of range!");
    }
    return(0);
    }
  • Gladiator
    #305
    Köszi, azóta már minden tiszta, már a 120. oldalon vagyok a könyvben, de majd asszem lesz még pár kérdésem:D
  • kl24h
    #304
    Én Dev C++ használok és hogy működjön, amit beírtál, akkor így kell beírni:
    #include <stdio.h>
    #include <conio.h>

    int main()
    {
    printf("4 times 5 is %d",4*5);
    getch();
    }

    Az #include <conio.h>, azért kell, mert a getch() másképp nem ismeri és ez a getch() azért kell, hogy megmaradjon a Command Prompt féle ablakocska. A return(0) kitöröltem, másképpen tényleg valami nagy random számot fog megadni.
    A %i egész számokra vonatkozik, a %f valós számokra, %c az valamilyen karakterre, %g az egyszerübb alakban írja ki a valósz számot, pl. ha a valósz számként volt definiálva egy művelet, de közben az eredmény valamilyen tizedes szám: 1.25, 1.368, mert a %f esetében így írna ki ezeket: 1.25000 vagy 1.36800, a %d nem tudom én sem.
    Másképpen ha a %d kicseréled %i-re, akkor is megadja a 20-as eredményt, mert egész szám.
  • RYO21
    #303
    Tud valaki egy jó C# játékfejlesztés tutorialt? Lehet angol is. Egyébként van egy kis alaptudásom a C nyelvekhez, szóval nemvagyok teljesen kezdő.
  • lord nihilus
    #302
    szerintem a %d az egy intet helyettesít a kiírandó szövegben bárhol, amit később adsz meg (ebben az esetben a vessző utáni 4*5), ezek a sima c-ben is ugyanígy működnek, keress rájuk googleben, asszem van még pár ilyen:D

    a buildre elvileg mindig szükség van mert akkor nem fordul le konkrétan a forráskódod futtatható progivá (például ha 3-szor átírod a kódod, de csak az elsőnél buildeled, a többi változtatásnál meg csak a runt nyomogatod, akkor csak első változtatásnál létrehozott progit futtatja), ha nem szól miatta a fejlesztőprogi az nemtom miért lehet...

    remélem segíthettem, de majd biztos lesz nálam kompetensebb a témában:D
  • Gladiator
    #301
    Helló

    iOS-re szeretnék megtanulni fejleszteni, amihez Objective C kell, aminek az alapja a C, úgyhogy gondoltam belevetem magam abba. És most vagy én vagyok teljesen fogyatékos, vagy a könyv szar, de a legegyszerűbb példánál elakadtam:D A lényeg az, hogy ki kéne számolnia, hogy 4*5 az 20, de nekem folyamatosan valami random milliárdos szám jön ki, pedig ugyanazt bemásoltam, mint ami a könyvben van:

    #include <stdio.h>

    int main()
    {
    printf("4 times 5 is %d
    ",4*5);
    return (0);
    }

    Bár a könyv nem igazán tért ki arra, hogy mit jelent a %d, úgyhogy valaki azt is elmagyarázhatná:)

    u.i.: oké, a helyzet az, hogy eddig csak runra nyomtam, nem pedig build and runra. Mi a különbség a kettő között? Ha build nélkül nem lehet értelmes eredményt kapni, miért nem szól? És akkor még mindig: mit jelent a %d?:D
  • lord nihilus
    #300
    Hello! Érdekelne bármilyen főiskolai/egyetemi szintű, vagy valami kezdőknek való fólia, jegyzet, tutorial, bevezetés a grafikába szintű anyag csak java alapokon. Jelenleg eclipseben ismerkedek a javaval. (eddig c#-ot tanultam, ott egyszerű(bb) volt belekezdeni)
    Ha tudna valaki ajánlani azt megköszönném.
  • nyerek01
    #299
    Minesweeper
  • nyerek01
    #298
    Hello. Ha esetleg valakit érdekelne a java nyelven írt aknakereső programom forráskódja szívesen megosztom ha szeretne tanulni belőle (csak kezdőknek, miven semmi extra nincs benne).
  • RobexNet
    #297
    Új Visual Basic .Net programozási fórum

    http://netvbprogramminggroup.swhu.tk/index.php
  • Samurai84
    #296
    Köszönöm, a megoldásoddal jó lett, csak a "*%i"-ben a csillagot kellett a végére rakni és ok-s.
  • Dj Faustus #295
    Pythonban:
    #!/usr/bin/python
    a, b = 7, 1
    while b<20:
    if a*b%3==0:
    print "*%i"%(a*b)
    else:
    print a*b
    b = b+1
  • kl24h
    #294
    C++-ban így lenne:
    #include <stdio.h>
    #include <conio.h>

    int main()
    {
    int a, b;
    a = 7;
    b = 1;
    while (b < 20) {
    if (a*b%3==0) printf ("*%i\n",a*b);
    else printf ("%i\n",a*b);
    b = b+1;
    }
    getch();
    }


    Ez így működik is és az eredmény így lenne:
    7
    14
    *21
    28
    35
    *42
    ...
    112
    119
    *126
    133


    Ezt csak át kellene írni Python-ba.
  • Samurai84
    #293
    köszi, de ez így szintaxist hoz...
  • kl24h
    #292
    Ezlnézést:

    a, b = 7, 1
    while b<20:
    if a*b%3==0: print "*"a*b,
    else print a*b,
    b = b+1
  • kl24h
    #291
    Most nálam nincs a Python telepítve, ezért nem tudom leellenőrizni, de azért van egy-két észrevétel, ami nem lenne helyes, ezért kijavítottam:

    a, b = 7, 1
    b = b+1
    while b<20:
    if a*b%3==0: print "*"a*b,
    else print a*b,

    Ezt nem tudom, ha helyesen írtam print "*"a*b, hogy a számok elejébe tegye a * jelet.
  • Samurai84
    #290
    Sziasztok!

    Full kezdőként Pythonnal próbálkozok. A könyvből a feladat, hogy irassam ki a 7es szorzótábla első 20 tagját és csillaggal jelöljem azokat amik 3 többszörösei. Szép is, jó is, csak azt nem tudom megcsinálni hogy a számok mögé tegye a csillagot. Mi rontok el?

    a, b = 7, 1
    while b<20:
    print a*b,
    b = b+1
    if a*b%3==0:
    print "*",
  • Bexter
    #289
    Üdv.

    Facebook applikácio készítéshez keresek olyat, aki ért hozzá.
  • Windy
    #288
    Sziasztok. Egy chatprogram-modul elkészítésére keresek programozót. Bőkezűen fizetnék érte!!:)
  • lord nihilus
    #287
    Egy kevésbé technikai problémában szeretnék segítséget kérni! Van egy programozási feladat, amiben adott egy technológia (wcf vagy más .NET technológia), a feladatban egy szerver fut illetve hozzá becsatlakozó N darab kliens program (legyen mondjuk fix 3 darab console-os valami az egyszerűség kedvéért), ami egy elosztott rendszert alkot.
    Ha valakinek van ötlete mi lenne egy ilyen probléma amit a fenti módszerrel megoldhatnék? Sajnos elfogyott a fantáziám ehhez...Persze ne 150 jegyű prímekkel kelljen műveleteket végezni:D Előre is köszi a segítséget
  • kl24h
    #286
    Ezt a programot már rég megírtam, annak idején csak amatőr voltam és akkor még moduló fuggvényt is írtam. Ezt azért inkább mutattam, mert a "While" ciklus alkalmazásával szépen kiírja a prímszámokat.
    Ami a feladatot illeti én csak hasonlóképpen írnám meg, tehát hogy a program magának egész a maximum számig meghatározza a prímszámokat, de csak a minimum számnál nagyobb/esetleg egyenlő prímszámokat írja ki.
  • Dj Faustus #285
    1, A feladat (itt a 11.) specifikációja minimum és maximum értékeket követel meg, pláne parancssorról bekérve (ezért kell az atoi is).
    2. Ha már van maradékos osztás a c-ben:
    if (i % j == 0) {}

    akkor nem kell újból megírni - tehát a Mod függvény felesleges.
    3. Mint írod is, tömb inicializálásánál meg kell adni a tömb méretét:
    int a[n];

    4. Az alábbi helyett:
    while (j <= int(sqrt(i))) {}

    javaslom ezt:
    while (j*j <= i) {}

    Egyrészt nem kell hozzá így a math.h könyvtár.
    Másrészt gyorsabb (nem kell külön lebegőpontos->egész konverzió)
    5. "A goto az ördög műve" ;)
    Bővebben: itt, illetve itt.
    6. Intendálás, kódkiemelés
  • kl24h
    #284
    A "printf("%i\n", z);" csak azért van, hogy megszámolja hány prímszám van egész "n"-ig. Ha hibát jelez, akkor csak azért van, mert ahol definiálva van a "int a[];" oda legalább int a[n]; kell írni. Most vettem észre én is, de régebben a régebbi DEV C++ verzió elfogadta így is.
  • kl24h
    #283
    #include <stdio.h>
    #include <conio.h>
    #include <math.h>


    float Mod(int i, int j)
    {
    return i - j*int(i/j);
    }

    float Prim(int n)
    {
    int z = 1;
    int a[];
    if (n<0) {
    printf("A beirt szam negativ!!!\n"); printf("Irj nagyobbat vagy egyenlot 2-vel!!!\n");
    }
    if (n>=0 && n<2) {
    printf("A beirt szam kisebb mint 2!!!\n"); printf("Irj nagyobbat!!!\n");
    }
    if (n>=2) {
    printf("A primszamok egesz %i-ig:\n",n);
    printf("\n");
    printf("%i",2);
    for (int i = 2; i <= n; i++) {
    int j = 2;
    while (j <= int(sqrt(i))){
    if (Mod(i,j)==0) break;
    else j++;
    }
    if (Mod(i,j)!=0) {
    z++;
    a[z] = i;
    printf(",%i",a[z]);
    }
    }
    printf("\n");
    printf("%i\n", z);
    }
    }
    int main()
    {
    int n;
    newtry:printf("n = ", n); scanf("%i",&n);
    Prim(n);
    goto newtry;
    getch();
    }

    Dev C ++ használtam, a prímszámok kiírása "n"-ig az "if (n>=2) {"-ben van, a többi csak azért van, hogy ne blokkoljon a program, ha esetleg elírja az ember.
  • NorBear
    #282
    Már tárgytalan, megoldottam a problémát, viszont így is csak 200-ig írja ki helyesen a számokat. Az algoritmus nem jó, és nehézkes lenne implementálni más program környezetben.
  • NorBear
    #281
    A szám négyzetgyökének vizsgálatával talán mégis kilehet szűrni az állprímeket. A feltételt az alábbi sorral egészítettem ki:

    if((min % 2 != 0 || min == 2)
    && (min % 3 != 0 || min == 3)
    && (min % 5 != 0 || min == 5)
    && (min % 7 != 0 || min == 7)
    &&(min != 1)
    &&(sqrt(min) % 1 != 0)){



    A compiler viszont hibát jelez, azzal a kikötéssel hogy double típusú változóra nem használható a (%) operátor. Ebben szeretnék egy kis segítséget kérni. Lényegében azt szeretném kiértékelni hogy a gyökvonás után kapott szám egész e.


  • NorBear
    #280
    Értem. Lehet hogy a prím algoritmus keresése helyett inkább írok egy másik programot. A jelenlegi algoritmus is eléggé nehézkes ráadásul az állprímek is átjutnak a szűrésen.

    Úgy döntöttem hogy helyette inkább megírom az strcmp()függvényt.
  • Dj Faustus #279
    "A code blocks viszont nem akarja végrehajtani a set programs, arguments parancsot, annak ellenére hogy a compiler nem talált semmilyen hibát."
    Én Komodo Edit 7.1.3-at használok kódszerkesztésre Debian Squeeze Linux alatt, a fordításhoz meg a GCC 4.4.5-ös verzióját:
    # gcc --version
    gcc (Debian 4.4.5-8) 4.4.5


    Az általad legutóbb bemásolt kód szépen lefordul:
    # gcc -o prime prime.c
    # ls -la prime*
    -rwxr-xr-x 1 faustus faustus 7386 dec 14 22.27 prime
    -rw-r--r-- 1 faustus faustus 1020 dec 14 22.54 prime.c

    és fut is:
    # ./prime 0 100
    2
    3
    5
    7
    11
    13
    17
    19
    23
    29
    31
    37
    41
    43
    47
    53
    59
    61
    67
    71
    73
    79
    83
    89
    97
  • NorBear
    #278
    Valamelyest egyszerűsítettem a programon illetve elkészültem az argumentum kezelés részével is. A code blocks viszont nem akarja végrehajtani a set programs, arguments parancsot, annak ellenére hogy a compiler nem talált semmilyen hibát.

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

    /*Írjon programot, amely a paraméterül kapott min és max érték között kikeresi és listázza a prímszámokat.

    Tipp: Paraméterek ellenõrzése: legalább 2 (min,max), számok legyenek. Ha min > max akkor swap(min,max).
    A primszámok csak önmagukkal és egyel oszthatók. Algoritmus keresése erre a szabályra.
    For ciklus min-max értékikg, majd a fenti algoritmus alkalmazása a ciklusváltozóra.*/


    int swap(int *i,int *j){
    int t;
    t = *i;
    *i = *j;
    *j = t;
    }

    void prime(int min, int max){

    if(min>max)
    swap(&min,&max);

    for( ; min<=max; min++){

    if((min % 2 != 0 || min == 2)
    && (min % 3 != 0 || min == 3)
    && (min % 5 != 0 || min == 5)
    && (min % 7 != 0 || min == 7)
    &&(min != 1)){

    printf("%d\n", min);

    }
    }
    }

    int main(int argc, char *argv[]){
    if(argc != 3){
    printf("Error: more then two arguments use for define intervallum!\n");
    return EXIT_FAILURE;
    }

    prime(atoi(argv[1]),atoi(argv[2]));
    return EXIT_SUCCESS;

    }
  • NorBear
    #277
    Faustus, szeretném megköszönni szíves segítséged és a hasznos tanácsokat

    A sejtésed teljes mértékben megalapozott. Argumentum kezelésre is szükség lesz a program megírásához. A javaslataidnak megfelelően módosítok a forráskódon.
  • Dj Faustus #276
    Szerintem a tomb függvény for ciklusában levő feltételénél lett elrontva, nem vetted bele a kiíratást és az i változó növelését (kiemeltem).

    Szóval ilyesmire módosítottam:
    #include <stdio.h>
    /*Írjon programot, amely a paraméterül kapott min és max érték között kikeresi és listázza a prímszámokat.*/

    int swap(int *i, int *j) {
    int t = *i;
    *i = *j;
    *j = t;
    }

    void tomb(int min, int max) {
    int i, T[max];

    if (min > max)
    swap(&min,&max);

    for( ; min <= max; min++) {
    i = 0;
    if (!((min % 2 == 0 && min != 2) || (min % 3 == 0 && min != 3) || (min % 5 == 0 && min != 5) || (min % 7 == 0 && min != 7) || (min == 1))) {
    T = min;
    printf(" %d ", T[i]);
    i++;
    }
    }
    }
    void main () {
    tomb(0,11);
    printf ("\n");
    }


    Debian Squeeze Linux alatt, gcc (4.4.5) alatt lefordul, fut.
    Amire azért ügyelj (ezeket eszközöltem a mellékelt kódban):
    - Hogy áttekinthető legyen a kód, indentáld: a függvényeknél/eljárásoknál, ciklusoknál, feltételeknél kezd bentebb a műveletet végző "magot"
    - A program magját képező main eljárásba ne rakj bele más függvény deklarációját - ugyancsak csökkenti az áttekinthetőséget.
    - Mivel a tomb függvény kiírást végez, és nem szükséges a max változó kiírása, átalakítottam eljárássá.

    No meg még az a sanda gyanúm, hogy
    - A feladatban szerepel: [i]"programot, amely a paraméterül kapott min és max érték" - ez arra utal, hogy a lefordított programnak kell megadni a min és max értéket, tehát így kell tudnom futtatni Linux alatt a lefordított programot:
    ./prime 0 11
    vagy Windowsban:
    prime.exe 0 11
    Ezért szerintem nézz utána a argv és argc változóknak.
    - Az általad alkalmazott algoritmus jó, de csak a kétjegyű számokhoz. Ha már három számjegyű számokkal dolgozol (tomb(0,200)), akkor megjelenik a 121 is, ami nem prim (11*11).
    Szóval barátkozz meg Eratoszthenész szitájával
  • NorBear
    #275

    #include<stdio.h>



    /*Írjon programot, amely a paraméterül kapott min és max érték között kikeresi és listázza a prímszámokat.*/



    main ()
    {

    int tomb(int min, int max)

    {

    int i, T [max];

    if (min>max)
    swap(&min,&max);

    for( ; min<=max; min++){

    i=0;

    if (!((min % 2 == 0 && min != 2)
    || (min % 3 == 0 && min != 3)
    || (min % 5 == 0 && min != 5)
    || (min % 7 == 0 && min != 7)
    || (min == 1)))


    T [i] = min;

    printf(" %d ", T [i]);

    i++;

    }
    return max;

    }
    printf(" %d ",tomb(0,11));
    }

    int swap(int *i, int *j) {
    int t = *i;
    *i = *j;
    *j = t;
    }
  • NorBear
    #274
    #include<stdio.h>



    /*Írjon programot, amely a paraméterül kapott min és max érték között kikeresi és listázza a primszámokat.

    Tipp: Paraméterek ellenõrzése: legalább 2 (min,max), számok legyenek. Ha min > max akkor swap(min,max).
    A primszámok csak önmagukkal és egyel oszthatók. Algoritmus keresése erre a szabályra.
    For ciklus min-max értékikg, majd a fenti algoritmus alkalmazása a ciklusváltozóra.*/



    main ()
    {

    int tomb(int min, int max)

    {

    int i, T [min];

    if (min>max)
    swap(&min,&max);

    for( ; min<=max; min++){

    i=0;


    if (!((min % 2 == 0 && min != 2)
    || (min % 3 == 0 && min != 3)
    || (min % 5 == 0 && min != 5)
    || (min % 7 == 0 && min != 7)
    || (min == 1)))

    T [i] = min;

    printf(" %d ", T [i]);

    i++;


    }
    return max;
    }
    printf(" %d ",tomb(5,10));
    }

    //swap függvény: a fügvény két változó cseréjét valósítja meg
    int swap(int *i, int *j) {
    int t = *i;
    *i = *j;
    *j = t;
    }
  • NorBear
    #273
    #include<stdio.h>



    /*Írjon programot, amely a paraméterül kapott min és max érték között kikeresi és listázza a prímszámokat.*/



    main ()
    {

    int tomb(int min, int max)

    {

    int i, T [min];

    if (min>max)
    swap(&min,&max);

    for( ; min<=max; min++){

    i=0;


    if (!((min % 2 == 0 && min != 2)
    || (min % 3 == 0 && min != 3)
    || (min % 5 == 0 && min != 5)
    || (min % 7 == 0 && min != 7)
    || (min == 1)))

    T [i] = min;

    printf(" %d ", T [i]);

    i++;


    }
    return max;
    }
    printf(" %d ",tomb(5,10));
    }


    int swap(int *i, int *j) {
    int t = *i;
    *i = *j;
    *j = t;
    }