Potřebujete poradit? Ptejte se zde

Programovanie v jazyku C

Příspěvekod Tykejn » 13 led 2021, 16:05 VIP

Zdravím!

Potreboval by som pomoc začal som programovať v C.
Našiel som niekde toto zadanie: https://ctrlv.sk/0mg2
Podmienkou bolo aby to bolo 1 rozmerne pole, bez pouzitia strlen.
Ak by bol niekto taký dobrý a poslal mi celý program aj s komentárom bol by som vďačný.

Pekný deň prajem.
When I'm dead who cares? I don't
VIP: Jailbreak #1 #3 #5| Rats| WEB
Obrázek
Uživatelský avatar
Tykejn
Pokročilý
Pokročilý
 
Příspěvky: 115
Registrován: 17 lis 2017, 08:42
Bydliště: Doma na lehátku

Programovanie v jazyku C

od Rumcajz » 13 led 2021, 16:05

A uz jsi vyzkousel treba tohle? Rumcajz
Rumcajz
Rumcajz
Patriot
Rumcajz
 
Příspěvky: 97323
Registrován: sob 29.led 1999 0:11:22
Bydliště: Doma na lehátku

Re: Programovanie v jazyku C

Příspěvekod ericek111 » 14 led 2021, 04:30

Nech sa páči: https://gist.github.com/ericek111/6869f ... 87ab6172d8 :lol:

Odskúšané na vzorke 10 000 000 stringov (115 MB):
Kód: Vybrat vše
       0,915154000 seconds user
       0,101631000 seconds sys
You either die a сука, or live long enough to become a блять.
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Uživatelský avatar
ericek111
CS:GO Admin
CS:GO Admin
 
Příspěvky: 1418
Registrován: 21 kvě 2017, 12:01
Bydliště: /home/erik

Re: Programovanie v jazyku C

Příspěvekod Tykejn » 14 led 2021, 18:09 VIP

Díky moc, ako robil som to podľa seba ale celé sa mi to dogabalo :D
When I'm dead who cares? I don't
VIP: Jailbreak #1 #3 #5| Rats| WEB
Obrázek
Uživatelský avatar
Tykejn
Pokročilý
Pokročilý
 
Příspěvky: 115
Registrován: 17 lis 2017, 08:42
Bydliště: Doma na lehátku

Re: Programovanie v jazyku C

Příspěvekod TAKEO » 14 led 2021, 18:14

odporucam sa co najskor skamaratit s debuggerom ;)
Obrázek
Uživatelský avatar
TAKEO
Pokročilý
Pokročilý
 
Příspěvky: 113
Registrován: 08 čer 2013, 16:54

Re: Programovanie v jazyku C

Příspěvekod ericek111 » 14 led 2021, 19:54

Možno ak by si radšej napísal, čo ti nefunguje, skôr by ti niekto pomohol a z takej diskusie by sme si všetci niečo odniesli. Včera som musel mať nejakú slabú chvíľku.

Netreba ani debugger používať, stačí si pridať svoje výpisy s hodnotami.
You either die a сука, or live long enough to become a блять.
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Uživatelský avatar
ericek111
CS:GO Admin
CS:GO Admin
 
Příspěvky: 1418
Registrován: 21 kvě 2017, 12:01
Bydliště: /home/erik

Re: Programovanie v jazyku C

Příspěvekod Tykejn » 23 led 2021, 12:26 VIP

https://ctrlv.sk/TWSe

Problém je, že mi na začiatku robí medzeru.
Robil som to tak aby mi za každým slovom dalo medzeru a nejde mi to fixnúť :D
Skúšal som aj printf("\n"); aj if (i < n -1);
When I'm dead who cares? I don't
VIP: Jailbreak #1 #3 #5| Rats| WEB
Obrázek
Uživatelský avatar
Tykejn
Pokročilý
Pokročilý
 
Příspěvky: 115
Registrován: 17 lis 2017, 08:42
Bydliště: Doma na lehátku

Re: Programovanie v jazyku C

Příspěvekod RaidoN » 23 led 2021, 13:40

Počkat, s jakým problémem se teď potýkáš? Že ti to dává mezeru před všechny slova?
Většina lidí není spokojena s výdělkem, měnit práci chce ale málokdo
RaidoNek.eu
Uživatelský avatar
RaidoN
Pokročilý
Pokročilý
 
Příspěvky: 74
Registrován: 15 kvě 2020, 09:04
Bydliště: null

Re: Programovanie v jazyku C

Příspěvekod Tykejn » 23 led 2021, 14:24 VIP

No nie, mam to tak že za každým slovom je medzera, čiže aj za poslednym.
To znamena ze ak ho otočím tak mi medzeru dá "na začiatku"
When I'm dead who cares? I don't
VIP: Jailbreak #1 #3 #5| Rats| WEB
Obrázek
Uživatelský avatar
Tykejn
Pokročilý
Pokročilý
 
Příspěvky: 115
Registrován: 17 lis 2017, 08:42
Bydliště: Doma na lehátku

Re: Programovanie v jazyku C

Příspěvekod RaidoN » 23 led 2021, 18:41

Pošleš mi někam prosím někam Source, nebo máš furt stejný, co poslal ericek?
Většina lidí není spokojena s výdělkem, měnit práci chce ale málokdo
RaidoNek.eu
Uživatelský avatar
RaidoN
Pokročilý
Pokročilý
 
Příspěvky: 74
Registrován: 15 kvě 2020, 09:04
Bydliště: null

Re: Programovanie v jazyku C

Příspěvekod Tykejn » 24 led 2021, 08:00 VIP

Tento program som si spravil ja.


Kód: Vybrat vše
#include <stdio.h>

#define MAX_DLZKA 20 // definovanie maximalnej dlzky pre slovo!

// funkcia na prevratenie slova
void opacne(char slovo[MAX_DLZKA])
{
    int i = 0;
// zistenie poctu znakov (obdoba 'strlen' volania)
    while (i < MAX_DLZKA && slovo[i] != '\0') // hladame 'ukoncovaci' znak, sucasne ale nechceme 'pretiect' vyalokovanu dlzku = 20!
        ++i;
// "spatny" cyklus cez 'dlzku' slova
    while (i >= 0)
        printf("%c", slovo[i--]); // vypisujeme znak po znaku, pricom iterujeme 'odzadu'
}

int main() {
    int n;
// vyzva na zadanie poctu slov
    printf("Zadaj pocet slov:");
// nacitanie poctu slov (dimenzia 2D pola)
    scanf("%d", &n);
// deklaracia 2D pola pre 'slova'
    char slova[n][MAX_DLZKA];
// cyklus cez vsetky slova (n = pocet slov)
    for (int i = 0; i < n; ++i) {
// vyzva na zadanie dalsieho slova
        printf("Zadaj %d.slovo:", i + 1);
// nacitanie dalsieho slova
        scanf("%s", slova[i]);
    }
// cyklus cez vsetky slova
    for (int i = 0; i < n; ++i) {
// zavolanie "prevratenia"
        opacne(slova[i]);
// oddelenie jednotlivych slov na vystupe (standardny vystup - terminal)
        printf(" "); // medzera
    }
    return 0;
}
When I'm dead who cares? I don't
VIP: Jailbreak #1 #3 #5| Rats| WEB
Obrázek
Uživatelský avatar
Tykejn
Pokročilý
Pokročilý
 
Příspěvky: 115
Registrován: 17 lis 2017, 08:42
Bydliště: Doma na lehátku

Re: Programovanie v jazyku C

Příspěvekod RaidoN » 24 led 2021, 14:59

Mně to normálně funguje a žádná mezera na začátku není


Zadaj pocet slov:2
Zadaj 1.slovo:ahoj
Zadaj 2.slovo:gs
joha sg

...Program finished with exit code 0
Press ENTER to exit console.
Většina lidí není spokojena s výdělkem, měnit práci chce ale málokdo
RaidoNek.eu
Uživatelský avatar
RaidoN
Pokročilý
Pokročilý
 
Příspěvky: 74
Registrován: 15 kvě 2020, 09:04
Bydliště: null

Re: Programovanie v jazyku C

Příspěvekod Tykejn » 25 led 2021, 07:43 VIP

To viem, preto mi z toho šibe lebo v exe súbory mi robí medzeru :D
https://uloz.to/file/jHmBOXf9YelG/odzadu-main-exe
When I'm dead who cares? I don't
VIP: Jailbreak #1 #3 #5| Rats| WEB
Obrázek
Uživatelský avatar
Tykejn
Pokročilý
Pokročilý
 
Příspěvky: 115
Registrován: 17 lis 2017, 08:42
Bydliště: Doma na lehátku

Re: Programovanie v jazyku C

Příspěvekod ericek111 » 25 led 2021, 10:03

Tiež nemám medzeru na začiatku, macOS a Linux, skompilované s clang, resp. gcc. Medzeru mám len na konci.

Mimochodom, scanf("%s") spoľahlivo spôsobí buffer overflow pri reťazci na vstupe dlhšom než MAX_DLZKA. A v zadaní máš slová na jednom riadku oddelené medzerou.
You either die a сука, or live long enough to become a блять.
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Uživatelský avatar
ericek111
CS:GO Admin
CS:GO Admin
 
Příspěvky: 1418
Registrován: 21 kvě 2017, 12:01
Bydliště: /home/erik

Re: Programovanie v jazyku C

Příspěvekod Tykejn » 25 led 2021, 10:51 VIP

FIxol som to novým programom :D vďakabohu :D
Kód: Vybrat vše
#include <stdio.h>
#include <stdlib.h>

// definovanie maximalnej dlzky pre slovo!
#define MAX_DLZKA 20

// funkcia na prevratenie slova
void opacne(char slovo[MAX_DLZKA])
{
    int i = 0;
// zistenie poctu znakov (obdoba 'strlen' volania)
    while (i < MAX_DLZKA && slovo[i] != '\0') // hladame 'ukoncovaci' znak, sucasne ale nechceme 'pretiect' vyalokovanu dlzku = 20!
        ++i;
// "spatny" cyklus cez 'dlzku' slova
    while (i > 0)
        printf("%c", slovo[--i]); // vypisujeme znak po znaku, pricom iterujeme 'odzadu'
}

int main() {
    int i, n;
// nacitanie poctu slov (dimenzia 2D pola)
    scanf("%d", &n);
// deklaracia/alokacia 2D pola pre 'slova'
    char **slova = (char **) malloc(n * sizeof(char*));
// cyklus cez vsetky slova (n = pocet slov)
    for (i = 0; i < n; ++i) {
// alokacia aktualneho slova (MAX_DLZKA znakov)
        slova[i] = (char *) malloc(MAX_DLZKA);
// nacitanie dalsieho slova
        scanf("%s", slova[i]);
    }
// cyklus cez vsetky slova
    printf("");
    for (i = 0; i < n; ++i) {
// oddelenie jednotlivych slov na vystupe (standardny vystup - terminal)
        if (i > 0)
            printf(" "); // medzera
// zavolanie "prevratenia"
        opacne(slova[i]);
    }
    return 0;
}
When I'm dead who cares? I don't
VIP: Jailbreak #1 #3 #5| Rats| WEB
Obrázek
Uživatelský avatar
Tykejn
Pokročilý
Pokročilý
 
Příspěvky: 115
Registrován: 17 lis 2017, 08:42
Bydliště: Doma na lehátku

Re: Programovanie v jazyku C

Příspěvekod Tykejn » 25 led 2021, 22:45 VIP

Hlavny problem bol v "zlom" interpretovani dlzky slova -> t.j. ked hladate 'tzv.' ukoncujuci znak ('\0'), tak v tom prvom 'while' cykle vo funkcii "opacne" treba pred prevracanim slova tento ukoncujuci=posledny znak este "odratat" -> t.j. neprevracat!

To bol cely ten problem, co vznikol -> hlavne ma desi a vadi mi, ze som si to v tom online-kompilatore vobec nevsimol -> pretoze je to zjavne "netlacitelny" znak, tak mi to tam nezobrazilo ... terminal je ale terminal a ma svoje specifika. Takze pre mna tiez dobra "skusenost" do buducna!
When I'm dead who cares? I don't
VIP: Jailbreak #1 #3 #5| Rats| WEB
Obrázek
Uživatelský avatar
Tykejn
Pokročilý
Pokročilý
 
Příspěvky: 115
Registrován: 17 lis 2017, 08:42
Bydliště: Doma na lehátku

Další

Zpět na Poradna

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 2 návštevníků