- PlayStation 5
- Forza sorozat (Horizon/Motorsport)
- Star Wars: The Old Republic - MMORPG
- Feltámad a Hellgate sorozat
- Call of Duty: Modern Warfare III (2023)
- Call of Duty: Warzone
- Call of Duty: Modern Warfare II (2022)
- EAFC 24
- VR kiadást kap a Metal Hellsinger
- Counter-Strike: Global Offensive (CS:GO) / Counter-Strike 2 (CS2)
Új hozzászólás Aktív témák
-
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;
} -
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
-
WonderCSabo
félisten
válasz Jester01 #3002 üzenetére
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.
-
Jester01
veterán
válasz WonderCSabo #3003 üzenetére
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
-
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 ]
-
Jester01
veterán
válasz WonderCSabo #3006 üzenetére
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
-
vanek
tag
válasz WonderCSabo #3008 üzenetére
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!
-
vanek
tag
válasz Jester01 #3011 üzenetére
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én1027 = 712 * 1 + 315
712 = 315 * 2 + 82
315 = 82 * 3 + 69
82 = 69 * 1 + 13
69 = 13 * 5 + 4
13 = 4 * 3 + 10 + 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 * cvTehá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, yPl:
Be: 53,8,64
Ki: 8,45Be: 516,390,564
Ki: 54,70 -
addikt
válasz Jester01 #3021 üzenetére
Nem tudom, hogy hova masolod ki, nekem Notepad++-ba, meg vim-be is 3 szokoz maradt.
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.
-
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
-
Jester01
veterán
Ahogy mondod
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
-
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/ViFeNimBItt pedig a szlovak,amiben több minden meg van valositva/be van fejezve/
http://pastebin.com/jbP8N18FEzt 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/?057r7i17uklqi7tEl 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;0igy teszi ki nem pedig csak a hlboko szavat.Hogyan kell megcsinalni hogy csak a hlbko -t irja ki?
-
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;0ezt 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" -
artiny
őstag
tudtok segiteni..egy olyan felaladgyujtemeny kene ami kezdoknek programok vannak es megoldasokkal egyutt? C ben
-
artiny
őstag
válasz WonderCSabo #3030 üzenetére
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...
-
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!!!!
Üdv: Andrew
-
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;
} -
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! -
Jester01
veterán
válasz WonderCSabo #3038 üzenetére
Főleg, hogy ennek olyan szaga van, hogy valakivel megíratta a tanár meg lebuktatta...
Jester
-
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 ]
-
artiny
őstag
válasz WonderCSabo #3041 üzenetére
koszi szepen
getchar,gets,scanf ezeken kozzul melyik a jo megoldas ilyes fajta feladatoknal?
-
Jester01
veterán
válasz WonderCSabo #3043 üzenetére
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
-
artiny
őstag
válasz WonderCSabo #3045 üzenetére
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 -
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
-
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 ]
Ú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!
- Canon EOS DSLR topic
- Nikon Z MILC fényképezőgépcsalád
- Samsung Galaxy S23 Ultra - non plus ultra
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Gitáros topic
- Politika
- Sorozatok
- Ezek a OnePlus 12 és 12R európai árai
- ASUS routerek
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- További aktív témák...
- -65% Dell Latitude 7310 2in1: i7 10610U,16GB,256GB,13.3" Touch 100%sRGB 350nit,WWAN eSIM,Win11
- Samsung Galaxy S22 - Fekete - Független - 2025.03.05-ig garancia - Tökéletes állapot
- Endorfy Fortis 5 ARGB CPU hűtő áron alul! (3 db)
- Forradalmasítsd a digitális világodat a HoloLens 2-vel!
- ÚJ Dell Inspiron 7430 2-in-1 - 14" FHD+ IPS TOUCH 360 / i5-1335U / 16Gb DDR5 / 512Gb PCIe 4.0 / 3 ÉV