Hirdetés

2024. április 25., csütörtök

Gyorskeresés

Hozzászólások

(#3001) WonderCSabo válasza vanek (#3000) üzenetére


WonderCSabo
félisten

Megírtam egy picit más megközelítéssel. Nem lehet, hogy a mainben rossz vmi? Én most már fáradt vagyok elemezni ezt a bonyolult problémát. :)

int vizsgal(char s1[], char d1[])
{
int i, j;
int b = 1;
for(i = 0; i<= strlen(s1)-strlen(d1); ++i)
{
for(j=0; j < strlen(d1); ++j)
{
if(s1[i+j-1] != d1[j])
{
b = 0;
break;
}
else
b = 1;

}

if(b)
return i-1;
}

return i-1;
}

(#3002) Jester01 válasza vanek (#2987) üzenetére


Jester01
veterán

Ez nagyon kreatívan megírt program. Ha ember bírálná el, nem sok jó származna belőle.

Mindenesetre a baj az fgets körül lehet, az ugyanis eltárolja a sorvég jelet is. Ezáltal egyfelől csak akkor találod meg a dolgokat ha az éppen a sor végén van, másfelől pedig a 255 hosszú sorokon elcsúszik a feldolgozás (és onnan már nem is jön helyre). Jelen formájában a feladatkiírásban lévő példára sem működik, nem értem ezt hogy nem vetted észre.

Jester

(#3003) WonderCSabo válasza Jester01 (#3002) üzenetére


WonderCSabo
félisten

Ezáltal egyfelől csak akkor találod meg a dolgokat ha az éppen a sor végén van

Miért is? Én lefuttattam a progit a kijavított keresőfv-el, megtalált mindent, ezzel nem volt gond. Nyilván 255-nél hosszabb stringekre nem próbáltam meg.

Egyébként a maint nem nagyon néztem, csak az algoritmust. :)

(#3004) Jester01 válasza WonderCSabo (#3003) üzenetére


Jester01
veterán

Nekem nem. Hol vágja le a sorvég jelet amit az fgets beolvas?

(gdb)
40 fgets(s,256,f);
(gdb)
41 fgets(d,256,f);
(gdb)
43 kimenet=vizsgal(s,d);
(gdb) x/s s
0x7fffffffe5d0: "abrakadabra\n"
(gdb) x/s d
0x7fffffffe4d0: "rak\n"

A vizsgal függvénynek meg kutya kötelessége az egész stringet nézni a lezáró 0-ig, vagyis a \n-t is. Így pedig csak a sor végén fog egyezni.

255-nél hosszabbra nem is kell működnie, de ez már 255-re sem működik, amire még kellene. A tesztelő meg lehet, hogy gonosz módon ki is próbálja azt.

Jester

(#3005) birno válasza vanek (#2999) üzenetére


birno
addikt

Becopyznád a jelenlegi teljes programodat?
Mert en most megneztem az eredeti kododdal, meg a javitasokkal is, de mar a linkelt pdf-ben szereplo peldat hasznalva is helytelen eredmenyt ad...
Meg milyen kornyezetben probaltad te ezt?
En egy kabinetes gepen futtattam s ott adott vissza rosszat s ugye a Biro is ugyanilyen kornyezetben futtattja majd.

Szerk: Latom Jester01 megelozott. :)

[ Szerkesztve ]

(#3006) WonderCSabo válasza Jester01 (#3004) üzenetére


WonderCSabo
félisten

Ja igen. Akkor működik, ha a második sor az uccsó. :) És ez volt a specifikáció. :P

[ Szerkesztve ]

(#3007) Jester01 válasza WonderCSabo (#3006) üzenetére


Jester01
veterán

Tévedés:

A bemenet két sorból áll. Mindkét sorban egy-egy szóközt nem tartalmazó, legalább egy de maximum 255 karakter hosszú sztring található, melyeket rögtön sorvégejel követ.

Mind a két sor végén kellene \n legyen. És akkor már nem működik.

Jester

(#3008) WonderCSabo válasza Jester01 (#3007) üzenetére


WonderCSabo
félisten

Bocs, nem tudok olvasni. Se.

(#3009) vanek válasza WonderCSabo (#3008) üzenetére


vanek
tag

közben letelt a határidő..

de van más problémám is..

szóval a feladatom a lineáris diofantoszi egyenlet..

próbálkoztam a megírásával..de nem sokáig jutottam..a legnagyobb közös többszörös még ment..de utána már problémám volt...be kell vallani, hogy nem könnyű program..

szerencsémre, vagy nem..de véletlen rátaláltam a kész programra..igaz, nem volt nehéz, mivel csak be kellett írnom..nah de a lényeg, hogy ,tanulva a hibámból megnéztem a példában szereplő példákat és mindegyik a helyes eredményt adja vissza..

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

#define HAMIS 0
#define IGAZ 1


int lnko(int x, int y) {
int maradek;
int temp;

if (y > x) {
temp = y;
y = x;
x = temp;
}

maradek = y;

while (y != 0) {
if ((x % y) == 0) {
break;
}
maradek = x % y;
x = y;
y = maradek;
}

return maradek;
}


void euklidesziAlg(int av, int bv, int* x0, int* y0) {
int i;
int szorzo[100];
int darab = 0;
int maradek;
int temp;
int avSeged;
int bvSeged;
int x0Seged;
int y0Seged;
int voltCsere = HAMIS;

avSeged = av;
bvSeged = bv;
if (bv > av) {
temp = bvSeged;
bvSeged = avSeged;
avSeged = temp;
voltCsere = IGAZ;
}

if (bvSeged != 1) {
do {
szorzo[darab] = avSeged / bvSeged;
maradek = avSeged % bvSeged;
avSeged = bvSeged;
bvSeged = maradek;
darab++;
} while (maradek != 1);

maradek = 0;
x0Seged = 1;
for (i = darab-1; i >= 0; i--) {
y0Seged = maradek + x0Seged * szorzo[i];
if (i > 0) {
maradek = x0Seged;
x0Seged = y0Seged;
}
}
} else {
x0Seged = 1;
y0Seged = 1 - avSeged;
}

if (voltCsere) {
temp = y0Seged;
y0Seged = x0Seged;
x0Seged = temp;
}

if (-av*x0Seged + bv*y0Seged == 1) {
x0Seged *= -1;
} else if (av*x0Seged - bv*y0Seged == 1) {
y0Seged *= -1;
} else if (-av*x0Seged - bv*y0Seged == 1) {
x0Seged *= -1;
y0Seged *= -1;
}

*x0 = x0Seged;
*y0 = -y0Seged;
}

int main() {

FILE *f, *fk;
int a;
int b;
int c;
int d;
int av;
int bv;
int cv;
int x0;
int y0;
int x;
int y;
int teszt;

f=fopen("be.txt", "r");
fk=fopen("ki.txt", "w");
if(f==NULL)
{
exit (-1);
}
teszt=fscanf(f, "%d %d %d", &a, &b, &c);

if(teszt!=3)
{
fprintf(fk, "0\n");
}
else
{

d = lnko(a, b);

av = a / d;
bv = b / d;
cv = c / d;

if (c % d == 0) {
euklidesziAlg(av, bv, &x0, &y0);
x = x0 * cv;
y = y0 * cv;
while (x < 0 || y < 0) {
x += bv;
y += av;
}
while (x-bv >= 0 && y-av >= 0) {
x -= bv;
y -= av;
}
fprintf(fk,"%d %d\n\n", x, y);
}
else {
fprintf(fk, "0\n");
}

fclose(f);
fclose(fk);
return 0;

getchar();
}
}

de ha feltöltöm a bíróra..nincs helyes eredmény..

lehet, hogy a nagy zűrzavarban félrenéztem valamit..

tudom, hogy így csak nekem lesz nehezebb a vizsga..de hátha tanulok belőle..

köszi előre is!

(#3010) vanek válasza vanek (#3009) üzenetére


vanek
tag

még valami..ha 0 van a be.txt fájlba..kiakad a program..:\

(#3011) Jester01 válasza vanek (#3009) üzenetére


Jester01
veterán

Ettől a kódtól megint fejfájást lehet kapni :(
Viszont legalább teljes, fordítható program :R
Már csak a feladat specifikáció hiányzik ...

Jester

(#3012) vanek válasza Jester01 (#3011) üzenetére


vanek
tag

A lineáris algebrából jól ismert linearis diofantoszi egyenlet megoldásának a megvalósítása a feladat.
Tekintsük a lineáris difantoszi egyenleteket a következő alakban:
ax - by = c , ahol a, b, c eleme Z+
Ekkor keressük azt az x, y egész számpárt, amely a legkisebb nem negatív megoldása az egyenletnek,
amennyiben létezik megoldás. Ennek menete a következő: d = lnko(a, b), ahol a = d * av, b = d * bv
és c = d * cv. Ha c nem osztható d-vel, akkor nincs megoldás, különben oldjuk meg az av *x0+bv * y0 = 1
egyenletet az egész számok halmazán az euklideszi algotritmussal (az lnko-t is ezzel tudjuk kiszámolni).
Pl.: 1027 * x0 + 712 * y0 = 1 esetén

1027 = 712 * 1 + 315
712 = 315 * 2 + 82
315 = 82 * 3 + 69
82 = 69 * 1 + 13
69 = 13 * 5 + 4
13 = 4 * 3 + 1

0 + 1 * 3 = 3;
1 + 3 * 5 = 16;
3 + 16 * 1 = 19;
16 + 19 * 3 = 73;
19 + 73 * 2 = 165;
73 + 165 * 1 = 238;

A második részt az első részben kapott számok segítségével számolva végül megkapjuk a két számot: 165
és 238. Ez után ki kell próbálni, hogy mi lehet a két szám előjele (4 variáció). Majd ha az előző megoldás
volt av * x+bv * y = 1 -re, akkor av * x0 - bv * (-y0) = 1 lesz, ami nekünk kell. Végül az eredeti egyenlet
megoldását kapjuk, ha vissza szorzunk cv * d-vel:

av * x0 - bv * (-y0) = 1
av * x0 * cv - bv * (-y0) * cv = cv
d * av * x0 * cv - d * bv * -y0 * cv = a * (x0 * cv) - b * (-y0 * cv) = c = d * cv

Tehát x = x0 * cv és y = -y0 * cv megoldás, de nem feltétlenül a két legkisebb nemnegatív, tehát ezt még
meg kell keresni: x- = k * bv és y- = k * av mind megoldások bármely k eleme Z-re. Keresd meg a megfelelő
k-t és kész vagy.

Bemenet: be.txt a, b, c
Kimenet: ki.txt x, y

Pl:
Be: 53,8,64
Ki: 8,45

Be: 516,390,564
Ki: 54,70

(#3013) vanek válasza vanek (#3012) üzenetére


vanek
tag

aztan rájöttem, hogy a 0ra nem kell, mivel abc eleme Z+..

(#3014) Jester01 válasza vanek (#3012) üzenetére


Jester01
veterán

A bemásolt kiírásban a számokat a bemenetben és a kimenetben egyaránt vessző választja el, a programod viszont szóközt (whitespace) használ. Feltehetőleg a bíró is ezért nem fogadja el.

Jester

(#3015) vanek válasza Jester01 (#3014) üzenetére


vanek
tag

sajnos a a leírásban is whitespace van..csak az átlátás miatt tettem vesszőket..:\

(#3016) Jester01 válasza vanek (#3015) üzenetére


Jester01
veterán

Mivel azért lehet, hogy csak valami formai hiba van jó lenne ha a pontos specifikációt közölnéd és/vagy ellenőriznéd (pontosan mennyi szóköz, hová milyen soremelés kell, ha kell, stb.)

Jester

(#3017) vanek válasza Jester01 (#3016) üzenetére


vanek
tag

[link]

itt van.. már vagy 2 óraja nézegetem...de sajnos nem tudok rájönni mi lehet.. :F

(#3018) Jester01 válasza vanek (#3017) üzenetére


Jester01
veterán

A te kódod 2 sorvég jelet tesz a kimenetbe. Spefikáció feladatkiírás :DDD szerint 1 kell.

[ Szerkesztve ]

Jester

(#3019) vanek válasza Jester01 (#3018) üzenetére


vanek
tag

a feltöltés óta azt már észrevettem, de ugyan úgy nem jó..:\

(#3020) birno válasza vanek (#3019) üzenetére


birno
addikt

fprintf(fk,"%d %d\n\n", x, y);
helyett
fprintf(fk,"%d %d\n\n", x, y);

Egy szokkozzel kell elvalasztani oket, nem 3-al. :)

[ Szerkesztve ]

(#3021) Jester01 válasza birno (#3020) üzenetére


Jester01
veterán

Érdekes mert itt a fórumon tényleg 3-nak látszik, de ha kimásolom akkor csak 1. :F

Jester

(#3022) birno válasza Jester01 (#3021) üzenetére


birno
addikt

Nem tudom, hogy hova masolod ki, nekem Notepad++-ba, meg vim-be is 3 szokoz maradt. :D

A kolleganak tovabbra is ajanlom, hogy ha nem is kabinetes gepen irja meg, de mindenkepp ott forditsa es ellenorizze a progit, mert ott azonnal kitunt, hogy tobb szokoz van a kelletenel s a Bironal is valszeg ezert hasal el.

(#3023) vanek válasza birno (#3022) üzenetére


vanek
tag

valahogy nem töltöttem fel..:D

mikor most átnéztem a programom már kitöröltem a 3 spacet..+ az egyik \n-t :D ma feltöltöttem és minden jó! :)

nagyon szépen köszönök minden segítséget!!

jövök mindenkinek egy sörrel! :) :R

(#3024) e=mc²


e=mc²
őstag

Sziasztok!

Szeretnek segitseget kerni az alabbi programhoz:

#include <stdio.h>
#define TABLA_MERET 8

void futo(char tabla[TABLA_MERET][TABLA_MERET], char input[3]){
int sor, oszlop;

printf("Kerem a futo poziciojat:");
scanf("%s", input);
sor = input[1] - '1';
oszlop = input[0] - 'a';
tabla[sor][oszlop] = 'f';
}

void gyalog(char tabla[TABLA_MERET][TABLA_MERET], char input[3]) {
int sor, oszlop;

do {
printf("Kerem a gyalogok helyzetet:");
scanf("%s", input);
if (input[0] != '*') {
sor = input[1] - '1';
oszlop = input[0] - 'a';
tabla[sor][oszlop] = 'g';
}
} while (input[0] != '*');
}

void futolepes(char tabla[TABLA_MERET][TABLA_MERET]){
int i, sor, oszlop;
int bl = 0;
int bf = 0;
int jl = 0;
int jf = 0;

for (i=sor+1; i<TABLA_MERET; i++) {
//balra le
if ((oszlop+(sor-i) >= 0) && !bl) {
if (tabla[i][oszlop+(sor-i)] != 'g') {
tabla[i][oszlop+(sor-i)] = '*';
}else {
bl++;
}
}
//jobbra le
if ((oszlop-(sor-i) < TABLA_MERET) && !jl) {
if (tabla[i][oszlop-(sor-i)] != 'g') {
tabla[i][oszlop-(sor-i)] = '*';
}else {
jl++;
}
}
}
for (i=sor-1; i>-1; i--) {
//jobbra fel
if ((oszlop+(sor-i) < TABLA_MERET) && !jf) {
if (tabla[i][oszlop+(sor-i)] != 'g') {
tabla[i][oszlop+(sor-i)] = '*';
}else {
jf++;
}
}
//balra fel
if ((oszlop-(sor-i) >= 0) && !bf) {
if (tabla[i][oszlop-(sor-i)] != 'g') {
tabla[i][oszlop-(sor-i)] = '*';
}else {
bf++;
}
}
}
}

void kiir(char tabla[TABLA_MERET][TABLA_MERET]) {
int i, j;

printf("A tabla:\n");
printf("\n ");
for (i=0; i<TABLA_MERET; i++) {
printf("%c ",'A'+i);
}
printf("\n");
for (i=0; i<TABLA_MERET; i++) {
printf("%d ", i+1);
for (j=0; j<TABLA_MERET; j++) {
if (tabla[i][j] != '\0') {
printf("|%c", tabla[i][j]);
} else {
printf("|%c", '.');
}
}
printf("|\n");
}
printf("\n");
}

int main() {
char tabla[TABLA_MERET][TABLA_MERET];
int i, j;
char input[3];

for (i=0; i<TABLA_MERET; i++) {
for (j=0; j<TABLA_MERET; j++) {
tabla[i][j] = '\0';
}
}

futo(tabla, input);
gyalog(tabla, input);
futolepes(tabla);
kiir(tabla);

return 0;
}

Ez igy elszall hibaval a futolepes fuggvenyben, meghozza ha minden igaz az oszlop erteke miatt. Hogy lehetne oda atadni a futo aktualis helyzetet a a futo fv-bol? tabla[sor][oszlop]

Ha a gyalog fuggveny fut le elobb, mint a futo fv, akkor jo.

koszi, udv,

Ambulimax Provider

(#3025) Jester01 válasza e=mc² (#3024) üzenetére


Jester01
veterán

Ahogy mondod :K
Mivel a main a kapcsolat a futo és a futolepes között, így először futo-ból kellene visszaadni a main-be, majd onnan tovább. A helyzetet bonyolítja, hogy 2 értékről van szó. Egy lehetséges megoldás ha definiálsz egy struktúrát a két értéknek és azt adogatod, valahogy így:

struct pozicio
{
int sor;
int oszlop;
};

struct pozicio futo(char tabla[TABLA_MERET][TABLA_MERET], char input[3])
{
struct pozicio p;
...
return p;
}
...
void futolepes(char tabla[TABLA_MERET][TABLA_MERET], struct pozicio p)
{
...
}
...
int main()
{
struct pozicio p;
...
p = futo(tabla, input);
gyalog(tabla, input);
futolepes(tabla, p);
...
}

A naív megoldás persze a globális változók használata lenne, de az általában nem ajánlott.

Jester

(#3026) artiny


artiny
őstag

C programot átírni, valaki megtudná csinálni?
Van egy alap program:
ez egy szotar akar lenni..
Randomban adja a magyar szavakat es angolra kell forditani. Ha nem jo akkor kiirja a helyes megoldast. MIkor kilepunk a programbol akkor irja ki azokat a szavakat amire rosszul válaszotltunk.

Itt a magyar vezioja /Szaab nevű programozó érdeme/:
http://pastebin.com/ViFeNimB

Itt pedig a szlovak,amiben több minden meg van valositva/be van fejezve/
http://pastebin.com/jbP8N18F

Ezt a programot kell átiri:
Olyan feladat van,hogy az előző szótárt kell át írni,hogy ezt a fájlt CSV /ezt kell használni/ olvassa be:
http://www.mediafire.com/?057r7i17uklqi7t

El kell tárolni a helyes/nem helyes válaszok számát egy csv fájlba/azt hiszem hogy a slovnik.csv fájlba/ és dolgozni/számolni vele ha újra belép a felhasználó. A program engedélyezi/lehetővé teszi ,hogy újabb szavakat tudjon a felhasználó elmenteni a szótár fájlban és azokat abcd szerint lesznek majd sorba téve.

A baj hogy mar az elejen elakadtam...

Ha beolvasom a csv fájlt:

FILE *doo = fopen("slovnik.csv", "r");

ekkor:
hlboko;deep;0;0

igy teszi ki nem pedig csak a hlboko szavat.Hogyan kell megcsinalni hogy csak a hlbko -t irja ki?

(#3027) artiny


artiny
őstag

CSV fájl szétdarabolása strtok () függvény segítségével?
Ilyan adat szerepel a csv fájlban.

akcia;action;0;0
autobus;bus;0;0
budova;building;0;0
celkom;quite;0;0
centrum;centre;0;0

ezt csv fajlban hogyan kell szetdarabolni?

Beolvasas a csv fájlnak és szetdarabolas majd kiiratas..hogyan kéne?

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

int main() {

FILE *doo = fopen("slovnik.csv", "r");

fclose(doo);

return 0;
}

Strtok()

Example:

char str[] = "now # is the time for all # good men to come to the # aid of their country";
char delims[] = "#";
char *result = NULL;
result = strtok( str, delims );
while( result != NULL ) {
printf( "result is "%s"\n", result );
result = strtok( NULL, delims );
}

OUTPUT:
result is "now "
result is " is the time for all "
result is " good men to come to the "
result is " aid of their country"

(#3028) artiny


artiny
őstag

tudtok segiteni..egy olyan felaladgyujtemeny kene ami kezdoknek programok vannak es megoldasokkal egyutt? C ben

(#3029) MacCaine válasza artiny (#3028) üzenetére


MacCaine
őstag

Ez engem is érdekelne. C, C++, assembly nyelv is.

(#3030) WonderCSabo válasza artiny (#3027) üzenetére


WonderCSabo
félisten

Még mindig nem sikerült összehozni? char delims[] jelen esetben ";", egy külső ciklussal soronként beolvasod a fájlt, egy belső ciklussal meg szétdarabolod ahogy a példában van írva.

(#3031) artiny válasza WonderCSabo (#3030) üzenetére


artiny
őstag

igen sajnos nem sikerult...

ezert most neki allok minden fele ebooknak ami van C bol es elolvasom oket ..majd gyakorlasnak szeretnek egy feladatgyujtemenyt hogy ha nem megy a porgram akkor legalabb lassam,hogy kellet volna...

(#3032) Zefír


Zefír
őstag

Sziasztok!
Egy olyan kérdéssel fordulnék felétek, hogy szeretnék megtanulni c-nyelveken programozni, viszont jelenleg, nincsen pénzem megvenni programozó könyveket, ezért valami olyan lehetőséget keresek, ami letölthető netről, és az alapoktól bevezet a C-programozásba, ja és persze MAGYAR. A végső célom, hogy objecitve orientált programozzak, mobileszközökre szeretnék fejleszteni, ( de persze ez csak egy cél, amit kitűztem, majd idő kőzben elvállik.)

Bocsánatot kérek, ha a topikban leírtátok 1000-szer, de nagyonsokszor az van, hogy megtalálok egy jó könyvet, letöltő linkel, és elavult, leszedték a szerverről, ezért szeretnék aktuális választ kapni.

Talán még az fontos lehet, hogy MAC-em van, (osx lion) bár ez nem befolyásol semmit.

Előre is hatalmas köszönet a válaszokért!!!! :R :R :R :R

Üdv: Andrew

(#3033) kispx válasza Zefír (#3032) üzenetére


kispx
addikt

1
2

Talán még az fontos lehet, hogy MAC-em van, (osx lion) bár ez nem befolyásol semmit.

A C nyelvben nem fog befolyásolni még most, de egy MAC-es IDE-vel azért megkell ismerkedni.

[ Szerkesztve ]

(#3034) Zefír válasza kispx (#3033) üzenetére


Zefír
őstag

Köszönöm a válaszodat!! :R :R Ma este beleis csapok a lecsóba :DDD

(#3035) artiny


artiny
őstag

Olyan progit akarok,ami egy kisebb szamot...harmadik gyokre emel amit beolvassunk a billentyuzetrol...de mikor megadok egy szamot...mindig ketszer keri be a szamot mire kiirja:

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

int main(void)
{

int a;
scanf("%d\n",&a);
a= a*a*a;
printf("%d\n",a);

return 0;

}

(#3036) Korcsii válasza artiny (#3035) üzenetére


Korcsii
őstag

scanf-be nem kell \n, mivel az pont az az enter, amivel el akarnád küldeni...

(#3037) vorosbv


vorosbv
csendes tag

Sziasztok! Egy kis segítségre lenne szükségem! Nemrég kezdtem a programozást, és van egy félévi feladatom, amit el is kéne magyarázni, de az egyik részét nem igazán értem! Ez lenne az:
int ellenorzes (char *str) {
if (!str || !*str)
return 0;
char c;
while(c=*str++)
if(c<'0' || c>'9')
return 0;
return 1;
}
Ez egy telefonszám-ellenőrző program részlete, és főként az első 3 sorát nem vágom. Persze a tanár abba kérdezett bele (miért *str, miért char van előtte, mi a funkciója, mit jelent az alatta lévő sor...). Nagyon nagy segítség lenne, ha leírni vki ennek az egésznek az értelmét! :)

(#3038) WonderCSabo válasza vorosbv (#3037) üzenetére


WonderCSabo
félisten

Nézz utána, mi az a pointer, mi az a C string, és a kettőnek mi köze egymáshoz. Ha ennyire alap dolgokat nem tudsz, akkor sztem így fórumon nincs értelme magyarázni.

(#3039) Jester01 válasza WonderCSabo (#3038) üzenetére


Jester01
veterán

Főleg, hogy ennek olyan szaga van, hogy valakivel megíratta a tanár meg lebuktatta...

Jester

(#3040) artiny


artiny
őstag

/C/ hogyan irjuk meg olyan feladatokat amik ugy szolnak, pl. irjon programot ami addig olvas be karaktereket amig nem adjuk meg az X -et?
Ez igy helyes,kezdo szintu megoldas,
Irjon progit ami addig olvasbe karaktereket amig nem adjuk meg az X -et,majd a vegen irja ki hanyszor szerepelt az A betu a beolvasottak kozott.
A kerdesem hogy nem all meg rogton a beolvasas pedig megadtam az X -t ,csak akkor ha az entert lenyomom akkor ertekeli ki hogy megadtam e vagy nem.

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

#define konstans 'A'

int main(void)
{

char b;
int szamlalo=0;

printf("Adjon meg betuket, az 'X' jelzi a veget \n\n");


while(b != 'X'){
scanf("%c",&b);

if (b ==konstans){
szamlalo++;

}
}

printf("\n A betuk szama: %d\n",szamlalo);

return 0;
}

Probaltam volna gets(b); a scanf("%c",&b); helyett,de ez a hiba jon ki:

Compiling...
yt.cpp
D:\VB6\yt\yt.cpp(17) : error C2664: 'gets' : cannot convert parameter 1 from 'char' to 'char *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
Error executing cl.exe.

yt.obj - 1 error(s), 0 warning(s)

VB 6.0 hasznalok

[ Szerkesztve ]

(#3041) WonderCSabo válasza artiny (#3040) üzenetére


WonderCSabo
félisten

gets(&b)

Enter nyomás nélkül nem tudsz adatot bevinni ezekkel a fvekkel, amennyire én tudom.

[ Szerkesztve ]

(#3042) artiny válasza WonderCSabo (#3041) üzenetére


artiny
őstag

koszi szepen

getchar,gets,scanf ezeken kozzul melyik a jo megoldas ilyes fajta feladatoknal?

(#3043) WonderCSabo válasza artiny (#3042) üzenetére


WonderCSabo
félisten

Mindegyiknél Enterrel viszed be az adatot.

(#3044) Jester01 válasza WonderCSabo (#3043) üzenetére


Jester01
veterán

Azok közül csak a gets vár entert, a többinél csak azért látszik úgy, mert az alatta lévő réteg eleve soronként pufferel. Ennek kikapcsolása vagy megkerülése sajnos platformfüggő.

Jester

(#3045) WonderCSabo válasza Jester01 (#3044) üzenetére


WonderCSabo
félisten

Kösz a korrekciót, bár a végső megállapításom sztem azért helyesnek tekinthető. :)

(#3046) artiny válasza WonderCSabo (#3045) üzenetére


artiny
őstag

köszi a válaszokat :)

esetleg erre:
pl. irj egy fol progit ami bekér egy számot,ha páros,akkor irja ki a felét a számnak ,ha nem akkor irja ki a haromszorosát es adjon hozzá egyet. Csak akkor áll le a progi ha valamelyik érték 1 -s lessz. pl. 3 számra ezt fogja kiirni 3, 10, 5, 16,
8, 4, 2, 1. Gondolod hogy valaha is megáll a program futása.

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


int main(void)
{
int a,d,egy = 1;


scanf("%d",&a);

do{

d=a%2;

if (d == 0)
{
printf("\n%d ",d=a/2);
}
else{
printf("\n%d ",d=a*3+1);
}
}while(d != '1');


return 0;
}

Erre jutottam,de valmi gond van vele :B

(#3047) Jester01 válasza artiny (#3046) üzenetére


Jester01
veterán

Van több is ;)

while(d != '1');
Ide nem karakter konstans kell, csak simán egy szám.

Másik probléma, hogy a d-be számítod ki az új értéket de az a-t használod.

Kicsit letisztázva ilyesmi lehet:

#include <stdio.h>

int main(void)
{
int a;

scanf("%d",&a);
do
{
if (a % 2 == 0)
{
a = a / 2;
} else {
a = a * 3 + 1;
}
printf("%d\n", a);
} while (a != 1);

return 0;
}

Jester

(#3048) birno válasza Jester01 (#3047) üzenetére


birno
addikt

S egyebkent a printf-ben az ertekadas mukodne?

[ Szerkesztve ]

(#3049) artiny válasza Jester01 (#3047) üzenetére


artiny
őstag

Köszi szépen

esetleg erre valki:

C ben hoyan kell txt böl beolvasott számokat osszeadni, mivel karakterenkent kezeli oket ezert az ASCII ertekuket adja ossze?

(#3050) Korcsii válasza artiny (#3049) üzenetére


Korcsii
őstag

Legegyszerűbb talán (s)sanf-fel egyből számkénet beolvasni...

birno:
Lehet, hogy működne (miért is ne?), de nem szép, szerintem a (gépi)kód sem lesz egyszerűbb tőle, sőt... Írjunk leforduló C programot minél rövidebben címűversenyben van szerintem csak helye. :)

[ Szerkesztve ]

Copyright © 2000-2024 PROHARDVER Informatikai Kft.