Új hozzászólás Aktív témák
-
Jester01
veterán
A const-nak annyi jelentősége van, hogy a string literal az const (csak olvasható memóriaterületen van). Tulajdonképp nem is értem, miért fordul le (-Wwrite-strings és akkor van warning). De próbálj csak meg beleírni, lesz szép segfault
A szám/egyéb valóban nem volt feladat, de mivel egy tömböt indexelsz a beadott karakterekkel azért jó ha ellenőrzöd.
Csak azért kötözködtem, hogy ha valaki meglátja azért tudja, hogy még lehet rajta mit csiszolni. Gondoltam, hogy neked nem okozna problémát
Jester
-
Dirty_Pio
csendes tag
Sziasztok, az volna a kerdesme, hgoy hogyan tudok egy binaris filebol kiolvasni szamokat. Azaz ha meg van adva hogy pl. az elso 2 byteon van egy szam ami egy tulajdonsagat jeloli a filenak aminek majd a feldolgozas soran veszem hasznat, es utana meg byteonkent vannak mas szamok( ha jol tudom igy maximum 0-255 intervallumba lehetnek). Szoval az a kerdesem hogy hogyna csinalok ezekbol a byteokbol ujra szamokat? Esetleg ha tudtok kuldeni egy tenyleg osszetett es ertelemse leirast a binaris filokkal valo dolgozasrol c ben szovesen vennem.
-
Dirty_Pio
csendes tag
Ok, rajottem a dologra, szal en allapitom meg hogy miylen tipusu memoriamezobe olvasom be a fielbol a byteot es azt is, hogy hany byteot akarok ott latni. A kerdesem az lenne, hogy ha tegyuk fel en csak egy 1 byteon abrazolt szamot akarok kiolvasni es short intet hasznalok ami 2 bytet folglal, akkor a tobbit keegesziti 0-kal a program? Amugy a dolog azert kellett, hogy egy binaris fileban levo adatokbol kirajzoljak egy kepet a kepernyore.
-
blaces
tag
Lortech köszönöm a kódot. Igyekszem átjavítani. Bocs a késői reagálásért, de közben zh időszak is van, így elvagyok havazva. És szívesen várom a további kritikákat
gets() függvényhez annyit, hogy nem csak suliban alkalmazák, hanem könyvekben is... az fgets-et csak megemlítették, példa feladat mindegyike a gets()-el volt. Úgyhogy az a link nagyon jól jött. A többi "hibát" meg megpróbálom még magam kijavítani, csak a könyveken és a prohardveren kívül nem tudok másra támaszkodni, és a ezek szerint a könyvek alapján is betanulom a nem ajánlott kategóriákat.Jester01 értettem, majd törekszem arra, hogy jó C programozó legyek
Ismét kéne egy kis help. Google-val nem tudtam, hogy hogyan kell arra még rákeresni, hogy ha több for ciklust eggyé alakítani. Meg angolul sem kaptam értelmes találatot a havi cikluson kívül...
for(i=1; i<=terfog; i++){
for(j=i; j<=terfog; j++){
for(k=j; k<=terfog; k++){
if(i*j*k==terfog)
teglatestek++;
}
}
}, hogy ezt a 3 for ciklust kéne 1 ciklusba írni, vagy gyorsabb formába, amiatt nem kaptam rá pontot mert lassú..., próbáltam az alap tudásommal is papíron, de ötletem sincs. Mivel j és k az előző for ciklusból kapja az értékét...
-
Jester01
veterán
válasz Dirty_Pio #903 üzenetére
1 byteos számot olvasd (un)signed char változóba, aztán csinálj vele amit akarsz. Ha mindenképp short-ba olvasod, akkor eleve azt is tudnod kell, hogy melyik felébe (endianness). A másik felét pedig neked kell nullázni (akár úgy, hogy a beolvasás előtt az egészet nullázod).
MOD: ja és negatív számoknál még sign extension is kell. Szóval macerás, jobb ezt a fordítóra bízni.[ Szerkesztve ]
Jester
-
blaces
tag
válasz Jester01 #905 üzenetére
Feladat:
Írj programot, amely a bemenetről beolvas egy természetes számot - egy térfogatot! A program írja a szabványos kimenetre, hogy hány különböző téglatesthez tartozhat ez a térfogat! (A téglatestek oldalhossza csak egész szám lehet!)
Példa:
bemenet- kimenet
27 - 3
4 - 2
99 - 4
254 - 2Nekem erre csak a 3 for ciklusos megoldás jutott eszembe
[ Szerkesztve ]
-
Jester01
veterán
Hirtelen csak a prímtényezőkre bontás jut eszembe mint alternatíva.
MOD: ha konkrétan nem mondták, hogy a 3 ciklus baj, akkor azon még lehet csiszolni. Nyilván elég akkor futtatni a belső ciklust, ha a külső változó osztója a térfogatnak. Ha osztója, akkor gyorsan le is kell osztani és belső ciklusban már csak ezt felbontani.
[ Szerkesztve ]
Jester
-
blaces
tag
válasz Jester01 #908 üzenetére
konkrétan mondta a gyakvezér, hogy a 3 ciklus valami mást kell..., hogy a program 5 másodpercen belül legyen... (vagy millisecundum...).
Rákérdezek mélben a gyakvezérnél, és még alszok rá egyet, holnap éjfélig van a beadási határidő, hátha eszembe jut valami okosság álomközben.a primtényezős felbontást meglestem. A wikipédián talált kóddal ellenőriztem le, a 99 kivételével mindegyikre annyi prím számot adott le amennyi a példában a kimenten szerepel.
"Ha osztója, akkor gyorsan le is kell osztani és belső ciklusban már csak ezt felbontani."
Ez hogy nézz ki egy példa kódban? if (terfogat%i==0) eddig oké a további részt nem tudom megvalósítani -
Jester01
veterán
Itt van egy ciklussal ... van helyette viszont rekurzió
(a ciklus gyorsabb)int factor(int x, int start, int depth)
{
int count = 0;
int max = sqrt(x);
int i;
for(i = start; i <= max; i++)
{
div_t q = div(x, i);
if (q.rem == 0)
{
count += (depth > 1) ? factor(q.quot, i, depth - 1) : 1;
}
}
return count;
}A feladat eredményét a factor(terfogat, 1, 3) adja.
Ez az én gépemen (2.2GHz) kevesebb mint 5ms alatt lefut bármit is adtam be neki eddig. Na jó, 2 milliárdra már 12msJester
-
blaces
tag
válasz Jester01 #910 üzenetére
Igen a ciklus gyorsabb, az valóban nem jó neki. A 2 for ciklus megengedett...
#include <stdio.h>
int main(){
int terfog;
int i, j, k;
int teglatestek=0;
/*int rovidebb;*/
scanf("%d", &terfog);
/*rovidebb=terfog/2;*/
for(i=1; i<=terfog/i; i++){
if (!(terfog%i)){
for(j=i; j<=terfog/j; j++){
if (!(terfog%j)){
k=terfog/(i*j);
if(k>=j)
teglatestek++;
}
}
}
}
printf("%d\n", teglatestek);
return 0;
}Na így tudtam rövidíteni (a tegnapi fórumozásból így tudtam kivenni.), de most nem tudom, hogy hol a hiba, a példa esetekből a 254-re 3-t ad, holott 2-öt kéne adnia, a többire annyit ad amennyit illik neki.
[ Szerkesztve ]
-
cellpeti
veterán
Sziasztok!Szeretnék írni egy olyan progit amely 90 szám közül(1-90) véletlen adjon ki 5 számot!
Ha lehet 2x ne szerepeljen egy generálásba ugyanaz a szám!Tigris, tigris, csóvafény...
-
Davey7
senior tag
Van újabb feladatsor. Az első és a harmadik feladatot ahogy nézegettem mintaillesztéssel lehetne megcsinálni...
De azt,hogyan tudom használni? Nincs erre valami kész C algoritmus? Mert nem találtam a goggle-ben.
-
[HUN]Zolee
senior tag
Hát fapados megoldásként, feltolod az adott sort egy tömbbe, és elkezded olvasni az elejéről és figyeled hogy mikor jön "B" ha talált, akkor megnézed hogy az utána lévő 2 karakter "U" és "G" ha igen akkor a ciklusváltozódon léptetsz hogy pont kihagyja , ha nem akkor meg nem csinálsz semmit és kiírod .
''<[HUN]DrH>valaki mondjon egy tuningolos programot a mivel kocsis képeket tudok tuningoloni.'' https://ferromag.aranyoldalak.hu/
-
amargo
addikt
Na de ha megtaláltad, akkor miért nem elég neked csak egy példa a brute force algo
Itt van egy olyan rész, hogy The C code:void BF(char *x, int m, char *y, int n) {
int i, j;
/* Searching */
for (j = 0; j <= n - m; ++j) {
for (i = 0; i < m && x[i] == y[i + j]; ++i);
if (i >= m)
OUTPUT(j);
}
}Ezt most betudom annak, hogy fáradt és megszeppent vagy, én is szoktam ilyen lenni. De legközelebb, ha konkrét linkeket kapsz, nézd is meg.
“The workdays are long and the weekend is short? Make a turn! Bike every day, bike to work too!”
-
cellpeti
veterán
Sziasztok!
Nekem egy CD kellene a "Programozzunk C nyelven"-hez van egy CD amin feladatok és magyarázatok vannak és nekem kellenne az a CD.
Nem tudja valaki,hogy honnan lehet letölteni?
Tigris, tigris, csóvafény...
-
tilde
csendes tag
Hello
Én csak C ben tudok programozni, de felhasználtam a programomban a c++ -ból is dolgokat mivel UNICODE karakterekkel kell dolgoznom(magyar ékezetes betűk). Amit felhasználtam az a wchar_t változó, ebbe olvastam be a szövegfájlomat, majd kis átalakítás után vissza ki is írtam fájlba, ez működött is, addig amíg nem kellett a switch case -ében UNICODE karakterra keresni. Ebben kérnék segítséget, hogy felismerje a case az UNICODE karaktereket is.
Feltettem a forráskódomat, a link lenn van, a fő forrásfájl a makesampa.c++, egyébként linux alatt a g++ nevű fordítóval fordítottam. Elég sok a forráskód, még nics kész, de már működik , egyébként a case -el az összes magyar betűre szeretnék rákeresni.
http://trioda.extra.hu/ideir/bc/bc.html
Ne tévesszen meg a c++ kiterjesztés, a program alapjában véve C program, csak a wchar_t miatt kell g++ -al kompilálnom. Hallottam, hogy a C is tudja ezt a változótípust kezelni, de be kell hozza kapcsolni valamilyen könyvtárat.
Bármilyen megoldást elfogadok, nekem csak az kell, hogy át tudjam alakítani a programomat, UNICODE karakterek kezelésére.
Előre is köszönöm a válaszokat.
Rambo
-
Latency
senior tag
Üdv.
Parancssori paraméterekkel kapcsolatban kellene nekem egy kis segítség. Meg kellene keresni a paraméterek között egy karakter sorozatot, de nekem sehogy sem sikerül.
for (i=1;i<=ArgDb;i++)
{
if (ArgTmb[i]=="-h")
{
//csinál valamit
}
}Na most ez nekem sosem lép be az if-be. Mi lehet ezzel a probléma?
Kösz a segítséget.
-
cellpeti
veterán
Esetleg erre valaki?
Tigris, tigris, csóvafény...
-
amargo
addikt
Ismét csak bocsánatot tudok kérni, mert ma nem megy az olvasás értelmezés.
De le írtad a problémádra a választ: ArgTmb char*
ha Te a 2. elemét címzed meg, az a legjobb esetben is a "-" lesz.“The workdays are long and the weekend is short? Make a turn! Bike every day, bike to work too!”
-
amargo
addikt
-
blaces
tag
Hello!
Ismét egy feladathoz kéne segítség.
A feladat két hosszú egész szám összeszorzása (olyannyira hosszú, hogy a long double-kbe se ment bele, ezért stringeztem) 3 napig tartott az összehegesztése...Feladat: Írj programot, amely két hosszú egész számot szoroz össze! Csak pozitív számok fordulnak elő a bemeneten, viszont ezek tetszőlegesen sok 0-val kezdődhetnek. Egy szám legfeljebb 100 számjegyből áll. A két szám két egymást követő sorban helyezkedik el. A program kimenetén nem lehetnek vezető nullák!
Bemenet: Kimenet:
2. eset:
0000789675 19375465800
24536
3. eset:
0000000000000000000000000000000000000000000000000000 0.
35363567#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NUMBER 200
int toInt(char ch) {
return (ch - '0');
}
char toChar(int num) {
return (num + '0');
}
void eraseNewLine(char* str) {
size_t len;
len = strlen(str);
if (len > 0 && str[len-1] == '\n') {
str[len-1] = '\0';
}
}
void eraseNulls(char* str) {
unsigned int count = 0;
size_t i = 0;
size_t len;
char c;
len = strlen(str);
c = str[0];
while (c != '\0') {
c = str[i];
i++;
if (c == '0') {
count++;
} else {
break;
}
}
if (count == len) {
str[0] = '0';
str[1] = '\0';
} else if (count > 0) {
memcpy(str, str+count, (len-count+1));
}
}
void addNulls(int num, char* solution) {
size_t len;
unsigned int i;
len = strlen(solution);
if (num > 0) {
for (i = 0; i < num; i++) {
solution[len+i] = '0';
}
solution[i+len] = '\0';
}
}
void changeStr(char* s1, char* s2) {
char temp[2*MAX_NUMBER];
size_t l1;
size_t l2;
l1 = strlen(s1);
l2 = strlen(s2);
memcpy(temp, s1, l1+1);
memcpy(s1, s2, l2+1);
memcpy(s2, temp, l1+1);
}
void multiplyWithOneChar(char x, char* y, char* solution) {
unsigned int xv = toInt(x);
unsigned int yi;
unsigned int tempi;
unsigned int carry = 0;
char temp[2*MAX_NUMBER];
unsigned int i;
size_t len;
len = strlen(y);
for (i = 0; i < len; i++) {
yi = toInt(y[len-i-1]);
tempi = yi * xv + carry;
if (tempi > 9) {
carry = tempi / 10;
yi = tempi % 10;
} else {
carry = 0;
yi = tempi;
}
temp[i] = toChar(yi);
}
if (carry > 0) {
temp[i] = toChar(carry);
temp[i+1] = '\0';
} else {
temp[i] = '\0';
}
len = strlen(temp);
for (i = 0; i < len; i++) {
solution[i] = temp[len-i-1];
}
solution[i] = '\0';
}
void add(char* y, char* solution) { // solution = solution + y;
unsigned int yi;
unsigned int si;
unsigned int tempi;
unsigned int carry = 0;
char temp[2*MAX_NUMBER];
unsigned int i;
size_t len;
size_t lens;
len = strlen(y);
lens = strlen(solution);
if (lens > len) {
changeStr(y, solution);
len = strlen(y);
lens = strlen(solution);
}
for (i = 0; i < len; i++) {
yi = toInt(y[len-i-1]);
if (i < lens) {
si = toInt(solution[lens-i-1]);
} else {
si = 0;
}
tempi = yi + si + carry;
if (tempi > 9) {
carry = tempi / 10;
yi = tempi % 10;
} else {
carry = 0;
yi = tempi;
}
temp[i] = toChar(yi);
}
if (carry > 0) {
temp[i] = toChar(carry);
temp[i+1] = '\0';
} else {
temp[i] = '\0';
}
len = strlen(temp);
for (i = 0; i < len; i++) {
solution[i] = temp[len-i-1];
}
solution[i] = '\0';
}
void multiply(char* x, char* y, char* solution) {
size_t len;
unsigned int i;
char temp[2*MAX_NUMBER];
eraseNewLine(x);
eraseNewLine(y);
eraseNulls(x);
eraseNulls(y);
solution[0] = '0';
solution[1] = '\0';
len = strlen(y);
for (i = 0; i < len; i++) {
multiplyWithOneChar(y[len-i-1], x, temp);
addNulls(i, temp);
add(temp, solution);
}
}
int main() {
char first[MAX_NUMBER];
char second[MAX_NUMBER];
char solution[2*MAX_NUMBER];
fgets(first, MAX_NUMBER, stdin);
fgets(second, MAX_NUMBER, stdin);
multiply(first, second, solution);
printf("%s\n", solution);
return 0;
}és a második esett az ahol, a második számjegyig végig adja ki a nullákat, az elsőre(ezt nem írtam fentebb) és másodikra jó!
-
Jester01
veterán
Na hát a baj az, hogy a második szám összes jegyét végigszorozza nullával, és ezért lesz annyi nullád. Ha más probléma nincs, akkor egyszerűen speciális esetként lehet kezelni ha bármelyik szám 0, és simán 0-t írni ki.
Egyébként én személy szerint inkább úgy csinálnám, hogy egyáltalán nem törődnék a nullákkal csak a legvégén a kiírásnál szépen elhagynám őket. A szorzást abszolúte nem zavarja, ugye, csak kicsit tovább tart.
Jester
-
blaces
tag
-
Jester01
veterán
-
cellpeti
veterán
Sziasztok!
ComputerBooks: Programozzunk C nyelven című könyv CD mellékletét keresem még mindig!
Tigris, tigris, csóvafény...
-
cellpeti
veterán
Sziasztok!
Kellene nekem egy kis segítség!
Ez a feladat,nem teljesen világos:/* ROMAI.C */
#include <stdio.h>
#include <conio.h>
main()
{
int x,y;
y=1;
printf("\nR˘mai sz mok (1..2000):\n");
printf("b rmely billenty– le�t‚se sz�ks‚ges\n");
do {
x=y;
printf("%4d : ",x);
while (x>=1000){ printf("M"); x=x-1000;}
if( x>=900) { printf("CM"); x=x-900; }
if( x>=500) { printf("D"); x=x-500; }
if( x>=400) { printf("CD"); x=x-400; }
while (x>=100){ printf("C"); x=x-100;}
if( x>=90) { printf("XC"); x=x-90; }
if( x>=50) { printf("L"); x=x-50; }
if( x>=40) { printf("XL"); x=x-40; }
while (x>=10){ printf("X"); x=x-10;}
if( x>=9) { printf("IX"); x=x-9; }
if( x>=5) { printf("V"); x=x-5; }
if( x>=4) { printf("IV"); x=x-4; }
while (x>=1){ printf("I"); x=x-1;}
printf("\n");
if( y == 40) getch();
if( y == 100) getch();
if(y<20) y+=1;
else
if(y<100) y+=10;
else y+=100;
}
while (y <=2000);
}
�Tigris, tigris, csóvafény...
-
Dirty_Pio
csendes tag
Sziasztok! Ki kellene szamolnom az Euler fele szam adott hatvanyat. Rekurzioval oldottam meg a dolgot:
#include <stdio.h>
int ex(int n, int x)
{
if (n>0) return x*ex(n-1,x);
else return 1;
}
int fact(int n)
{
if (n>0) return n*fact(n-1);
else return 1;
}
float xex(int n, int x)
{
float q;
if (n>0) {q=(float)ex(n,x)/fact(n);
printf("%f \n",q);
return q+xex(n-1,x);
}
else return 1;
}
int main(void)
{
int x,n;
scanf("%d",&x);
printf("%f",xex(x,x));
system("pause");
return 0;
}Amint latjatok, a Taylor polinom ahsznalataval probaltam megoldani a dolgot, de az eredmeny hibas. Tudnatok segiteni?
-
Dirty_Pio
csendes tag
válasz Jester01 #943 üzenetére
Szoval ha ki szeretned szamitani az Euler-fele szam egyik x-ik hatvanyat( e^x -t ), akkor az a dolgod, hogy veszed a Taylor fele felbontasat a szamnak, ami lenyegebe a megoldas: e^x=1+e^1/1!+e^2/2!+e^3/3!+... egeszen egy megfeleloen nagy szamig. Es magyarazas kozbe ra is jottem mi is a problema, azaz en nem valasztottam eleg nagy szamot azaz enm eleg pontos az osszegem, mivel az elso x db szamot vettem igy ha mondjuk az e^4-t szeretnem kiszamolni csak az osszeg elso 4 tagjat veszem, es a kovetkezo szamok nem eleg kicsik ahhoz, hogy lehanyagolhato legyen. A kodban a kovetkezo javitasokat eszkozoltem :
#include <stdio.h>
int ex(int n, int x)
{
if (n>0) return x*ex(n-1,x);
else return 1;
}
int fact(int n)
{
if (n>0) return n*fact(n-1);
else return 1;
}
float xex(int n, int x)
{
float q;
if (n>0) {q=(float)ex(n,x)/fact(n);
// printf("%f \n",q);
return q+xex(n-1,x);
}
-->>else return 0;<<-- mivel igy ketszer szamolna a 0 faktorialist h
}
int main(void)
{
int x,n;
scanf("%d",&x);
->>printf("%f",xex(32,x)); <<- ennyit bit meg a float vagy a memoria... ha nagyobb pontossaggal probalkozok akkor errort kapok. Mondjuk igy sem olyan pontos a szamitas, mint amilyent a google mutat, de azt hiszem nincs mar mas hiba. Ha ti talaltok szoljatok!
system("pause");
return 0;
} -
Dirty_Pio
csendes tag
Sziasztok, mi itt a baj, a file ugy nez, ki, hogy az elso sorban a sorok(oszlopok) szama van es a tobbiben emg szunettel elvalasztva a matrix elemei.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *f;
int n,i,j;
if ( !(f=fopen("input.in","r")) ) {
printf("no input file found");
exit (1);
}
fscanf(f,"%d",&n);
int x[n][n];
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
fscanf(f,"%d",x[i][j]);
//fgetc(f); - ez kell-e az enter beolvasasara? Ha hagyom ugyse megy szoval ki kene segitsetek.
}
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
printf("%3d",x[i][j]);
printf("\n");
}
close(f);
system("pause");
return 0;
} -
mm779
tag
Hali.
Gyors segítség kellene éppen házit írok.Hogyan tudok átadni többdimenziós tömböt függvénynek cím(referencia) szerint C++ -ban?
(ezt a többdimenziós tömböt fel szeretném tölteni adatokkal a függvényben)A feltöltött tömböt ki is szeretném íratni cout << -al. Ez megoldható alapból, vagy át kell definiálni a << operátort ?
ui: bocsi, hogy c++ -ból kérdezek, de talán ugyan így működik c-ben is.
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- ASUS RT-AC87U
- Kerékpárosok, bringások ide!
- Asus ROG Phone 8 Pro - az élet nem csak játék és mese
- Samsung Galaxy Watch (Tizen és Wear OS) ingyenes számlapok, kupon kódok
- Battlefield 2042
- Az USA beperelte az Apple-t: túl drágák az iPhone-ok
- Milyen okostelefont vegyek?
- Autós topik
- Vigneau interaktív lokálblogja
- Apple asztali gépek
- További aktív témák...