- Yettel topik
- Samsung Galaxy S22 Ultra - na, kinél van toll?
- Magisk
- Mobil flották
- Egy szenzor, két zoomkamera: újraírta a Huawei a mobilfotózás történetét
- Bemutatkozott a Poco X7 és X7 Pro
- Xiaomi 11 Lite 5G NE (lisa)
- Samsung Galaxy A56 - megbízható középszerűség
- Google Pixel topik
- Samsung Galaxy A55 - új év, régi stratégia
Új hozzászólás Aktív témák
-
hoffman_
nagyúr
válasz
hoffman_ #4097 üzenetére
senki többet harmadszor?
nagyon fontos lenne.
illetve még egy kérdés. írtam én is valamit egy feladatra, természetesen nem jó, és nem tudom, hogy miért. valaki meg tudja javítani esetleg?
feladat: bekérni s1 tömbbe 10 karaktert úgy, hogy ascii kód szerint a 1-es és 100-as helyiértéken csak 6 vagy 7 állhat. ezután s2-be másolni az elemeket(ha van), amelyeknél a 10-es helyiértéken lévő szám 0. bitje 0, az 1. bitje pedig 1, utána az első 4 elem minimumát kell megadni. mindent függvénnyel.
- min függvény ebben még nincs is benne, de így se ok
void beker(unsigned char *s1);
int masol(unsigned char *s1, unsigned char *s2);
int main()
{
unsigned char s1[10], s2[10];
beker(s1);
masol(s1, s2);
return 0;
}
void beker(unsigned char *s1)
{
int i=0;
unsigned int temp;
/*while(i<10)
{
scanf("%d", temp);
if((temp[i] &0x3 == 0x6) || (temp[i] &0x3 == 0x7)) s1[i]=temp;
i++;
}*/
while(i<10)
{
scanf("%d", temp);
if((temp &0x3 == 0x6) || (temp &0x3 == 0x7)) s1[i]=temp;
else s1[i]=0;
i++;
}
}
int masol(unsigned char *s1, unsigned char *s2)
{
int i=0, j=0;
while(i<10) s2[i++]=0;
i=0;
while(i<10)
{
if(s1[i] &0x5 == 0x1) s2[j++]=s1[i];
i++;
printf("%d, ", s2);
}
} -
hoffman_
nagyúr
sziasztok,
miután leprogramozták nekem C#-ben, mert én hülye elnéztem a topicot, ide is eltaláltam... a kérdés adott, mutatom:
továbbra is szükségem lenne segítségre, a második, függvényekkel operáló zh-t nem tudom abszolválni, most megyek pótra kedden, de ezen is meg fognak vágni, ha így megy, és az nagy gáz lesz.
két program van, amit meg kéne írnom, tud valaki ebben segíteni? illetve több, csak jó lenne, ha ezt a kettőt látnám, hogy lássam, hogy néz ki. utána már talán meg tudom érteni egyedül is.
első:
bekérni s1 tömbbe 10 darab 4 jegyű számot, úgy, hogy az 1-es és 100-as helyiértéken lévő számok nem egyezhetnek(tehát 2345 jó, 2343 nem jó). ezután s2 tömbbe átmásolni azokat, ahol a számjegy 0. bitjén 0 van, az 1. biten pedig 1-es. ezután az utolsó 4 elem átlagát kell venni. mindegyik részt függvénnyel.második:
10 darab char bekérése s1 tömbbe ascii kód alapján úgy, hogy a 10-es helyiértéken 3-mal osztható szám legyen, és később sztringként lehessen használni. ezután s2-be másolni a karaktereket, ahol a 0. és 1. biten is 1-es áll. ezután az első 5 elem összegét kell venni. mindegyik részt függvénnyel.nagyon fontos lenne, hogy ezeket lássam, remélem valaki tud időben segíteni. előre is köszönök mindent
-
buherton
őstag
Hát nem. Ez a példa lefordult, de másfélszer (igazából 10-szer annyit, csak faragtam rajta) annyi memóriát eszik mint amennyi van a mikrokontrollerben (1 kB van az MCU-ban), mert a nano részt is használja. Próbálkoztam az első példával, ami csak a pico-t használja, de úgy szó szerint egy rakás bug az egész. Olyan assembly parancsokat használ, ami nincs az AVR-nek, és ha azt javítom sem fordul le, mert két millió más baja van.
Pedig nagyon ígéretesnek tűnt, mert x86-on is lehet használni.
-
Karma
félisten
válasz
buherton #4094 üzenetére
Hát de az nem fasza, hogy lefordítja az ex_init4-et egyszer, aztán az ex_task4-et is (amiben benne van az include miatt az ex_init4 tartalma, és ezért van benne __heap_start...), és egymás mellé rakja őket. Elég egyértelműen rossz felépítés.
Rá kell venned az Eclipse-et, hogy csak az ex_task4-et fordítsa le, vagy vedd ki az include-ot és hagyd hogy a linker tegye a dolgát.
-
buherton
őstag
válasz
Jester01 #4092 üzenetére
Ha a linker szerint az ex_task4.o-ban is benne van, az azt jelenti, hogy huncutság van, például az ex_task4.c-ben lehet egy #include "ex_init4.c".
Ezt nem tudom, hogy honnan tudtad, de tényleg így van. Az ex_task4.c-ben semmilyen __heap_start-os declarálás, definiálás vagy hasonló sincs. De ez miért jelent problémát?
MOD: Arra gondolsz, hogy a make környezet úgy fordítja, hogy minden c fájt fordít, és ennek az lesz a következménye, hogy az ex_task4.c-ből includálva van az ex_init4.c ezért gyakorlatilag az ex_init4.c kétszer van fordítva? És amikor a linkeléshez ér, akkor jön a felismerés, hogy két __heap_start van, mert bár az ex_task4.c nem tartalmazza, de az include miatt mégis bele kerül.
(#4093) Karma: Igen, több példa is van, viszont úgy van megcsinálva, hogy a közös dolgok 4 init fájlban vannak, és a különböző példák ezeket include-álják és így egy rakat fölös kódot nem kell ismételten leírni. Ilyen a main, a task inicializálás, deklarálások, stb..-k. Nem túl szép, de az biztos hogy hatékony, de egyelőre még nem fordul...
-
Jester01
veterán
válasz
buherton #4091 üzenetére
A grep kimenet alapján az ex_init4.c-ben van benne tehát a "jogos tulajdonos" ő. Ha a linker szerint az ex_task4.o-ban is benne van, az azt jelenti, hogy huncutság van, például az ex_task4.c-ben lehet egy #include "ex_init4.c". Mindenesetre valahogy belekerül abba a modulba is, azt kell kinyomozni, hogyan.
-
buherton
őstag
Kezd nagyon felidegesíteni az Eclipse. A fordítás rendben lemegy. A problémák a linkelésnél jönnek elő. Hogyan lehet az olyan problémákat kiküszöbölni mint pl:
./ex_task4.o
.data+0x2): multiple definition of `__heap_start'
./ex_init4.o.data+0x2): first defined here
$ grep -R __heap_start
noscfg.h: * ::__heap_start and ::__heap_end must be provided and initialized
noscfg.h:extern void *__heap_start;
inc/pos_nano.h: * it is required to set the variables ::__heap_start and
Binary file Release/ex_init4.o matches
Release/PicoOS_task1.map: 0x000000000080006b __heap_start
Release/PicoOS_task1.map: 0x000000000080465b PROVIDE (__heap_start, .)
Binary file Release/ex_task4.o matches
Binary file Release/src/nano/n_mem.o matches
ex_init4.c:void *__heap_start = (void*) &membuf_g[0];
src/nano/n_mem.c: freeBlockList_g = (BLOCK_t)(void*)MEM_ALIGN((MEMPTR_t)(__heap_start));???
-
bucsupeti
senior tag
válasz
hunterrop8 #4089 üzenetére
irj egy függvényt ami bekér egy adott hosszuságú egész számot és visszaadja azt.
ezt hivogasd egy for ciklusba és tedd bele a visszaadott értéket a tömbbe.
a main lényege kb ez lenne:
for(i=0;i<10;i++)
t=egeszbeker(4);az egeszbeker() fv paraméterezésében én megadnám a max hosszat.
persze ellenörzések stb kell még hozzá.
-
hunterrop8
tag
Köszi szépen a választ, közben lenne még egy kérdésem, a következő a feladat:
10 elemű tömböt töltsön fel egész értékekkel. a beolvasást sajátfüggvénnyel végezze számjegyenként enterig. a szám legfeljebb 4jegyű decimális lehet.
Ezt hogy?? Én úgy próbáltam, h a sfgv-ben bekérek 10elemet, azokat tömbe teszem, de azt hogy tehetem át a mainbe? vagy nem is így kéne? -
Jester01
veterán
válasz
hunterrop8 #4087 üzenetére
Ha egy függvényből két értéket akarsz visszaadni akkor használj struktúra típusú visszatérési értéket vagy pointereket.
struct result {
int vowels;
int consonants;
};
struct result count(const char* text) { ... }
int main() {
struct result r = count("...");
printf("%d %d\n", r.vowels, r.consonants);
return 0;
}-vagy-
void count(const char* text, int* vowels, int* consonants) { ... }
int main() {
int vowels, consonants;
count("...", &vowels, &consonants);
printf("%d %d\n", vowels, consonants);
return 0;
} -
hunterrop8
tag
sziasztok, egyetemen most kezdtünk el programozni és lenne egy kérdésem. A feladat az, hogy töltsünk fel egy 100elemes stringet 'a' kezdőértékkel, és utána 0.25-el csökkenjen mindig a többi. Aztán meg kell keresni, h hány olyan van ami egész, és nagybetű. Ezek még mennek is.
De van egy olyan feladat, hogy saját függvényben meg kell számolni a mássalhangzók, és a magánhangzók számát, és ugye úgy, hogy amikor a mainben a return 0-nál vége a programnak ott kiírja őket. Ezt eddig nekem csak úgy sikerült, hogy két külön sajátfüggvényben számoltam meg őket külön.
A kérdésem az lenne, hogyan lehet megcsinálni, hogy egy saját függvénnyel száoljam meg őket? (mert amikor így próbálom akkor a return után csak az egyket tudom beírni, és akkor a mainbe a mgh-hoz és az msh-hoz is ugyan azt írja.)
Valaki tudna segíteni? Leírni a sajátfüggvényt, meg h a mainbe mi kell hozzá esetleg? Köszönöm -
skylaner
senior tag
válasz
lockdown90 #4085 üzenetére
De a nyil tomb[3] !!!3 elemű!!!!
for(i=0; i<11; i++)
scanf("%d",&tomb[i].kolcsszam);
tomb[0].kolcsszam, tomb[1].kolcsszam, tomb[2].kolcsszam tomb[3].kolcsszam ... tomb[10].kolcsszam
A feketével jelzett elemek nem léteznek!Te ezt akarod:
for(i=0; i<11; i++)
scanf("%d",&tomb[N].kolcsszam[i]); -
skylaner
senior tag
válasz
lockdown90 #4083 üzenetére
A nyil tömböd 3 elemű: nyil tomb[3];
A kolcs() fgv--ben 0-tól 10. elemig akarod bejárni a 3 elemű tömbödet.
Egyszerűen túl-indexeled.Amúgy nem csak 1 db könyv adatát kéri be, írja ki?
#define N 1
for(i=0; i<N; i++) -
lockdown90
senior tag
Abban szeretném ismét a segítségeteket kérni, hogy adott egy struktura, amiben kul tipusu adatokat tarolok
egy konyvrol (konyvek adatai). Namos letrehozok egy nyil struktura tipusu tombot amit forral toltogetek fel, sikerul is betoltogetni, de ennel a reszfeladatnal elakadok:-éves kölcsönzések száma (10 db szám, az első szám a könyv tavalyi kölcsönzéseinek száma..., a tízedik szám a könyv 10 évvel ezelőtti kölcsönzéseinek száma).
hogy tudom megcsinalni,hogy az utolso kerdesnel amikor kerem be a kolcsonzesek szamat 10db szamot tudjak megadni, irtam ra egy kulon eljarast forral, de csak 5-ig szamol utana lefagy, ugyan ezt a strukturaban levo tombot akarom elerni mint az elott elevo eljarasnal tomb.kolcsszam. de 5 szamot enged beirni csak, lefagy sajnos.
#include <stdio.h>
#define N 1
typedef struct nyil
{
char szerzo[30];
char cim[30];
int kiadev;
float kiadar;
char kolcsonozve[30];
int kolcsszam[11];
}nyil;
void beker(nyil tomb[])
{
int i;
for(i=0; i<N; i++)
{
printf("Add meg a szerzot:");
scanf("%s",tomb[i].szerzo);
printf("Add meg a konyv cimet:");
scanf("%s",tomb[i].cim);
printf("Add meg a kiadas evet:");
scanf("%d",&tomb[i].kiadev);
printf("Add meg a kiadasi arat:");
scanf("%f",&tomb[i].kiadar);
printf("Kikolcsonozve?:");
scanf("%s",tomb[i].kolcsonozve);
}
}
void kolcs(nyil tomb[])
{
int i;
printf("Eves kolcsonzesek szama(10db szam):");
for(i=0; i<11; i++)
{
scanf("%d",&tomb[i].kolcsszam);
}
}
void kiir(nyil tomb[])
{
int i;
for(i=0; i<N; i++)
{
printf("Szerzo: %s\n",tomb[i].szerzo);
printf("Cim: %s\n",tomb[i].cim);
printf("Kiad. ev: %d\n",tomb[i].kiadev);
printf("Kiad. ar: %d\n",tomb[i].kiadar);
printf("Kolcsonozve: %s\n",tomb[i].kolcsonozve);
printf("Eves kolcs szam: %d\n",tomb[i].kolcsszam);
}
}
int main()
{
nyil tomb[3];
beker(tomb);
kolcs(tomb);
kiir(tomb);
system("pause");
return 0;
}nem tudja tarolni rendesen?
-
skylaner
senior tag
válasz
lockdown90 #4080 üzenetére
Ha csak fgets()-t használsz elvileg nem lehet ilyen gond.
Ha van közte scanf() akkor az a baj.
Minden scanf() után ürítsd az input stream buffert. ( hívd meg az alábbi fgv-t)void input_stream_cleaner()
{
char c=0;
while (c != '\n' && c != EOF) { c = getchar(); }
} -
Bobrooney
senior tag
válasz
lockdown90 #4080 üzenetére
Szerintem fflush-el kell üríteni a stdin-t.
-
lockdown90
senior tag
Azt hogy lehetne megoldani h bekeresnel space is lehet a szovegben:
pl scanf-el ugye csak igy lehet h Toth.Peter, gets()-et ugye nem hasznaljuk
fgets-el viszont a for ciklusnal ugrik kerdekeset.fgets(tomb[i].nev,100,stdin);
-
Jester01
veterán
válasz
stranger28 #4077 üzenetére
#include <stdio.h>
#include <string.h>
int main()
{
unsigned char stats['z' - 'a' + 1] = {0, };
int duplicate = 0;
int word = 1;
int c;
while((c = getchar()) != EOF) {
if (c == '\n') {
if (duplicate == 0) break;
memset(stats, 0, sizeof stats);
duplicate = 0;
word = 1;
continue;
}
if (c == ' ') {
word = 1;
continue;
}
if (word == 0) continue;
word = 0;
c -= 'a';
if (c < 0 || c >= sizeof stats) continue;
duplicate = (stats[ c ]++ > 0);
}
return 0;
}Hosszt nem ellenőriz, csak angol kisbetűs szavak számítanak és csak szóköz után.
-
Jester01
veterán
válasz
stranger28 #4075 üzenetére
Aki ezt a specifikációt írta azt fel kellene pofozni
Mi az, hogy stringeket olvas? Sorokat, gondolom, aminek a végén valamilyen soremelés van.
Mit csináljon, ha több mint 30 karakter egy sor?
Hogyan definiáljuk a szavakat? Írásjelekkel mi a helyzet?
Milyen ábécét használjunk - magyart vagy angolt? Előbbi esetén mi legyen a kettősbetűkkel? Kisbetűk és nagybetűk egyformák?Hirtelen csak ennyi problémát látok ami nélkül tulajdonképpen el sem lehet kezdeni.
-
stranger28
addikt
Üdv!
A feladat, amit kaptam a következő:
Írjon programot, amely a standard bemenetről legfeljebb 30 karakter hosszúságú sztringeket olvas mindaddig, amíg olyan sztringet nem olvas, amelyben kizárólag különböző kezdőbetűvel kezdődő szavak szerepelnek.
Na, most én ezt megcsináltam, de szerintem ennél rövidebb megvalósításra gondoltak, így érdekelne, hogy ki hogyan oldaná meg/mi a legegyszerűbb módja ennek.
-
lockdown90
senior tag
válasz
lockdown90 #4073 üzenetére
nah koszi kiirja, hulyeseget mondtam xd
-
Bobrooney
senior tag
válasz
lockdown90 #4071 üzenetére
az átlaguk már tudható?
if(hallgato[i].atlag > 3.5)
{
printf
} -
lockdown90
senior tag
koszonom szepen a segitseget, meg annyit szeretnek kerdezni, hogy ha adott
egy hasonlo feladat, hogyan lehetne kiiratni az elso olyan hallgato nevet es indexet akinek az atlaga 3.5 felett van? -
buherton
őstag
válasz
lockdown90 #4067 üzenetére
Nem. Így lesz helyes. Ugyanis a kiadási évet, és annak az indexét nem lehet egy változóban tárolni. Külön kell, mert a ciklusban a kiadási év a fontos, hiszen azzal nézzük meg hogy az adott könyv régebbi-e, de közben le kell tárolunk, hogy melyik volt ez, ami a végén szükséges.
N változó honnan jön? Használj inkább struktúra pointert, és mivel nem változik a struktúra, használj const kulcsszót (kettő is kell majd).
void kiir(nyil tomb[])
{
int i, minIndex;
int min=tomb[0].kiadev;
for(i=1; i<N; i++)
{
if(tomb[I].kiadev<min)
{
min = tomb(i).kiadev;
minIndex = i;
}
}
printf("Legregebbi konyv: %d\n Hozza tartozo cim: %s",tomb[minIndex].kiadev,tomb[minIndex].cim);
} -
Bobrooney
senior tag
válasz
lockdown90 #4067 üzenetére
gondoltam megpróbálod, nem futtattam le.
tomb.kiadev=min; // de ez itt wtf? a kiadási év lesz a minimum? -
Bobrooney
senior tag
válasz
lockdown90 #4065 üzenetére
void kiir(nyil tomb[]){
int i;
int min=tomb[0].kiadev;
for(i=1; i<N; i++){
if(tomb[i].kiadev<min){
min = i;
}
}
printf("Legregebbi konyv: %d\n Hozza tartozo cim: %s",min,tomb[min].cim);
} -
lockdown90
senior tag
Sziasztok!
adott egy stuktura amiben konyvcimeket,evszamokat tarolok, es ki szeretnem iratni egy eljarassal a legregebbi konyv cimet akkor ezt hogy tudom megtenni? Megtudom keresni a legkorabban kiadott konyv evet, de a hozzatartozo nevet az istennek se tudom kiiratni.
void kiir(nyil tomb[]){
int i;
int min=tomb[0].kiadev;
for(i=0; i<N; i++){
if(tomb[i].kiadev<min){
tomb[i].kiadev=min;
}
}
printf("Legregebbi konyv: %d\n Hozza tartozo cim: %s",min,tomb[i].cim);
}tudom,hogy a hozzatartozo cim kiirazasa eleve nem lehet jo mivel cikluson kivül nem vonatkozik ra az (i), de nem tudom hogyan tudnam kiiratni a legkorabbi evszamhoz megfelelo cimet.(/I)
-
Retekegér
MODERÁTOR
Kéne valami tipp. Az a gondom, hogy a Code:
locks debugger módjában a Watches ablak üres marad. Mit csinálok rosszul?
-
Vasinger!
nagyúr
Nem tudom, hogy lett már e linkelve, de ez egy nagyon jó oldal ha valaki meg akar tanulni C-ben programozni: KATT
-
nyunyu
félisten
Viszont elojott az a kerdes, hogyan lehet beallitani, hogy milyen fajlt toljon be a fordito az stdin-re?
Linux/UNIX alatt "cat fajlnev | program"-mal kell futtatni.Meg jo, hogy DOS/Windows parancssor is POSIX kompatibilis, igy mukodik az input/output atiranyitasra szolgalo <,>
Igy a programot igy kell futtatni:
program <fajlnevAzt meg be lehet allitani a VSben, hogy milyen parancssori parameterekkel debugolja a programot. (Configuration properties/Debugging/Command Arguments)
-
nyunyu
félisten
Sikerult megetetni Visual Studio 2010-zel, be kellett allitani a projekt tulajdonsagainal Configuration properties/C/C++/Preprocessor alatt a Preprocessor definitions-ben, hogy "_CRT_SECURE_NO_WARNINGS"
Igy mar nem ugat az strcpy es tsai fuggvenyek elavultsagara, hanem lefordul.Viszont elojott az a kerdes, hogyan lehet beallitani, hogy milyen fajlt toljon be a fordito az stdin-re?
Linux/UNIX alatt "cat fajlnev | program"-mal kell futtatni.Meg kene maradnia platformfuggetlennek a kodnak, igy nem szivesen irnam at a fajlkezeles reszet.
-
nyunyu
félisten
Adott egy standard C kod, ami eredetileg UNIX alatt lett fejlesztve, mezei parancssoros program.
Meg lehet ezt a kodot etetni valami modern windowsos fejlesztokornyezettel, hogy lepesrol lepesre tudjam debugolni, nezni hogyan alakulnak a belso valtozok aktualis ertekei?
-
Zsolt1
tag
Sziasztok!
Egy feladathoz muszáj lenne használnom a magyar ékezetes betűket. Sajnos fordításkor már jelzi is a CodeBlocks, hogy a karakterkódolással baj van és utána futtatáskor is rosszul jelennek meg a betűk. Többféle módszerrel próbálkoztam már:
1. #include <local.h> + setlocal(LC_ALL,""); - Ez egy darabig működött is, de amikor következőre megnyitottam CodeBlocks-al akkor már nem volt jó.
2. Olvastam, hogy át kell állítani a kódlapot 852-re - system("CHCP 852") - de ez sem jó, mivel ez rendesen kiírja, hogy "Az aktív kódlap: 852", de utána ugyan úgy rosszul kezeli az ékezetes karaktereket.
CodeBlocks-ban Windows-1250 van beállítva karakterkódolásnak, de próbáltam már UTF-8-al is(Nem tudom miért hittem benne, hogy segítene, de gondoltam megpróbálom). A kérdés lényege az lenne tehát, hogy milyen módszer van arra, hogy fordításkor és futtatáskor is rendesen kezelje a CodeBlocks az ékezetes karaktereket?
-
krisztianAMG
senior tag
Kivettem a ciklust, futtatást: 1-es beüt, Enter. Szépen ki is írja, hogy "Ahoj". Utána F1, de egy 1-est ír, újabb Enter után pedig egy újabb "Ahoj"-t.
Egyébként igazad volt, 86%-on pörgette szegényt. És ezt kaptuk kiindulási alapnak...
Esetleg javaslat, merre induljak, hogy normálisan legyen megoldva?A feladat egy egyszerű játék: Kidob egy random karaktert, majd méri az idő, ami alatt azt a gombsoron leütöd. Plusz kiegészítésként kell tudnia: F1- Help, F2 - indítás...
-
Karma
félisten
válasz
krisztianAMG #4050 üzenetére
Elvileg ha az a _kbhit() függvényhívás nem lenne ott, ennek a kódnak működnie kéne - az F1-12 és más spéci gombok kezelése már benne van a switchben (00 és E0). Próbáld meg azt az if-et kivenni, egyébként sincs semmi értelme.
Ezt most csak spekulálom, de szerintem ha az benne van, végtelen ciklusban pörgeti a CPU-t (egy magot 100%-on), amíg nem ütsz le egy billentyűt. Ami nagyon gáz.
-
krisztianAMG
senior tag
Sziasztok!
Suliban kaptunk egy ilyen kiinduló anyagot, amit tovább kellene fejleszteni:
#include "stdafx.h"
#include <stdio.h>
#include <time.h>
#include <conio.h>
int main()
{
unsigned char ch=0;
do {
if(_kbhit())
{ ch = getchar();
switch(ch)
{
case 0x00: printf("\n[Fx] code:");
printf("%d\n",getchar());
break;
case 0xE0: printf("\n[Xx] code:");
printf("%d\n",getchar());
break;
case '1': printf("Ahoj");
break;
case '2': printf("Hello");
break;
case 13 : printf("\n");
break;
default: printf("%c",ch);
}
}
} while(ch != 27);
printf("\n\nVege...\n\n");
return 0;
}A normál gombokat beolvassa gond nélkül, de az F1,F2,... ESC és tsa. már nem megy át. Hol a hiba? Mit nem veszek észre?
-
Karma
félisten
A C standard qsort függvény tényleg nem stabil, azaz átrendezheti az egyenlő elemeket.
Viszont nem kell n!-szor végigjárnod a tömböt (ez még a legegyszerűbb beszúrásos rendezésnél is rosszabb gondolat, ami csak n^2-es lépésszámú).
Nézz szét a rendezési algoritmusok között, keress egyet ami tetszik és stabil, és implementált. Javaslom az összefésüléses rendezést, ahogy a wiki is említi, a C++ STL-ben ez érhető el stable_sort néven.
(De ha kicsit keresgélsz, találhatsz implementációt készen is. Nem teszteltem.)
-
Davs
tag
Hali!
Tombot szerertnek sorba rendezni. Legvegsobb esetben megirnam magam az algoritmust, de azert erdekel, hogy van-e direkt az en problemamra mar letezo algoritmus.
Van egy tombom, aminek minden eleme egy pointer egy strukturara, amiben van egy int, ami szerint rendezni kell. qsort() segitsegevel sorba is tudtam rakni a tombot, viszont nagyon fontos lenne, hogy ha ket elemben az a bizonyos int _egyenlo_, akkor a sorbarendezes utan megmaradjon az _eredeti_ sorrend. Szoval ha a 2. es a 7. elem erteke is pl 9, akkor a rendezett tombben eloszor a 2., utana pedig a 7. elem szerepeljen. Utanaolvastam a quicksortnak, ami ugy feldarabolja a tombot es aprankent rendezi (ha jol ertettem) ami miatt az utobbi kriterium nem teljesul. Valami otlet?Ha nem lenne megfelelo beepitett sorbarendezesi funkcio, akkor gondolom ugy kellene csinalnom, hogy vegigjarom a tombot n! - szor es minden iteracioban megkeresem a legnagyobb szam elso helyet amit aztan elore teszek..vagy volna egyszerubb megoldas is?
-
bucsupeti
senior tag
válasz
hoffman_ #4043 üzenetére
100-tól csökkenve 100 db páratlan szám csak úgy van, ha negatív számokat is veszünk, vagy ha egy páratlan számot többször is értékül adunk. Van valami pontosítás a feladattal kapcsolatban ezen a téren?
Mert ha nincs akkor én úgy csinálnám hogy 99-től visszafelé indítok egy ciklust (for), úgy hogy kettesével lépked visszafelé. Tárolnám a számot az aktuális és az aktuális+1 indexű elemben.
Ezzel kész is a feltöltés csökkenő sorrendben.
Ezután egy újabb ciklusban feldolgoznám a tömböt. A ciklus végigmegy a tömbön és összeadogatom két változóban az elemeket. Egyikben a páros indexűeket, másikban a páratlan indexűeket. (Vedd észre, hogy mivel két egyforma elem követi egymást, ezért az összeg pontosan ugyan annyi lesz a végén mindkét változóban, mivel a tömb valahogy így néz ki: 99,99,97,97,95,95...1,1)
Ezután kiírom a páros indexűek összegét, majd a páratlan indexűek összegét elosztom 50-el és azt írom ki (ez lesz az átlag).Ne erőltesd bele egy ciklusba az egészet (persze úgy is meg lehet csinálni).
Számomra a kérdés a tömb feltöltésének pontos szabálya.
-
hoffman_
nagyúr
Sziasztok! Egy kis segítségre lenne szükségem. Először elmondom a szitut. Már több szemeszter óta vergődök az alap C programozással, nem szeretem, nem áll rá az agyam. Idén már pénzbe is fájt, úgyhogy megpróbálom megemberelni magam, és most igyekszem megérteni, legalább nagyon alapszinten. Úgy ahogy haladok, de persze nevetséges tudásom van, ami nem is baj, csak a zh-n vergődjek át. A következő feladatot kellene (többek közt) megoldanom, tudnátok segíteni?
Töltsön fel egy egész típusú 100 db elemet tartalmazó tömböt páratlan számokkal 100-tól csökkenő értékkel! Adja össze a páros számú indexen levő elemek értékét! Vegye az átlagát a páratlan indexen levő tömb elemeknek!
Megmutatom, mire jutottam: (ja, nem egész típusú a tömböm, ezt elfelejtettem figyelembe venni, ennek lehet valami hátránya? a hsz végén szóba hozom a típuskonverziót, azért, mert sok feladatnál használtunk már double-t, és akkor int-re konvertáltunk, és ez a rutin megmaradt, csak nem teljesen tiszta)
int main()
{
double t[100]; unsigned int i=0, j=100, pl=0, ps=0;
while(i<100)
{
t[i]=j;
if((j%2))
/* {
if((j&0xF1)==0x55)
{
pl=pl+t[i];
}
}*/
printf("%lf\n", t[i]);
i++;
j--;
}
printf("paratlan indexu elemek erteke %d", pl);
return 0;
}A tömbfeltöltés még sikerült. A program nyilván nincs kész. A gondom az, hogy ha belerakom a kicsillagozott részt, akkor egyrészt nem jó eredményt dob(úgy gondolom, hogy úgy sz*r az, ahogy van), és a tömbfeltöltést is elrontja, mert nem csak a páratlan számok kerülnek be, hanem mind.
A logikám az volt, hogy maszkolni kéne a következő bitsort: x1x1x1x1-et, az 11111111-al, az x-ek helyén mindegy mi van, a páros bitek helyén meg 1-es ugye, mivel az kell, és amelyik j-re ez teljesül, azokat összeadja pl változóba.
Most hogy visszanézem, kicsit belegabalyodtam, szerintem nem is j-t kell vizsgálni, de tényleg nem tudom már hogyan tovább. Ez a maszkolósdi amúgy se megy, illetve szerintem egy típuskonverzió is kéne valahova, de ahhoz sem értek.
Valaki tud életet menteni?
Előre is köszönök minden segítséget
-
Retekegér
MODERÁTOR
válasz
neil_mullen #4040 üzenetére
A 28 megás nem tartalmaz fordítóprogramot, a harmadikat töltsd le.
-
neil_mullen
aktív tag
válasz
Retekegér #4039 üzenetére
az elsőt telepitettem xp-re. ezt irja ki:
Probably the toolchain path within the compiler options is not setup correctly?!
Goto "Settings->Compiler and debugger...->Global compiler settings->GNU GCC Compiler->Toolchain executables" and fix the compiler's setup.a settingsbe a debugger config meg üres...
-
Retekegér
MODERÁTOR
válasz
neil_mullen #4038 üzenetére
Dob valami hibakódot?
Melyik setupot telepítetted?
-
neil_mullen
aktív tag
sziasztok, feltelepitettem xp-re a code blocks-ot, de az f9 (futtatás) nem akar müködni. valaki nem tudja mit kell beállitani?
előre is köszi, fontos lenne.
-
Jester01
veterán
Valóban.
Nem gondoltam, hogy ez így meg van kötve ezért nem is néztem utána.
De most megtettem így még két pont érdekes:An implementation may allocate any addressable storage unit large enough to hold a bit-field.
Tehát még ha el is fogadja a char-t akkor sem kötelező neki abban tárolni.
Továbbá:The order of allocation of bit-fields within a unit (high-order to low-order or low-order to high-order) is implementation-defined.
Vagyis a fenti példában a bit0-7 tagok egyáltalán nem biztos, hogy a névből következő helyiértéknek felelnek meg.
-
ravenwood
csendes tag
valaki aki ért mesterséges intelligencia alap szintű programozásához RTS játékba az vegye fel velem privátba a kapcsolatot nem fogja megbánni
-
skylaner
senior tag
typedef struct bitfield
{
unsigned bit7:1;
unsigned bit6:1;
unsigned bit5:1;
unsigned bit4:1;
unsigned bit3:1;
unsigned bit2:1;
unsigned bit1:1;
unsigned bit0:1;
} bitfield_t;Ennek a sizeof() szerint miért 4 byte a mérete?
function xxxx (unsigned char num)
{
bitfield_t* mask = (bitfield_t*)#
.......
}1 byte-os adatra mutatok egy olyan mutatóval amely a fordító szerint 4 byte-os "blokkokat értelmez"...
Lehet ebből gond? -
PumpkinSeed
addikt
Újabb probléma.
Van egy 287528739523985 számsorozat. Ami mindegy milyen számokból áll.
Úgy szeretném bekérni a felhasználotól ezt a számsorozatot, hogy ő folyamatosan írja ezt be, de a program mégis 3 karakterenként értelmezze.
Pl.:
Amit a felhasználó beír:122345782765783
Amit a program lát:
tomb[0]=122
tomb[1]=345
tomb[2]=782
tomb[3]=765
tomb[4]=783 -
dabadab
titán
válasz
PumpkinSeed #4024 üzenetére
De hat ezt kb. ranezesre lehet torni, ennel az is durvabb lenne, ha minden karaktert az elozovel xorolnad.
-
skylaner
senior tag
válasz
PumpkinSeed #4019 üzenetére
Például csinálsz egy structot ami a c++ MAP-hez hasonlóan kulcs-érték párt tárol.
A kulcs lesz az eredeti sztring adott karakterének indexe, az érték pedig a hozzá kódolt string.
Így nem muszáj, hogy a kódolt rész-stringek is ugyan olyan sorrendben legyenek a tömben mint az eredeti string karakterei.struct Crypt
{
int index;
char crypt_text[3]
};
struct Crypt encrypted_text[20];original_string = a l m a
0 1 2 3encrypted_text[0]:
---- index=3 (original_string[3] --> a)
---- crypt_text=3hr
encrypted_text[1]:
---- index=0 (original_string[0] --> a)
---- crypt_text=3hr
encrypted_text[2]:
---- index=2 (original_string[2] --> m)
---- crypt_text=as7
encrypted_text[3]:
---- index=1 (original_string[1] --> l)
---- crypt_text=tz5Megj: Amúgy az nem valami jó titkosító alg. ami két ugyanolyan bemenetre ugyanazt a kimenetet produkálja
a --> 3hr -
dabadab
titán
válasz
PumpkinSeed #4021 üzenetére
Miert, amugy hogy dekodolnad? Na, teljesen ugyanugy
Csinalsz valami ilyen fuggvenyt, hogy:
char decode(char x[3])
es ezt hivogatod:
for (c=0; c < length; c++)
{
decoded_str[ c ] = decode( &encoded_str[c*3] );
} -
dabadab
titán
válasz
PumpkinSeed #4019 üzenetére
Az, amit irtam: a kodolt szoveget haromszor akkora karaktertombben tarolod, mint amekkora az eredeti szoveg volt.
-
PumpkinSeed
addikt
válasz
dabadab #4018 üzenetére
Értem, és akkor valami megoldás arra, hogy hogyan tároljam le azt, hogy több karaktert taroljak le úgy, hogy az visszavezethető legyen arra az 1 karakterre amiből generáltam azt.
Pl.:
Eredeti szöveg: alma
Kódolt szöveg: 3hrtz5as73hr
Kódolt szöveg felosztása: 3hr | tz5 | as7 | 3hr -
dabadab
titán
válasz
PumpkinSeed #4017 üzenetére
Aha, gondoltam, hogy itt valami felreertodott.
Egy char tomb egy helyere csak egy betu fer. Amit te megprobaltal, az a "multicharacter constant", ami igazabol int tipusu, a konkret erteke implementaciotol fugg es eroteljesen ellenjavallott az alkalmazasa (a maximum merete meg szinten implementaciofuggo, van, ahol negy karakterbol is allhat). Ha egyebkent levitted volna ket karakterre, akkor se azt csinalna, amit akarnal, hanem minden bizonnyal a kettobol vagy az egyik vagy a masik karakter kerulne a char tombodbe, nem mind a ketto. -
PumpkinSeed
addikt
-
dabadab
titán
válasz
PumpkinSeed #4015 üzenetére
"egy string elem helyére max 2 darab karaktert lehet betenni,"
Ezt tovabbra sem ertem. Ha az a string[] char tipusu, akkor ott egy elem helyere csak egy karakter fer be. Ha mas a tipusa, akkor meg a konkret tipustol fug, hogy mennyit tudsz oda bezsufolni es mondjuk a logikusan adodo int meg barmilyen modern rendszeren 4 byte-os.
Ha valami olyan kodolast akarsz csinalni, ami fixen egy karakter -> n karakter, akkor a kezdeti char cleartext[20]-at egy char encoded[20*n] tombbe rakd at, semmi ertelme az ilyen trukkozesnek.
-
PumpkinSeed
addikt
-
dabadab
titán
válasz
PumpkinSeed #4013 üzenetére
"Azt tudom, hogy egy pl egy string(i) helyre max 2 karaktert lehet tenni"
Ezt hogy?... Vagy arra gondolsz, hogy az a string tomb intekbol all es azoknak a kulonbozo byte-jait hasznalod fel?
Igazabol nem ertem az egesz felvetest, hogy mit akarsz csinalni es az miert jo -
PumpkinSeed
addikt
-
dabadab
titán
válasz
PumpkinSeed #4009 üzenetére
"van egy n elemű szo[20] karaktertömböm"
Most akkor n vagy 20?
Amugy igazan at se kell rakni, hiszen a szo[20]-ban eleve a betuk ascii kodja van benne. -
buherton
őstag
válasz
PumpkinSeed #4009 üzenetére
Nem tudom kipróbálni, de ez lehet, hogy működik:
for(i = 0; i < 20; i++)
{
szam[i] = (int) szo[i]
} -
PumpkinSeed
addikt
Azt, hogy tudom megcsinálni, hogy van egy n elemű szo[20] karaktertömböm, és karaktertömbben lévő betűk ascii kódját áttegyem egy szamok[20] nevű tömbbe?
-
skoda12
aktív tag
Nagyjabol igen. Ha van egy kulcsod es egy szamod, amirol tudod, hogy a kulccsal es a XOR muvelettel lett titkositva, akkor a XOR-t vegrehajtva a titkositott szamon visszakapod az eredetit. A fenti feladatod azt hasznalja ki, hogy a C-ben a char integralis tipus, igy a begepelt szoveg minden karakteren tudsz bitmuveleteket vegezni.
-
Zsolt1
tag
válasz
skoda12 #4005 üzenetére
1. szám: 101101, 2. szám: 110110. A művelet végrehajtása után 011011-et kapok. Ha megcsinálom ezt a műveletet az eredménnyel + az 1. számmal, akkor visszakapom a 2. számot.
Akkor ezek szerint, a feladatban az 1. szám a begépelt szöveg, a 2. szám a hexadecimális szám, az eredmény pedig a titkosított szöveg, vagyis a mivel a memóriában a szöveget és a hexadecimális számot(mindent) is 2-es számrendszerben tárolja, ezért amikor végigmegyünk a XOR-al, akkor a két értéket a 2-es számrendszerben hasonlítjuk össze és a visszakapott eredményt(2-es számrendszerbeli számot) újból szövegként írjuk ki? -
-
Zsolt1
tag
Sziasztok!
Egy könyvben talált példa értelmezésében kérnék segítséget:
#include <stdio.h>
#include <stdlib.h>
#define KULCS 0xE7
int main()
{
char s[80], *p;
int i;
printf("Kerek egy szoveget:");
fgets(s,80,stdin);
for(i=0;s[i];i++)
{
s[i]^=KULCS; /*Titkosítás*/
}
printf("A titkositott szoveg:\n %s\n",s);
p=s;
while(*p)
{
*p++^=KULCS; /*Visszaállítás*/
}
printf("Az eredeti szoveg:\n%s\n",s);
return 0;
}A példából csak azt a részt nem értem, amikor kizáró vagy segítségével titkosítva lesz a szöveg. Azt tudom, hogy mit jelent a kizáró vagy(csak az egyik feltétel teljesülésénél lesz igaz), viszont nem értem, hogy hogyan lehet titkosítani egy hexadecimális szám + kizáró vagy segítségével. (A feladat a pointereket és sztringeket akarja magyarázni, azért van két különböző ciklus használva.)
-
tototos
addikt
Sziasztok!
Olyat lehet csinálni hogy létrehozok egy struktúrát amiben néhány változónak void típust adok.
Majd ebből a struktúrából létrehozok egy tömböt. És a tömb eleminek adom meg a pontos típust?
pl:typedef struct{
int ID;
void data;
}myStruct;
myStruct[2] array;
int data = 2;
array.data = (int)data;
}
Ú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!
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Trollok komolyan
- Yettel topik
- Béta iOS-t használók topikja
- Samsung LCD és LED TV-k
- Anglia - élmények, tapasztalatok
- Gigabyte alaplap topik
- Projektor topic
- Melyik tápegységet vegyem?
- Samsung Galaxy S22 Ultra - na, kinél van toll?
- További aktív témák...
- Apple Ipad 10.generáció
- Új HP Pavilion x360 14-ek Érintős hajtogatós Laptop Tab 14" -35% i5-1335U 8/512 FHD IPS Iris Xe
- RTX 4080 SUPER,16GB. Ryzen 7 7800X3D, 32 RAM Fury RGB! Garancia!
- Asztali PC , i7 9700K , RX 5700 XT , 32GB DDR4 , 500GB NVME , 1TB HDD
- Dell Inspiron 5406 2-in-1i5-1135G7 16GB DDR4 3200 512GB NVME 14" FHD Érintőkijelző W11Pro
- LG 27GR95UM - 27" MiniLED - UHD 4K - 160Hz 1ms - NVIDIA G-Sync - FreeSync Premium PRO - HDR 1000
- Telefon szerviz helyben - Gyors javítás, akár 30 perc alatt!
- Realme 8i 64GB / Normál állapotban / 12 hónap jótállással
- Több mint 70.000 eladott szoftverlicenc
- AKCIÓ! AMD Ryzen 9 3900X 12 mag 24 szál processzor garanciával hibátlan működéssel
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged