Anonymní profil Zajcev – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama

Anonymní profil Zajcev – Programujte.comAnonymní profil Zajcev – Programujte.com

 

Příspěvky odeslané z IP adresy 147.251.213.–

Zajcev
C / C++ › Prehladavanie adresarovej st…
16. 12. 2012   #169018

Vyriesene.

Zajcev
C / C++ › Prehladavanie adresarovej st…
16. 12. 2012   #168997

Tak uz to prehlada celu adresarovu strukturu (vnorene zlozky ...)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <dirent.h>
#include <sys/types.h>
#include <sys/stat.h>

int prehladaj(char *);

int main()
{
    if (prehladaj("./"))
        return 1;

    return 0;
}

int prehladaj(char * dir_name)
{
    DIR * adresar = opendir(dir_name);
    //usleep(20000);
    if (adresar == NULL)
    {
        fprintf(stderr, "Nejde otvorit zadany adresar\n");

        return 1;
    }

    struct dirent * polozka_adresara = readdir(adresar);
    struct stat statbuffer;

    while (polozka_adresara != NULL)
    {
        char * cesta_suboru = calloc(100, sizeof(char));

        char * meno_nadradeneho = calloc(100, sizeof(char)); // meno nadradeneho adresara (adresar do ktoreho sme vstupili)

        if (!strcmp(dir_name, "./"))
            strcpy(cesta_suboru, polozka_adresara->d_name);
        else
        {
            strcat(cesta_suboru, dir_name);
            strcat(cesta_suboru, "/");
            strcat(cesta_suboru, polozka_adresara->d_name);

        }

        if (stat(cesta_suboru, &statbuffer) == -1)
        {
            free(cesta_suboru);
            free(meno_nadradeneho);

            polozka_adresara = readdir(adresar);
            continue;
        }

        if (S_ISDIR(statbuffer.st_mode))
        {
            if (strcmp(polozka_adresara->d_name, "..") && strcmp(polozka_adresara->d_name, "."))
            {
                printf("%s\n", cesta_suboru);
                //printf("\n\n\n\n\n-----%s-----\n\n\n\n", strcpy(cesta_suboru, meno_nadradeneho));
                prehladaj(cesta_suboru);
            }
        }
        else
            printf("%s\n", cesta_suboru);

        polozka_adresara = readdir(adresar);

        free(cesta_suboru);
        free(meno_nadradeneho);
    }

    closedir(adresar);

    return 0;
}

Este by som potreboval aby to najprv vypisalo len subory a zlozky v aktualnom adresari. Proste aby sa to nevnorovalo hned jak najde novy adresar. Nejake napady ajk to docielit ?

Dik za pomoc.

Zajcev
C / C++ › Prehladavanie adresarovej st…
15. 12. 2012   #168973

Dik , ja som to potom prepisal na toto :

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <dirent.h>
#include <sys/types.h>
#include <sys/stat.h>

int prehladaj(char *);

int main()
{
    if (prehladaj("./"))
        return 1;

    return 0;
}

int prehladaj(char * dir_name)
{
    DIR * adresar = opendir(dir_name);
    //usleep(20000);
    if (adresar == NULL)
    {
        fprintf(stderr, "Nejde otvorit zadany adresar\n");

        return 1;
    }

    struct dirent * polozka_adresara = readdir(adresar);
    struct stat statbuffer;

    while (polozka_adresara != NULL)
    {
        char * cesta_suboru = calloc(100, sizeof(char));

        char * meno_nadradeneho = calloc(100, sizeof(char)); // meno nadradeneho adresara (adresar do ktoreho sme vstupili)

        if (!strcmp(dir_name, "./"))
        {
            strcpy(cesta_suboru, polozka_adresara->d_name);
        }
        else
        {
            strcat(cesta_suboru, dir_name);
            strcat(cesta_suboru, polozka_adresara->d_name);
        }

        if (stat(cesta_suboru, &statbuffer) == -1)
        {
            free(cesta_suboru);
            free(meno_nadradeneho);

            polozka_adresara = readdir(adresar);
            continue;
        }

        if (S_ISDIR(statbuffer.st_mode))
        {
            if (strcmp(polozka_adresara->d_name, "..") && strcmp(polozka_adresara->d_name, "."))
            {
                strcpy(meno_nadradeneho, polozka_adresara->d_name);
                strcat(meno_nadradeneho, "/");

                printf("%s\n", cesta_suboru);
                printf("\n\n\n\n\n-----%s-----\n\n\n\n", cesta_suboru);
                prehladaj(meno_nadradeneho);
            }
        }
        else
            printf("%s\n", cesta_suboru);

        polozka_adresara = readdir(adresar);

        free(cesta_suboru);
        free(meno_nadradeneho);
    }

    return 0;
}

Neviem si ale rady stym, ze mi to funguje len do maximalne druheho vnorenia ... Problem vidim na riadku 66, konkretne mu pri dalsom vnoreni predavam zly argument (zlu cestu). Neviem si stym bohuzial dat rady. Nejake napady jak to opravit aby to vypisovali korektne celu adresarovu strukturu ?

Dakujem za pomoc.

Zajcev
C / C++ › Prehladavanie adresarovej st…
15. 12. 2012   #168919

Zdravim,

potreboval by som napisat funkciu ktora dostane ako parameter cestu k adresaru a potom tento adresar prehlada do hlbky. Vypise nazvy suborov  a podadresarov a tiez sa vnori do podadresara a pokracuje az dokym neprehlada cely adresarovy strom. Nakodil som nieco nasledovne :

#include <stdio.h>
#include <dirent.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>

void adrr(char *);

int main(void)
{
    adrr("/");

    return 0;
}

void adrr(char * retazec)
{
    DIR * adr = opendir(retazec);

    if (adr == NULL)
    {
        printf("Chyba\n");

        //return 1;
    }

    struct dirent * xx ;
    struct stat test;

    xx = readdir(adr);

    while (xx != NULL)
    {
        xx = readdir(adr);
        int controll = 1;

        if (xx == NULL)
            break;

        if(strstr(xx->d_name, ".."))
        {
            controll = 0;
        }

        //printf("%s", xx->d_name);

        char * pt = malloc((sizeof(char) * strlen(xx->d_name)) + 2);

        strcpy(pt, retazec);
        strcat(pt, xx->d_name);

        printf("%s", pt);

        if (!(stat(pt, &test)) && (controll))
        {
           if (S_ISDIR(test.st_mode))
           {
               printf("\t-adresar\n");
               adrr(pt);

           }
           else
               printf("\n");

        }
        else
            printf("Chyba\n");


        free(pt);
    }
}

Nanestastie mi to padne pri behu programu. Niesom si isty ci som osetril spravne aby to nevychadzalo z adresara do jeho nadradeneho. Nejake napady kde som spravil chybu ? 

Dakujem za pripadnu pomoc.

Zajcev
C / C++ › Dynamicky clen v strukture
13. 12. 2012   #168789

Diki moc, uz to snad chapem a ide to :)

Este by som mal jednu dalsiu otazku. Konkretne existuje nejaky sposob jak ku polu ukazatelov na struktury ktore som dynamicky alokoval pridat dalsiu zlozku pola tiez typu danej struktury ? Napriklad mame strukturu  

struct typy {
	char typ[4];
	int pocet;
};

kde typ bude reprezentovat typ daneho suboru a pocet , pocet vyskytov tohto typu suboru v adresari. Ked najdem dalsi  subor s typom ktory uz je obsiahnuty tak proste inkrementujem premennu pocet a ked to bude novy typ tak pridam do toho pola dalsiu zlozku a pocet sa bude rovnat 1 ... V napovede mame toto : "Nápověda: typ souboru a počet výskytů lze udržovat ve vhodné dynamicky alokované struktuře a další přidávat jen v případě, že daný typ souboru se ještě nevyskytuje". Nejak neviem jak to zapisat.

Nejake napady ?

Dakujem za pripadnu odpoved.

Zajcev
C / C++ › Dynamicky clen v strukture
13. 12. 2012   #168784

takze toto by mohlo byt spravne ? 

#include <stdint.h>

struct friends
{
    char meno[50];
    int pocet;
    char** zoznam;
};

int main()
{
    struct friends lol;
    
    lol.zoznam = malloc(sizeof(*char) * 10);
    *lol.zoznam = malloc(sizeof(char) * 50);
            
    return 0;
}

ma 10 kamaratov a dlzka mena je max 49 znakov + \0 ?

Zajcev
C / C++ › Dynamicky clen v strukture
13. 12. 2012   #168780

aha takze v podstate je to pole ukazatelov na retazce. Nejak ale neviem jak mu korektne vyclenit ziadanu velkost 

#include <stdint.h>

struct friends
{
    char meno[50];
    int pocet;
    char** zoznam;
};

int main()
{
    struct friends lol;
    
    lol.zoznam = malloc(sizeof(char[50]) * 10);
            
    return 0;
}

je asi nekorektne ... Jak inicializovat potom jednotlive zlozky zoznamu, a jak ich uvolnit spat systemu ?

Zajcev
C / C++ › Dynamicky clen v strukture
13. 12. 2012   #168777

   

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

struct friends
{
    char meno[50];
    int pocet;
    char * zoznam;
};

int main(int argc, char * argv[])
{
    if (argc != 3)
    {
        printf("Zly pocet argumentov\n");

        return 1;
    }

    struct friends lol;

    lol.zoznam = malloc(sizeof(char[50]) * 50);

    strcpy(lol.zoznam[0], "Blazko");

    printf("%c", lol.zoznam[0]);
   

nejak tomu celkom nechapem. zoznamu som teda v mainu vyclenil miesto na 50 clenne pole kde jedna polozka moze ulozit 50 znakovy retazec. Korektne to ale ocividne neni. 

Zajcev
C / C++ › Dynamicky clen v strukture
13. 12. 2012   #168774

Zdravim,

predstavme si ze mame strukturu  

struct friends
{
    char meno[50];
    int pocet;
    char * zoznam = malloc(sizeof(meno) * pocet;
};

Jak by sa to dalo prosim korektne zadefinovat, aby ukazatel zoznam mal vyclenenu taku velkost pamate do ktorej sa zmesti mien najviac dlhych 50 znakov s poctom ktore bude obsiahnute v clenskej premennej pocet  ?

Potrebujem proste zo zadania "Tato struktura bude v sobě obsahovat jméno osoby, počet přátel a dynamicky alokované pole nebo seznam se jmény všech přátel." splnit toto aby sa do toho zoznam vpratal zoznam vsetkych mien priatelov. Snad som to napisal zrozumitelne.

Nejake napady ?

Dakujem za pripadnu odpoved.

Jelcin
PHP › Vynutit unikatnost
21. 10. 2012   #165027

Zdravim, tabulku vytvaram nasledovne CREATE TABLE TOVAR (MENO char[10], POCET INT). V sql vobec nerobim. Neda sa nejak jednoducho urcit aby v stlpci MENO museli byt vzdy unikatne mena ? Napriklad ked tam je uz meno XXX tak tam uz nemozem pridat znova XXX. Proste aby mi to nedovolilo zapisat ? Da sa to nejak nastavit alebo to budem musiet osetrit tak ze sa najprv pozrem ci to tam uz je a potom to tam pripadne zapisem ...

Dakujem za pripadnu odpoved.

Jelcin
C / C++ › Jak na sqlite
21. 10. 2012   #165018

Jak by sa prosim dalo pristupovat k polozkam v tabulke ? Dajme tomu mame tam jeden zaznam, nejaky nazov a cislo. Ja by som potreboval aby som to cislo vedel ulozit do nejakej premennej a nazov do pola char ... Nejake napady ?

Jelcin
C / C++ › Jak na sqlite
20. 10. 2012   #165000

tak chyba bola v tom &y pritom sql_step. Inac furt nwm kde sa vytvori ten subor.db ? :( Ja by som si ho totiz rad prezrel ci tam tie zaznamy skutocne pridavam ...

Jelcin
C / C++ › Jak na sqlite
20. 10. 2012   #164996

No som troska dalej . Mame cast kodu 

 const char * tabulka = "CREATE TABLE tabulka (MENO char[10], POCET INT)";

    x = sqlite3_prepare(db, tabulka, 0, &y, &tail);

    if(x)

    {
        printf("Nemozno vytvorit tabulku");

        return 1;
    }

    x = sqlite3_step(&y);

if (x == SQLITE_DONE)
        printf("vytvorena");
    else
        printf("NEVYTVORENA");

a furt mi to vypise ze to nieje vytvorene. A taktiez si niesom isty vytvorenim databazi takto ::

 sqlite3 * db;
    sqlite3_stmt * y;
    int x = sqlite3_open(argv[1], &db);
    const char * tail;

    if(x)
    {
         fprintf(stderr, "Neviem otvorit databazu %s\n", sqlite3_errmsg(db));
         sqlite3_close(db);

         return 1;
    }

    if (argc != 2)
    {
        fprintf(stderr, "Chybny pocet argumentov\n");

        return 1;
    }

pretoze v adresari kde pracujem  sa mi nevytvori ziaden subor s priponou .db

Jelcin
C / C++ › Jak na sqlite
20. 10. 2012   #164983

Zdravim , robim pomocou http://www.sqlite.org/…-3071401.zip jednoduchu aplikaciu ktora by mala byt schopna vytvorit novu databazu, vytvorit novu tabulku a nasledne prevadzat s tou zabulkou zakladne operacie.  

Zacal som nejak takto 

sqlite3 * db;
    int x = sqlite3_open(argv[1], &db);

    if(x)
    {
         fprintf(stderr, "Neviem otvorit databazu %s\n", sqlite3_errmsg(db));
         sqlite3_close(db);

         return 1;
    }

kde argument argv[1] predstavuje nazov databazi ktora sa ma vytvorit / otvorit.

Konkretne by ma teraz zaujimalo , ako by som mohol v tejto databazi vytvorit tabulku ktora by obsahovala iba 2 stlpce meno a nejaky pocet.Skusil som nieco nasledovne 

rc = sqlite3_exec(db, "CREATE TABLE table_name (column1 datatype1, column2 datatype2)", NULL, NULL, NULL);

Ale dobre to asi nieje. Jak by som do nej mohol pridat nejaky zaznam (meno a pocet budu ulozene zvlast v premennych) ? Pozeral som sa aj v dokumentacii na oficialnych strankach ale v Cecku zacinam a som z toho jelen :(

Dakujem za pripadnu pomoc.

Zajcev
C / C++ › vlastny hlavickovy subor
6. 10. 2012   #164250

sorry, nejak som si nevsimol ze to tam menim :( Uz to ide, mozte to zmazat ... Este raz sa ospravedlnujem...

Zajcev
C / C++ › vlastny hlavickovy subor
6. 10. 2012   #164249

Zdravim, mal som subor main.c v ktorom som mal par vlastnych funckii + ich prototypy.

Vytvoril som si subor funkcie.h a vlozil tam protytypy funkcii z main.c. Potom som do suboru funkcie.c vlozil definicie funkcii. do main c som vlozil #include ""funckie.h" a do funckie.c som pridal #include "funkcie.h" a #include <stdio.h> ...

Teraz ked sa to znazim prelozit tak to pise 2 chyby , konkretne : error: variably modified 'value' at file scope

a variably modified 'hex_values' at file scope.

V com moze byt chyba ?  Citim sa ako Alica v krajine zazrakov :)

Zajcev
C / C++ › reprezentacia cisla v unsign…
6. 10. 2012   #164244

Aha Dik. Este jedna otazocka mozna to bude zniet sialene

#include <stdio.h>

int main() {
  unsigned int manchester = 0xAAA6AA6A;
  sp=((manchester>>30)&3)^3 , stavB=sp>>1;
  for (int i=30; i>=0; i-=2) {
    unsigned int stav = (manchester >> i) & 3;

    if (stav==0 || stav==3) {
      printf("Error: stejne dva bity\n");
      return 1;
    }    if ( (sp==stav && stavB==1) || (sp!=stav && stavB==0) ) { // toggle
      stavB = !stavB;
    }
    sp = stav;
    printf("%d",stavB);
  }
  printf("\n");
}

keby som chcel aby bol prvy bit vzdy 0 tak by som musel zmenit jak ?

Zajcev
C / C++ › reprezentacia cisla v unsign…
6. 10. 2012   #164237

rad by som ich totiz porovnaval ... (Prve dva a posledne dva)

Zajcev
C / C++ › reprezentacia cisla v unsign…
6. 10. 2012   #164236

Nj vyriesil som to tym placeholderom , Dik.

Este by ma zaujimalo , ze ked som tie bity ukladal do premennej podla tohto "vysledek = (vysledek<<1) | stav;"

a mam tam trebars ulozene 830C tak k dvom najvissim bitom sa dostanem tak ze to logicky vynasobim

(vysledek & 0xC0000000) >> 30 a k dvom najnizsim tak ze to vynasobim (vysledek & 0x03) ?

Zajcev
C / C++ › reprezentacia cisla v unsign…
5. 10. 2012   #164216

ok este taka otazocka , predtavme si ze mame cislo 830C -little endian a ja ho prevediem na big endian co by malo byt 0C83. Problem je ze ked to zobrazim pomocou printf tak sa mi zaciatocna 0 oreze a ja ju tam podla zadania musim mat ... Jak donutit printf aby zobrazoval vsetky nuly zlava ? Aebo jak mu mozem dat nejaku hodnotu podla coho tam tie 0 bude doplnat ?

Zajcev
C / C++ › reprezentacia cisla v unsign…
5. 10. 2012   #164198

njn Dik moc obom :)

Este taka malickost :) Keby som chcel ten retazec na vystupe premenit na cislo ktore odpoveda binarnemu ekvivalntu toho cisla akurat by som ho zobrazoval hexadecimalne , tak to asi spravit tak ze to ukladat do pola a potom previest na cislo alebo tie biti ukladat do nejakej premennej (bit po bite) a nejak im osetrit ich rád ... ?

Zajcev
C / C++ › reprezentacia cisla v unsign…
5. 10. 2012   #164185

totalna kravina ? Mozna ale ja to tak potrebujem :D ale ono sa to sprava jak pisem , prva dvojica bitov vzdy vrati 1 , preto ta 10 sa vyhodnoti na 1, potom zase 10 sa vyhodnoti na 0 pretoze nedoslo ku prechodu (10 je rovnake ako predtym 10).

Potom o kus dal sa 01 vyhodnoti na 1 pretoze doslo k prechodu (keby nasledovalo zase 01 tak sa vyhodnoti na 0 lebo nedoslo k prechodu) a pak najednou zase 10 sa vyhodnoti na 1 lebo doslo k prechodu ...

Zajcev
C / C++ › reprezentacia cisla v unsign…
5. 10. 2012   #164181

ta hodnota x tam je AAA6AA6A a vracia ti to 0011000000110001 a malo by to vratit to co je natom mojom diagmrame v data ... Inac ja nepotrebujem aby to pracovalo podla wikipedii ale podla toho diagramu. To jest prva dvojica bitov vzdy vrati 1, druha ak je rovnaka jak prva vrati 0 , tretia ak je rovnaka jak druha tak zase 0. Proste zmena hodnoty nastava len pri zmene 01 na 10 a naopak. Cize ore 10 01 10 01 01 to vrati 1 1 1 1 0 , pre 01 10 10 10 10 01 to vrati 1 1 0 0 0 1 atd.

Tiez na vstup budu vzdy davane len cisla ktore vyuziju cely unsigned int (obvykle 32b).  Tie cisla co som uvadzal o riadok vyssie su len ako ukazkove ...

Zajcev
C / C++ › reprezentacia cisla v unsign…
5. 10. 2012   #164178

hento je zo zadania ...

inac vitamin nwm ale tam konkretne mi to u mna pise 0011000000110001 ...

Skusil som este nieco taketo 

#include <stdio.h>
#include <unistd.h>

int main(void)
{
    usleep(100000);
    unsigned int hex = 0xAAA6AA6A;
    unsigned int begin = hex & 3;
    unsigned int previous, next, result = 1;

    printf ("1");

    for (int i = 2; i <=30; i += 2)
    {
        previous = (hex >> (i)) & 3;
        next = (hex >> (i+2)) & 3;

        if ((i == 2) && (begin == previous))
        {
            printf("0");
            result = 0;
            continue;
        }
        else if ((i == 2) && (begin != previous))
        {
            printf("1");
            result = 1;
            continue;
        }

        if ((result == 1) && (previous == next))
        {
            printf("0");
            result = 0;
        }
        else if ((result == 0) && (previous == next))
        {
            printf("0");
            result = 0;
        }
        else if ((result == 0) && (previous != next))
        {
            printf("1");
            result = 1;
        }
        else if ((result == 1) && (previous != next))
        {
            printf("0");
            result = 0;







        }


    }

    printf("\n");

    return 0;

}

a fakt tam nwm najist chybu :(((((((((((((((((((  V tej premennej begin su ulozene tie prve dve bity ... Previous je aktualna dvojica a next je dalsia dvojca bitov.

Zajcev
C / C++ › reprezentacia cisla v unsign…
5. 10. 2012   #164165

hmm mozna ma par ludi nepochopilo , ja som konkretne chcel aby z tej binarky ktora je ulozene v unsigned int

co je uplne dole ako dif. manchester vyslo to co je hore (data). K tomu som zosmolil 

 printf("1");
    int result = 1;

    for (int j = 2; j < 28; j += 2)
    {


        unsigned int aktual0 = (hex >> j) & 1;
        unsigned int aktual1 = (hex >> (j+1)) & 1;
        unsigned int aktual2 = (hex >> (j+2)) & 1;
        unsigned int aktual3 = (hex >> (j+3)) & 1;

        if (aktual0 == aktual1 || aktual2 == aktual3)
        {
            printf("niet"); break;
        }
        else if (aktual0 == aktual2 && aktual1 == aktual3)
        {
            if (result == 0){
                printf("0");
            }
            else
                printf("1");

        }
        else if (aktual0 != aktual2 || aktual1 != aktual3)
        {
            if (result == 0)
            {
                printf("1");
                result = 1;
            }
            else
            {
                printf("0");
                result = 0;
            }
        }

    }

niesu na nete nejake vystizne ukazky ako pracovat s  jednotlivimi bitmi v bajte ? Ono ja tym bitovim operaciam snad rozumiem ale par veci mi nieje jasnych.

Zajcev
C / C++ › reprezentacia cisla v unsign…
5. 10. 2012   #164121

Nemozem pouzivat prvky jazyka C++. Nieje mi celkom jasne jak by som mohol vyuzit

for (int i=30; i>=0; i-=2) {
  unsigned char stav = (manchester >> i) & 3;
  if ( stav == 0 || stav == 3 ) {
    ... chyba ... // je nesmysl aby byly cisla 0b11 neb 0b00 (aspon v tomto kodovani)
  } else {
    stav >>=1; // stav je ted 0/1 podle toho jaka hodnota byla opravdu poslana
  }
}

k urcovaniu toho ci sa dve dvojice zhoduju or nie :(

Zajcev
C / C++ › reprezentacia cisla v unsign…
4. 10. 2012   #164112

hmm to je nejak vysoko na mna :D z toho kodu co som zosmolil  vyssie tak ak by premenna hex obsahovala 0xAAA6AA6A       (10 10 10 10 10 10 01 10 10 10 10 10 01 10 10 10)  tak by to malo vypisat 1000001100001100 .  Ja proste nejak neviem najist chybu v tom kode .

Zajcev
C / C++ › reprezentacia cisla v unsign…
4. 10. 2012   #164108

"Proste ak su dve dvojice po sebe rovnake tak sa vrati predosla hodnota, ak nie tak sa vrati opacna hodnota. Snad to bude dobre vidiet na priklade"

To som zase trepol blbost, ak su dve dvojice po sebe rovnake tak sa vrati 0 inac 1 ...

Zajcev
C / C++ › reprezentacia cisla v unsign…
4. 10. 2012   #164107

hmm to bola fakt dost blba chyba :( Este by ma zaujimalo jak porovnavat dve dvojcie bitov tak aby prva dvojica vypisala vzdy 1. Konkretne mam na mysli :

 printf("1");
    int result = 1;

    for (int j = 2; j < 28; j += 2)
    {


        unsigned int aktual0 = (hex >> j) & 1;
        unsigned int aktual1 = (hex >> (j+1)) & 1;
        unsigned int aktual2 = (hex >> (j+2)) & 1;
        unsigned int aktual3 = (hex >> (j+3)) & 1;

        if (aktual0 == aktual1 || aktual2 == aktual3)
        {
            printf("niet"); break;
        }
        else if (aktual0 == aktual2 && aktual1 == aktual3)
        {
            if (result == 0){
                printf("0");
            }
            else
                printf("1");

        }
        else if (aktual0 != aktual2 || aktual1 != aktual3)
        {
            if (result == 0)
            {
                printf("1");
                result = 1;
            }
            else
            {
                printf("0");
                result = 0;
            }
        }

    }

Konkretne by som to mal zosmolit tak, aby prva dvojica bitov hodila jednotku, ak je druha dvojica rovnaka ako prva tak da 0, ak tretia rovnaka ako druha tak 0 ak stvrta rozdielna od tretej tak 1 atd... Proste ak su dve dvojice po sebe rovnake tak sa vrati predosla hodnota, ak nie tak sa vrati opacna hodnota. Snad to bude dobre vidiet na priklade

mame trebars bin cislo 10 10 10 10 10 01 10    tak mi to vypise 1 0 0 0 0 1 1,

pre 10 01 10 10 01 10 01 by to hodilo 1 1 1 0 1 1 1

pre 10 01 10 10 10 10 01 by to hodilo 1 1 1 0 0 0 1

atd. Henten kod mi nejak nejde (hex je cislo kde su tie dvojice bitov a result je predchadzajuca hodnota). Pri zhode 00 or 11 to ma vypisat nejaku hlasku a skoncit ...

Je uz dost neskoro tak to necham lezat do zajtra :).

Dik za pripadnu pomoc ...

Zajcev
C / C++ › reprezentacia cisla v unsign…
4. 10. 2012   #164099

nejak sa v tom asi stracam :D

#include <stdio.h>

int main(void)
{
    unsigned int hex = 0xAAA6AA6A;
    unsigned int bum;
    int i = 1;
    while(i < 32)
{
    bum = (hex >> i) & 1;
    printf("%u", bum);
    i++;
}
    printf("\n");
    return 0;
}

toto mi vypise to binarne opacne (aspon dufam) (asi kvoli tomu little endian predpokladam ?). No a ked miesto 0xAAA6AA6A dam 0xF tak to miesto 1111... vypise len 111... , kde je prosim chyba ?

Zajcev
C / C++ › reprezentacia cisla v unsign…
4. 10. 2012   #164098

Ja to ale nepotrebujem prevadzat , to by som menil specifikator %d na %X vo funkcii printf atd a sa mi to zobrazi jak chcem . Proste ma zaujima ze ked to cislo sa ulozi do premennej ci tam bude v priamom kode , alebo v nejakom doplnkovom atd. Takze cisto teoreticky : Ked nacitam cislo AAA6AA6A a ulozim ho do premennej unsigned int a budem porovnavat dvojicu susednych bitov tak budem pracovat s 10101010101001101010101001101010 a nie s nejakym binarakom v inom tvare ...

Zajcev
C / C++ › reprezentacia cisla v unsign…
4. 10. 2012   #164096

ano, ale mna konkretne zaujima :

povadzme ze si nacitam cislo AAA6AA6A a ulozim ho do premennej typu unsigned int. Teraz by som chcel porovnavat vsetky susedne dvojice bitov (tu by bolo mi dobre dat nejaky typ jak to robit). To cislo AAA6AA6A je teda ulozene v priamom kode 

? (10101010101001101010101001101010) . Alebo ho bude treba na ten priamy kod nejak previest ? Ja som si totiz myslel ze vsetky cisla su ulozene v dvojkovom doplnkovom kode a desatinne cisla su ulozene vo formate ktory popisuje standart IEEE 754.

Dakujem za pripadnu odpoved.

Zajcev
C / C++ › reprezentacia cisla v unsign…
4. 10. 2012   #164094

ok takze v podstate to znamena ze to hexadecimalne cislo sa uklada v priamom bynarnom kode a nie v nejakom doplnkovom atd ?

Cize ten moj zdrojak je v podstate zly ? A jak by som mohol pristupovat konkretne k hocijakemu bitu toho cisla 0xAAA6AA6A ? Jak tam je ulozene to podciarknute acko ? Na najvyssej adrese alebo ?

Zajcev
C / C++ › reprezentacia cisla v unsign…
4. 10. 2012   #164092

hmm Dakujem,

viacmenej by ma zaujimalo preco je tam prave konstanta 0x80000000 a co konkratne znamena (i>>=1, bitovy posun doprava o 1 ? Preco ?). A existuje nejaky jednoduchy sposob pracovania s priamim bynarnim kodom po nacitani ho v hexadecimalke ? Konkretne by mi prislo dost narocne to takto prevadzat zvlast a potom zapisovat bit po bite do nejakej premennej a potom snim az pracovat.

Dakujem za pripadnu odpoved.

Zajcev
C / C++ › reprezentacia cisla v unsign…
4. 10. 2012   #164090

Zdravim,

zaujimalo by ma ako je ulozene hexadecimalne cislo 0xAAA6AA6A ktore je ulozene v premennej o type unsigned int.

Konkretne som zosmolil nasledujuci kod (ano je to dost prasacke)

#include <stdio.h>
#include <math.h>

const int MAX = 32;

int main()
{
    unsigned int manchester = 0xAAA6AA6A;

    double mask = 0;
    unsigned int mask2 = 0;

    for (int i = 0; i < MAX; i++)
    {
        mask = pow(2.0, (i-1));
        mask2 = mask;


        if (manchester & mask2 )
            printf("1");
        else
            printf("0");
    }

    printf("\n");

    return 0;
}

vystup je 00101011001010101011001010101010

ked si vsak prevediem AAA6AA6A do binarnej sustavy tak dostavam

10101010101001101010101001101010.

Respektive ma niekto nejaky napad ako by som mohol pracovat s priamim bynarnim kodom ked ho nacitam cez funkciu scanf trebars ?

Dakujem za pripadnu pomoc.

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032019 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý