- Iszonyatos mennyiségű hulladékkal járhat a Windows 10 terméktámogatásának vége
- Szünetmentes tápegységek (UPS)
- Házimozi belépő szinten
- Forrmell.enn
- Azonnali notebookos kérdések órája
- 3 nm-es node-on készül a Zen 5?
- Házi barkács, gányolás, tákolás, megdöbbentő gépek!
- Melyik tápegységet vegyem?
- Vezetékes FEJhallgatók
- AMD Navi Radeon™ RX 9xxx sorozat
Új hozzászólás Aktív témák
-
n00n
őstag
Újabb probléma. Ecplise és Ubuntu alatt programozok, viszont nem tudom a pow() függvényt életre kelteni.
#include <math.h>
float c;
c = pow(3, 2);Ezt a hibát kapom:
undefined reference to `pow'Próbáltam már az #include <cmath>-ot is, nem találja. Próbáltam már a GCC linkernek megadni a -lm opciót, de ugyanúgy nem jó. Valakinek ötlet?
-
n00n
őstag
Sziasztok!
Lenne egy ilyen kódom:
#include <stdio.h>
#include <ctype.h>
void main(void)
{
int i;
char szoveg[14];
printf("Adjon meg egy maximum 15 karakter hosszú szöveget:\n");
fflush(stdin);
gets(szoveg);
for(i=0; i < 14; i++)
{
if(isalpha(szoveg[i]))
{
szoveg[i] = "a";
}
}
puts(szoveg);
}De mégsem működik. Lecseréli azt a tömb elemet amit kell, de egy zagyva karakterre (fekete rombusz, fehér kérdőjel benne). Valakinek ötlet, hogy mi lehet a hiba?
-
Jester01
veterán
válasz
Hujikolp #2795 üzenetére
Nem mindegy, csak a <= a helyes.
A for-ban nem felsorolás van, ott a vessző mást jelent (operátor). Egyik részben sem kötelező semmit megadni. Az első kifejezés a ciklus előtt értékelődik ki egyszer, a második a ciklusban maradási feltétel, minden iteráció előtt fut, a harmadik pedig minden iteráció után. -
Hujikolp
őstag
válasz
Jester01 #2794 üzenetére
Köszönöm mindkettőtöknek!
egyébként az mindegy, hogy =< vagy <= ?
a for fügvényben, az első kifejezéshez csak azokat a változókat kell felsorolni, amik a feltételhez szükségesek? mert én azért tettem bele az nn-t mert szerepel a függvényben. De gondolom, akkor ez nem szükséges? -
Jester01
veterán
válasz
Hujikolp #2792 üzenetére
Pedig elég egyértelmű a hibaüzenet. A % operátor csak egész típusra működik, neked meg float van.
Korcsii: hajnali kettőkor már elnézzük hogy a xor-t valahogy idekeverted
Hujikolp: a feladatra egyszerűbb megoldás lenne a négyzetszámokon végigmenni 100-ig. count = 0; for(i = 1; i * i < 100; ++i) count++;
sokadik mod: ja persze ha konkrétan kétjegyű kell, akkor 4-től nézni.
-
Korcsii
őstag
válasz
Hujikolp #2792 üzenetére
A maradékképzés (xor) általában két egész szám között van, és azért warningol, mert az egyik float. Viszont a math.h-ban van egy olyan függvény, hogy fmod(a,b); /* még soha nem használtam */ Mondjuk math.h nélkül is 3 sor.
Még annyi, hogy az nn-nek mi a szerepe a for-ban?
-
Hujikolp
őstag
Üdv!
Maradék képzéssel nem jutok dűlőre.
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main()
{
float c,as=0;
int n=100,sum=0,nn=1;
for(c=10,sum=0,nn; c<n; c++)
{
as=sqrt(c);
as=(as%nn);
sum++;
}
return 0;
}C:\Users\Hujikolp\c\Hujikolp\2 jegyu negyzetszamok.c|13|error: invalid operands to binary % (have 'float' and 'int')|
kicsit kusza a kód még, csak a maradékos dolgot akarnám működésre bírni, de nem engedi sehogysem. Sima c-ben, code::blocks programmal.
Majd egy olyat kellene megoldani, hogy a kétjegyű számok között hány négyzetszám van. Arra gondoltam, hogy a számból gyököt vonok, majd maradék számítással eggyel elosztom, ha 0, akkor négyzetszám, ha nem, akkor nem.
-
Jester01
veterán
válasz
Feribacsi555 #2788 üzenetére
Ahogy említették szabvány C-nek ilyen függvény nem része, ez platformfüggő. Windowson nyilván a windows api cuccokat kell használni, pl. SetConsoleTextAttribute (példaprogram ugyanott)
-
kingabo
őstag
Ez a szabványos c-ben nincs benne, a Borland tette bele a turbo c-be (meg pascalba), tudtommal.
Feribacsi555 :Ezzel tehetsz egy próbát: changing text color in c
-
kltz
tag
válasz
Feribacsi555 #2788 üzenetére
Nem tudom ,mert én csak turbo c-ben fordítok ansi c progikat abban hibátlanul megy. De úgy tudom ,hogy a visual c nem tudja kezelni a conio.h fejfájlt.
-
Feribacsi555
senior tag
Hali!
Nekem valahogy nem megy.
Így néz ki a program eleje:#include <conio.h>
#include <stdio.h>
#include <ctype.h>void main ()
{
float af, bar, bef, afg, gear, gvf, spor, bear, a;
textcolor(2);
cprintf("Megeri-e program v2.0-Feribacsi");Na erre a visual c ezt dobja ki:
error C3861: 'textcolor': identifier not foundVmit rosszul csináltam?
-
kltz
tag
válasz
Feribacsi555 #2786 üzenetére
Hello!
A conio.h tartalmazza csak ugye megadod ,hogy textcolor(2) és utánna cprintf()-el íratod ki amit szeretnél.
-
Feribacsi555
senior tag
Sziasztok!
Úgy döntöttem, hogy önszorgalomból nekilátok a c nyelvnek. Ilyen alap szinten írtam már 1-2 programot, de tényleg nagyon alap, gyakorlatilag csak printf és scanf van benne.
Most írtam egy progit, ami elég sok mindent ír ki és egy idő után összefolyik.
Kerestem neten elég sokat, de nem igazán találtam megfelelő függvényt. Színesíteni szeretném a szöveget. De nem mindegyik sort csak 1-2-t.
Én ezt találtam hozzá:
textcolor();
Viszont ezt nem bírja definiálni az alábbiakból:
#include <conio.h>
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <windows.h>Tud valaki segíteni?
Köszi előre is! -
Lacces
őstag
Sziasztok!
Lenne egy kis problémám, hogy megfelelőlen olvassam be a mátrixokat és vektorokat, illetve írassam ki.
Pelda input:
4
0 1 −2 4
1 −3 0 2
4 2 −28 1
−1 0 1 1
2
3 0 −21 1
1111
4
−1 −2 0 1
2401
1314
3 8 2 −2
2
−2 7 9 11
2.34 1.245 −3.4 1.234
3
2 3 1.2
2.4 1.6 2.44
−4.6 −10.1 2.34
1
−1.7 5.96 27.21
0Pelda output:
1.00000000 1.00000000 1.00000000 1.00000000
-0.92063492 -0.46031746 -0.19047619 0.26984127
szingularis
1.10000000 −2.50000000 3.00000000szingularis, a második mátrixokra vonatkozik.
Az a baj, hogy néha a bemenet 33-as mátrix, így igen csak gondban vagyok, hogyan lehetne megoldani a main-ben, már próbáltam többszörösen is iterálni a main()-t de nem jött össze.
Valakinek van rá megoldás? Tényleg csak ennyin múlik az egész, ezzel küzdök már 1 napja.#include <stdio.h>
#include <math.h>
#include <stdlib.h>
void inMatrix(int n, double **matrix)
{
int j, i;
for (i = 0; i < n; i++)
{
for (j= 0; j < n; j++)
{
scanf("%lf", &matrix[i][j]);
}
}
}
void inVector(double *vektor, int n)
{
int k;
for (k = 0; k < n; k++)
{
scanf("%lf", &vektor[k]);
}
}
void outVector(double *vektor, int n)
{
int k;
for (k = 0; k < n; k++)
{
printf("%.8lf ", vektor[k]);
}
}
void lup(int n, double **A, double *b)
{
int *Permutation = (int*)malloc(sizeof(int)*n);
int i,j;
double *max = (double*) malloc (sizeof(double)*n);
int m=0, p=0;
int tmp=0, tmp2=0;
int t=0, isSingular=0;
double largestElement=0.0;
double *helpVector = (double*) malloc (sizeof(double)*n);
double *helpVectorA = (double*) malloc (sizeof(double)*n);
double *helpVectorB = (double*) malloc (sizeof(double)*n);
for(i=0; i<n; i++)
Permutation[i]=i;
for(m=0; m<n-1; m++)
{
for(i=m; i<n; i++)
{
max[i]=fabs(A[i][m]);
}
for(i=m; i<n; i++)
{
if(max[i]>largestElement)
{
largestElement=max[i];
p=i;
}
}
for(i=0; i<n; i++)
{
helpVectorA[i]=A[m][i];
helpVectorB[i]=A[p][i];
}
for(i=0; i<n; i++)
{
A[m][i]=helpVectorB[i];
A[p][i]=helpVectorA[i];
}
tmp=Permutation[m];
tmp2=Permutation[p];
Permutation[m]=tmp2;
Permutation[p]=tmp;
if(fabs(A[m][m])>0.00000000000000001)
{
for(i=m+1; i<n; i++)
{
A[i][m]=A[i][m]/A[m][m];
for(j=m+1; j<n; j++)
{
A[i][j]=A[i][j]-A[i][m]*A[m][j];
}
}
}
if(fabs(A[m][m])<0.00000000001)
{
printf("szingularis\n");
isSingular=1;
break;
}
for(i=0; i<n; i++) max[i]=-1;
largestElement=0.0;
p=m+1;
}
if(isSingular==0)
{
if(fabs(A[n-1][n-1])<0.00000000001)
{
printf("szingularis\n");
isSingular=1;
}
}
if(isSingular==0)
{
for(i=0; i<n; i++)
{
t=Permutation[i];
helpVector[i]=b[t];
}
for(i=0; i<n; i++)
{
b[i]=helpVector[i];
}
for(i=1; i<n; i++)
{
for(j=0; j<i; j++)
{
b[i]=b[i]-A[i][j]*b[j];
}
}
for(i=(n-1); i>=0; i--)
{
for(j=(i+1); j<n; j++)
{
b[i]=b[i]-A[i][j]*b[j];
}
b[i]=b[i]/A[i][i];
}
}
}
int main()
{
int k, v,n;
int loop;
double **A;
double *b;
// read dimension of matrix and value
scanf("%d", &n);
//matrix
A = (double **) calloc(n, sizeof ( double*));
//vector
b = (double *) calloc(n, sizeof ( double));
loop=1;
while(n!=0)
{
for (k = 0; k < n; k++)
A[k] = (double *) calloc(n, sizeof ( double));
// read values of matrix
inMatrix(n, A);
// read values of vector
scanf("%d", &v);
for(k=0;k<v;k++)
{
inVector(b, n);
lup(n,A,b);
}
for(k=0; k<v;k++)
{
outVector(b, n);
printf("\n");
}
//free(matrix[k]);
loop++;
}
return 0;
} -
eriktoth
tag
Üdv!
Olyan kérdésem lenne, hogy stdin, és getchar segítségével hogy lehetne valami nagy számot beolvasni? -
n00n
őstag
http://itcafe.hu/hir/elhunyt_dennis_ritchie_c_programnyelv_unix_bell_la.html
R.I.P.
-
Korcsii
őstag
srand( (unsigned)time (NULL) );
num1 = rand()%7001+1000;Az elvet értsd meg, utána menni fog: a rand() egy 0-sok közötti számot generál. Ha megnézed ennek mondjuk 10-es maradékos osztását, akkor ugye a maradék 0-9. Ha hozzá adsz 1-et, akkor 1-10. Szóval előbb megcsinálod a tartományt, aztán eltolod valamennyivel valamerre...
-
n00n
őstag
Még egy utolsó láma kérdés és ígérem mára befejezem.
srand( (unsigned)time (NULL) );
num1 = rand()%10+1;Úgy így gyárt egy véletlen számot 1 és 10 között.
Viszont mi van, ha nekem 1000 és 8000 között kell pl.
Ilyet találtam, de szerintem ez nem jó:
srand( (unsigned)time (NULL) );
num1 = 1000 + rand()% (8000 - 1000); -
klambi
addikt
szevasztok!
dev-c ben olyat szeretnék hogy 1 txt ben megszámolja hány a, b vagy bármilyen más betű van és txt fájlba írást? -
n00n
őstag
Sziasztok!
Kellene egy kis segítség. Kettő 1 és 10 között lévő véletlen számot kellene generálnom egymás után többször:
do{
num1 = rand()%10+1;
num2 = rand()%10+1;
printf("A véletleszámok: %d és %d.", num1, num2);
szamlalo++
}while(szamlalo < 5);Ez a kódom, viszont itt a program minden lefutásakor ugyanazok a számokat generálja:
7, 1
3, 1
7, 8
6, 6
9, 7De miért?
-
eriktoth
tag
Üdv!
Olyan gondom lenne, hogy bemenetre meg kell adni egy hatalmas nagy számot ami másodpercben van és a programnak ezt fel kellene bontania hetekre,napokra,órákra,percekre
valakinek esetleg valami ötlet, hogy hogy lehetne megoldani előre is köszönöm -
chabeee
aktív tag
válasz
PetyaMIK #2766 üzenetére
progalap házi HAHAHA
amúgy itt egy megoldás hozzá:
#include <stdio.h>
#include <string.h>
int main () {
char nev[30];
char tomb[100][30];
int i=0;
int counter=0;
int max=0;
int hossz;
int tomb2[100];
do{
printf("%d. name: ",i+1);
scanf("%s",nev);
if(nev[0] != '*') {
strcpy(tomb[i], nev);
printf("length: ");
scanf("%d", &hossz);
tomb2[i] = hossz;
}
i++;
counter++;
}while(nev[0] != '*' && i<100);
for(i=1; i<counter-1; i++){
if(tomb2[i]>tomb2[max]){
max=i;
}
}
printf("A leghosszabb kigyo %s, aki %d meteres. \n",tomb[max],tomb2[max]);
return 0;
} -
PetyaMIK
csendes tag
válasz
robotjatek #2765 üzenetére
Jester1 köszönöm a segítséget - remekül fut a program mostmár
- a végtelen ciklust elkerültem úgy hogy index-1 - de köszönöm hogy figyelmeztettél valószinüleg elég sokat kellett volna rajt agyalnom
...
kingabo: megfogadom a tanácsot
- próbáltam spacekkal tagolni - de nem engedte...
- nemtudtam ill. nem figyeltem hogy így megy ... Köszönöm!
Comrade92: Pontosan PE
- elsőéves vagyok most.
-
kingabo
őstag
válasz
PetyaMIK #2762 üzenetére
Helló!
Jester01 észrevételein felül, while-ba kéne még egy feltétel, hogy ne kérhesd be a 101-edik értéket. Illetve kiíratásnál használhatod az index+1-et is, így nem lesz szükséged az Edik változóra.
Ja és egy kérés legközelebb a kód beillesztése után jelőld ki a kódot és nyomd meg alul a Programkód gombot, úgy nem fognak a tabulálások elveszni.
-
Jester01
veterán
válasz
PetyaMIK #2762 üzenetére
A kigyok az kétdimenziós karakter tömb, vagy ha úgy tetszik egydimenziós string tömb. Ezért nem jó a kigyok[index] != '*', hiszen a bal oldal az char* a jobb oldal meg char. Egy lehetséges megoldás, ha a jobb oldalból is stringet csinálsz, és a megfelelő összehasonlítást alkalmazod: strcmp(kigyok[index], "*") != 0
MOD: Továbbá a ciklus vége előtt már növeled az index értékét, így a while feltétel már másik elemet vizsgál. Egyszerűbb lenne, ha a ciklusmagban lévő if feltétel break használatával kilépne a ciklusból, ami amúgy végtelen lenne.
MOD #2: ja és ha csak a leghosszabb kígyót kell kiíratni, akkor teljesen fölösleges mindet eltárolni egy tömbben.
-
PetyaMIK
csendes tag
Sziasztok,
Egy kis segítségre lenne szükségem ...
Nemrég kezdtem tanulni a C nyelvet - kaptam most egy házit ami úgy nézem kifog rajtam ...#include <stdio.h>
int main(){
char kigyok[100][100];
int hosszak[100];
int hossz, index, Edik, legnagyobbHossz, EAdik;index = 0;
Edik = 1;
legnagyobbHossz = 0;
EAdik = 0;do {
printf("%d. kigyo neve? ", Edik);
scanf("%s", kigyok[index]);
if ( kigyok[index] != '*') {
printf("%s hossza? ", kigyok[index]);
scanf("%d", &hosszak[index]);
if ( legnagyobbHossz < hosszak[index]){
legnagyobbHossz = hosszak[index];
EAdik = index;
}
}
index++;
Edik++;
} while ( kigyok[index] != '*');printf("A legnagyobb kigyo %s, aki %d meteres", kigyok[EAdik], hosszak[EAdik]);
return 0;
}a while -ban lévő feltétel nem tetszik neki... - valaki tudna segíteni ?
// a feladatban az van megadva hogy amikor a névnek csillagot adunk meg akkor befejezi a beolvasást és kiírja a leghoszabb kigyót és annak hosszát ... ( ha több egyorma hosszú van akkor azt amelyiket előbb írtam be ... //A segítséget előre is köszönöm!
-
Korcsii
őstag
Egy érdekes kérdés, bár végül lehet mégis maradok a nem szép megoldásnál...
sleep() nélkül, hogyan érdemes valamit időzíteni? Mondjuk ha 3-4 perc elteltével is 1 másodpercen belüli hibahatárral akarunk számolni, és mondjuk egy másodperc alatt több dolgot is szeretnénk időzíteni - mondjuk 128-at vagy 256-ot.
-
chabeee
aktív tag
válasz
Korcsii #2756 üzenetére
igen ez utólagos próbálkozás volt, és ez kimaradt, de közben én is észre vettem, de még sajnos mindig kifagy.
@jester
másolási hiba,amugy nekem a fordító nem ir ki semmilyen fajta segítséget, lehet a mingw helyett vmit mást kéne feldobni ha egyáltalán ez okozza ezt a hibát -
Jester01
veterán
válasz
chabeee #2755 üzenetére
Hiányzik egy ; a return 0 után, ez gondolom másolási hiba különben nem is fordul. Ezen felül a fordító segítő üzeneteit ne hagyd figyelmen kívül:
t.c: In function 'beolvas':
t.c:19: warning: format '%d' expects type 'int *', but argument 2 has type 'unsigned int'
t.c:21: warning: format '%lf' expects type 'double *', but argument 2 has type 'double'
t.c:24: warning: format '%d' expects type 'int *', but argument 2 has type 'int'Azt próbálja neked mondani, hogy a scanf hívásokban pointert kell átadni, vagyis:
scanf("%d",(unsigned int)t[i].gyev);
-helyett-
scanf("%d",&t[i].gyev);
(annak a castnak amúgy sem volt semmi értelme)Hasonlóan a többire is.
Korcsii: a hiba attól még nem tűnik el. Bár a %u ettől még jó javaslat.
-
chabeee
aktív tag
sziasztok
eclipse után code::blocksban próbálok programozni, de nem tudom hogy miért fagy ki a progi már az első adatbevitelnél:#include <stdio.h>
typedef struct mystruct {
unsigned int gyev;
int all; //1 - uj, 2 - jo allopotu, 3 - hibas, 4 - totalkaros
double mkm;
}data;
void beolvas (data t[], int n)
{
int i;
printf("BEKERES: \n\n");
for (i=0;i<n;i++)
{
printf("kerem a(z) %d. auto adatait: \n",i+1);
printf("gyartasi ev: \n");
scanf("%d",(unsigned int)t[i].gyev);
printf("megtett kilometer: ");
scanf("%lf",t[i].mkm);
//_flushall();
printf("allapot: ");
scanf("%d",t[i].all);
//_flushall();
}
printf("--------------\n");
}
void kiirat (data t[], int n)
{
int i;
printf("KIIRATAS: \n\n");
for(i=0;i<n;i++)
{
printf("A(z) %d. auto adatai: \n\n",i+1);
printf("gyartasi ev: %d\n", t[i].gyev);
printf("megtett kilometer: %lf\n", t[i].mkm);
printf("allapot: %d\n", t[i].all);
}
printf("--------------\n");
}
int main(){
const int n=10;
data tomb[n];
beolvas(tomb,n);
kiirat(tomb,n);
return 0
}a választ előre is köszi
üdv. Csabi -
chabeee
aktív tag
hali
ubuntu alatt valgrindelni szeretnék terminálban, csak nem tudom a megfelelő szintaktikáját valaki tudna ebben segíteni? -
kingabo
őstag
válasz
Barett 50cal #2751 üzenetére
Olvass vissza pár hsz-t, ehhez nagyon hasonló dologról volt szó.
-
Barett 50cal
senior tag
Hogy tudom megakadályozni, hogy ha a progimba csak számokat irhatok(számologép), de én pl beirok egy betűt vagy 'asd'-ot, akkor ne omoljon össze, neugráljon az egész megstb...
valami parancs.. vagy if(vmi==(szöveg)) akkor ujra kezdje.a szöveg mi C++? mia megfelelelője?
-
kingabo
őstag
válasz
Rickazoid #2745 üzenetére
Ahogy Jester01 ajánlotta sort olvass be, amit az atoi-val (ascci to int) alakíts át számmá és ennek az eredményét vizsgáld a switch-ben. Elötte persze ellenőrizni kell, hogy mit adott vissza az atoi: pl 11a esetén 11-t, a esetén 0-t (de 0 esetén is 0-t ad vissza, ami jó!), ilyenkor nyilván újra be kell kérni.
-
Rickazoid
addikt
válasz
Jester01 #2744 üzenetére
Értem már! Windows alatt ezt egy _flushall() megoldja, de Linux alatt nem ismeri, és ahogy nézem Google-ben, nem is létezik hasonló. Vagy igen?
Egyelőre viszont akkor megoldottam úgy, hogy if(c!='\n'), ebbe ment a switch, utána pedig bekerült egy while(getc(stdin)!='\n'){}, így csak az első karakter marad.
Nem szép és nem dolgoz fel több karaktert, hogy azt is visszajelezze hibás megadásként, de ezzel megkerültem a hibát. Persze jó kérdés mi lenne akkor, ha egy stringet kéne így feldolgoznom. Próbáltam átírni úgy, de valamiért minden karaktere a string-nek (null) lett. De erről még úgyis olvasok később, egyelőre egy karakter elég. -
Jester01
veterán
válasz
Rickazoid #2743 üzenetére
De, a te C kódodat futtattam. Egy debuggert mihamarabb meg kellene tanulnod, mert azzal tudod a saját programhibáidat felderíteni. gdb-ben nagyjából 8 paranccsal kiválóan el lehet boldogulni (break, run, step, next, continue, print, x, exit) vagy használhatsz valamilyen grafikus felületet.
Jelen esetben abba futottál bele, hogy a standard input az soronként pufferelt továbbá a getchar szorgalmasan visszaadja a sorvég jelet is. Én például azt írtam be, 5<enter>. Ezt a gép úgy dolgozza fel, hogy az első getchar hívásnál látja, hogy nincs semmi a bemeneti pufferben, tehát beolvas egy egész sort, majd visszaadja az első karaktert (az 5-öt). Erre lefut a switch-ed majd visszamegy a ciklus miatt a getchar-hoz. Ezúttal viszont van még a pufferben valami, mégpedig a sorvég jel, tehát a getchar nem vár és azt adja vissza. Ez ismétcsak a default ágra jut. Hasonló történik akkor is ha másik ágra futsz, a pufferben még mindig benne lesz a sorvég illetve bármi amit a felhasználó még elé írt. Ezt a következő beolvasás vissza is fogja adni.
Ezért tehát mindig célszerű a teljes sort beolvasni majd igény szerint feldolgozni. Például mi legyen, ha a felhasználó 11-et ír be.
-
Rickazoid
addikt
válasz
Jester01 #2742 üzenetére
Azt hiszem fogalmam sincs, hogy mit is írtál, de azt látom, hogy nem C kód, debuggerekről meg eddig csak hallottam (és még érthető leírás sincs semelyik használatáról sehol). C-vel sem volt dolgom múlt hétig, csak Turbo Pascallal és Pythonnal (előbbiből emelt szintű érettségiig, utóbbival autodidakta módon), de sose használtam semmilyen debuggert.
Szóval ebben a formában ha csak nem adsz egy leírást a debbuggerek használatáról az alapoktól, nem veszem hasznát egy breakpointnak.
Egyébként megnéztem a gdb-t, de magas.Arra viszont rájöttem, hogy ha a default eset fut le, a c értéke kiürítődik ahelyett, hogy bekérné a getchar() és emiatt a második default futás, hisz a c üres. De hogy az elsőnél miért ugorja át a getchar()-t, azt lenne jó tudni. A c értéke ettől független, az egészen addig a pontig pont annyi, amit a getchar() bekér, amíg a default eset végre nem hajtódik, ott válik valahogy üressé (nincs törlésre utasítás, sőt ha értéket adok neki a printf előtt, akkor az az érték megmarad, de mégis duplán fut a ciklus), majd a ciklus újrafutása mellőzi a getchar()-t. Az alapján, amit a programozásról tudok, ez lehetetlen, egy program nem hagyhat ki csak úgy parancsokat, ha csak utasítást nem kap rá. De itt nincs ilyen, a default esettel vissza kéne mennie a ciklus elejére, ahol a getchar()-nak ismét kérnie kéne a karakterét. De ez nem történik meg egyszer, csak második futásra.
-
Jester01
veterán
-
Rickazoid
addikt
Írnék egy C programot, de van egy hiba, aminek nem találom az okát már vagy másfél órája.
Itt a forrás (egyelőre csak egy példa, úgymond vázlat program, erre épülne majd egy jóval bonyolultabb):...
int b=1;
char c;
...
while(b==1)
{
c=getchar();
switch(c)
{
case '1':
{
i=1;
printf("The number is %i\n",i);
b=0;
break;
}
case '2':
{
i=2;
printf("The number is %i\n",i);
b=0;
break;
}
case '3':
{
i=3;
printf("The number is %i\n",i);
b=0;
break;
}
case '4':
{
i=4;
printf("The number is %i\n",i);
b=0;
break;
}
default:
{
printf("That is not a menu option, please try again: ");
b=1;
break;
}
}
}A problémám az lenne, hogy a default parancsai duplán hajtódnak végre. Mindig duplán írja ki a "That is not a menu option, please try again: " szöveget. Megpróbáltam írni a getchar() elé és mögé egy szöveget printf-fel, de a defaultra azokat is duplán írta ki, jól láthatóan egyszer átugrotta a getchar()-t. Próbáltam kivenni a ciklusból a ciklus elé és újra betenni a defaulthoz, de úgy is szimplán átugrotta egyszer. Nem értem, de nagyon nem. Próbáltam getchar() helyett scanf()-et is, de azt is átugorja egyszer, így annál is dupla lesz a default végrehajtódása. Mitől lehet ez?
-
acc200
tag
válasz
bucsupeti #2737 üzenetére
1/5. feladat
Készítsen programot, amely kiszámítja a henger felszínét és térfogatát, ha adott a henger magassága és az átmérője. Nézze meg a HELP-ben és használja az M_PI rendszer konstansot !Nem tudtam sajnos magamtól, vagyis az M_PI-t sejtettem, a math.h-nak utánaolvastam.
A négyzetes dolog nem lett volna kötelező, de most igazából szerintem mind1, hogy ezt most tanultam meg, vagy később vmikor.. Eddig 1 gyakorlatom volt, meg 2 előadás.. -
bucsupeti
senior tag
Picit értetlenül állok a kérdéseid előtt. Ha 3-4 napja tanulod, akkor lehet hogy inkább algoritmus szintjén kell meghatározni a hatványt és a pi értékét?
Standard C-ben a math.h tartalmazza ahogy olvashattad. Nemtudom hogy ez mond-e neked valamit (3-4 nap után nem tudom hogy az #include-ot tanultátok-e)
Algoritmus szintjén pedig triviális. (Összeszorzod az alapot annyiszor amennyi a kitevő. A pi pedig a kerület és a sugár hányadosa.)
Persze a változók értékhatárai problémát okozhatnak. Lehet hoyg épp az a célja az oktatónak hogy ezt bemutassa.
-
acc200
tag
Sziasztok!
Elég kezdő vagyok még programozásban, pontosabban kb 3-4 napja kezdtük el..
Remélem jó helyre teszek fel 1-2 kérdést..
- hogyan lehet 1 szám valahányadik hatványát venni?
- hogyan lehet PI konstanssal számolni a program során?Egyelőre ennyi lenne!
Köszi előre is!
Üdv!
-
n00n
őstag
Ti milyen GUI-t használtok C programokhoz?
-
Gyuri16
senior tag
válasz
proof88 #2731 üzenetére
a fflush(stdin); se epp a legszebb dolog. idezet a szabvanybol:
#include <stdio.h>
int fflush(FILE *stream);Description
If stream points to an output stream or an update stream in which
the most recent operation was output, the fflush function causes any
unwritten data for that stream to be delivered to the host environment
to be written to the file; otherwise, the behavior is undefined.persze ez nem jelenti, hogy xy fordito nem implementalja, viszont ha forditofuggetlenek szeretnenk lenni, akkor illik nem hasznalni.
a masik dolog, hogy ezt altalaban scanf utan szokas hasznalni, mert az sok esetben otthagy valamit az input streamen. ha viszont egyaltalan nem hasznalunk scanf-et (ami szerintem jo otlet), nem kell a fflush se. -
RexpecT
addikt
Ez miért nem jó?
#include <stdio.h>
#include <stdlib.h>
void line(char ch, int n)
{
int i;
for(i=1;i<=n;i++)
printf("%c \n",ch);
}
int main()
{
line("-",50);
line("*",8);
system("PAUSE");
return 0;
} -
Gyuri16
senior tag
válasz
bucsupeti #2721 üzenetére
eulert nem ismerem, de ha programozos problemak kellenek akkor:
topcoder: tobb kategoriaban lehet versenyezni, en az algorithm-et probaltam. hetente vannak versenyek ahol 3 peldat kell megoldani ha jol emlekszem masfel ora alatt. ket kategoria van, a nehezebbik eleg durva
meg lehet nezni masok megoldasait, amibol sokat lehet tanulni. lehet a versenyen kivul is megoldani a peldakat, valaszthato nyelvek c++, c# es java
spoj ezt nem ismerem, de szoktak ajanlani, ez nem verseny, hanem kulonbozo nehezsegu feladatok gyujtohelye.
RexpecT: bignum library kell hozza, neten lehet talani, vagy irsz sajatot
-
RexpecT
addikt
n! means n (n 1) ... 3 2 1
For example, 10! = 10 9 ... 3 2 1 = 3628800,
and the sum of the digits in the number 10! is 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27.Find the sum of the digits in the number 100!
Hogyan tudok eltárolni egy ekkora számot?
-
n00n
őstag
Viszont csak nem akar működni a programom.
Elkezdtem C tanulni és azt tanácsolták, hogy mellette nézegessem a Project Euler oldalt. Ott akadtam el a negyedik feladatnál. Az eredmény 580085 lesz, amit nem fogad el az oldal (projecteuler.net). Mi lehet a probléma? (Lehet, hogy meg lehetne egyszerűbben és szebben is oldani, de kb. 2 hete C-zek, szóval ne bántsatok ezért.
)
/*
============================================================================
Name : pe4.c
Author : Ödön Tóth
Version : 1.0
Copyright : GPL
Description : Project Euler
A palindromic number reads the same both ways. The largest palindrome made from the product
of two 2-digit numbers is 9009 = 91 × 99.
Find the largest palindrome made from the product of two 3-digit numbers.
============================================================================
*/
#include <stdio.h>
int main()
{
int szam1=100, szam2=100, i;
long szamuj, szamuj_bal, szamuj_jobb, p1=0, p2=0;
for(szam1=100; szam1 <= 999; szam1++)
{
szamuj = szam1 * szam2;
//szétszedés
szamuj_bal = szamuj / 1000;
szamuj_jobb = ((szamuj % 10) * 100) + (((szamuj % 100) / 10) * 10) + ((szamuj % 1000) / 100);
if(szamuj_bal == szamuj_jobb)
{
p1 = szamuj;
}
for(szam2=100; szam2 <= 999; szam2++)
{
szamuj = szam1 * szam2;
//szétszedés
szamuj_bal = szamuj / 1000;
szamuj_jobb = ((szamuj % 10) * 100) + (((szamuj % 100) / 10) * 10) + ((szamuj % 1000) / 100);
if(szamuj_bal == szamuj_jobb)
{
p2 = szamuj;
}
}
}
if(p1 > p2)
{
printf("A keresett szám: %d", p1);
}
else
{
printf("A keresett szám: %d", p2);
}
return 0;
} -
n00n
őstag
Kellene még egy kis segítség, legalább, hogy merre induljak.
Adott egy szam, egy ujszam1 és egy ujszam2 változó.
Azt kellene elérni, hogy az ujszam1 a szam változó első három karaktere legyen.
Az uj szam2 az utolsó három karaktere, csak megfordítva.Pl:
(összesen hat karakteres a szam változó):
szam = 300003
ujszam1 = 300ujszam2 = 300 (a 003-ról megfordítva).
Valakinek ötlet? Tömbbel kell karakterenként beolvastatni? Vagy van egyszerűbb mód?
-
n00n
őstag
Sziasztok!
Van egy ekkora számom:
700.000.000.000 (7 billió ~ azt hiszem.)
Kérdésem ez mekkora változóba fér bele? Ennél nagyobb már nem lesz, csak kisebb (osztással).
-
RexpecT
addikt
Nekem is lenne itt egy feladatom:
A vb hangja
„KO-RE-A, KO-RE-A” – kiabálta 54 000 boldog futballszurkoló, miután csapatuk a hazai rendezésű világbajnokságon bejutott az elődöntőbe. Izgatottságuk dacára azonban a koreai emberek természetüknél fogva nagyon szervezettek. Például hatalmas, hajókürthöz hasonló hangú trombitákkal szurkoltak a pályán játszó csapatuknak. A szurkolók egy állandó zajszintet szeretnének fenntartani a meccs teljes ideje alatt.
A trombiták sűrített levegővel működnek, azonban ha 2 másodpercig folyamatosan fújják őket, elromlanak. Ezért amikor a trombita hangot ad, minden rendben van, de a trombitahangok szüneteiben a szurkolóknak a „KO-RE-A” kiáltást kell harsogniuk.
A mérkőzés előtt egy szurkolócsoport összegyűl és eldönti a kiáltás mintáját. A minta 0-k és 1-esek sorozata, amelyet a következőképpen értelmezünk: ha a minta 1-es, akkor a trombita kerül megfújásra, ha pedig 0, akkor a „KO-RE-A” kiáltás következik. Annak érdekében, hogy a trombiták nehogy elromoljanak, a minta nem tartalmazhat két egymást követő 1-est.
Ebben a feladatban tehát egy adott, pozitív egész n-re meg kell határozni az ilyen hosszúságú kiáltási mintákat, vagyis azon n bites sorozatok darabszámát, amelyek nem tartalmaznak egymás melletti 1-eseket. Például n = 3 esetén a megoldás 5 (a 000, a 001, a 010, az 100 és az 101 sorozatok elfogadhatóak, míg a 011, az 110 és az 111 nem).Input
Az első sor a tesztesetek számát tartalmazza. Az első sort követő sorok mindegyike egy-egy tesztesetet ír le. Minden teszteset egy olyan sor, amely egyetlen, 51-nél kisebb egész számot tartalmaz.Output
Minden teszteset kimenete egy olyan sorral kezdődik, amely a „Scenario #i:” szöveget tartalmazza, ahol i a teszteset sorszáma. A tesztesetek sorszámozása 1-től indul. Ezt követően egy újabb sorba kell kiírni az egymás melletti 1-eseket nem tartalmazó n bites sorozatok darabszámát. Minden teszteset kiírását egy üres sorral kell lezárni.Példa input
2
3
1Példa output
Scenario #1:
5Scenario #2:
2 -
Iszusz
csendes tag
válasz
jonaska #2696 üzenetére
Szia! Jó tanács, ha nem tudsz helyesen írni és megtanulni se már. Használd pl a Word nyelvi ellenőrzőjét.
Nem bántásból mondom nekem is mindig rossz volt a helyesírásom, habár a nyelvtani szabályokat tudtam. Tollbamondásra legjobb esetben is csak hármast kaptam.
Szóval, ha fontosabb helyekre vagy nyilvános helyre írok én is mindig Wordbe ellenőriztettem előbb.Így ebben a bejegyzésbe is legalább már 4 hibát kiszűrtem, de még ígyis maradt benne biztos.
Új hozzászólás Aktív témák
Hirdetés
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Diablo IV
- Iszonyatos mennyiségű hulladékkal járhat a Windows 10 terméktámogatásának vége
- Válságba taszíthatja Oregon államot az Intel leépítése
- Anglia - élmények, tapasztalatok
- Mibe tegyem a megtakarításaimat?
- Szünetmentes tápegységek (UPS)
- Házimozi belépő szinten
- Forrmell.enn
- Autós topik
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- További aktív témák...
- Bomba ár! Dell Latitude 5495 - Ryzen 5 I 16GB I 256SSD I 14" FHD I HDMI I Radeon I Cam I W10 I Gari!
- LG 32GS95UE - 32" OLED / UHD 4K / 240Hz - 480Hz & 0.03ms / 1300 Nits / NVIDIA G-Sync / AMD FreeSync
- Telefon felvásárlás!! iPhone 12 Mini/iPhone 12/iPhone 12 Pro/iPhone 12 Pro Max
- Xiaomi Redmi Note 14 Pro 256GB, Kártyafüggetlen, 1 Év Garanciával
- 129 - Lenovo Legion Pro 7 (16ARX8H) - AMD Ryzen 9 7945HX, RTX 4080
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest