312
programozas
-
kl24h #312 A printf-ben a kettős idézőjelet kell használni: Shift + az Enter melletti gomb. -
#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. -
#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?
-
#307 megvan:) -
#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);
}
-
#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 -
#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. -
#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 "*",
-
#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. -
#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. -
#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. -
#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;
}