Programiranje u C-u - od svega pomalo izdvojena tema

poruka: 1.661
|
čitano: 386.833
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
17 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

 

dakle

 

#include <stdio.h>

void main()

{

float andrija;

float ivica;

float josip;

 

delta_calcInverse( neki broj, neki broj, neki broj, &andrija, &ivica, &josip);

 

printf("\n%.2f %.2f %.2f", andrija, ivica, josip);

}

 

će ispisati vrijednosti koje je vratila funkcija delta_calcInverse? bitno mi je da znam što (nije bitno što funkcija radi, ali je bitno da znam da će mi vratiti izračunati float) i kako će mi vratiti

to inače ide na arduino mikrokontroler i iako ispada da nemam pojma, samo pokazivače nisam nikada volio

 

Ovo je moj potpis...
Moj PC  
0 0 hvala 0
13 godina
offline
Programiranje u C-u - od svega pomalo

Da, funkcija prima pointere na floatove i šalješ joj u pozivu adrese od tih floatova kao argumente.

0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
Moj PC  
1 0 hvala 1
17 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Puno hvala =DD

Ovo je moj potpis...
Moj PC  
0 0 hvala 0
17 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Javlja grešku 

"Invalid initialization of non-const reference of type 'float&' from a temporary of type 'float*' "

 

a kada pokušam napraviti pokazivače
int *px = &x; pa uvrstiti px daje

"Invalid initialization of type 'float&' from expression of type 'float*' " 

Ovo je moj potpis...
Moj PC  
0 0 hvala 0
13 godina
offline
Programiranje u C-u - od svega pomalo

Ne znam, to je prilično trivijalno (ovo što sam ponudio kao potencijalno rješenje) - trebalo bi raditi bez greške.

 

Mogao bi pitati na Stack Overflow-u, sigurno su daleko upućeniji.

0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
Poruka je uređivana zadnji put sub 4.5.2013 1:32 (pr0n_addict).
Moj PC  
1 0 hvala 1
17 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

eh da
ali kao što kažu
"Programi su poput žena

Koliko god se ti ljutio i smatrao da si ti taj koji je u pravu, na kraju se moraš pomiriti s činjenicom da si ti u krivu" 

 

 

nakon mukotrpnog guglanja odustao sam i iskopao udžbenik iz c-a

 

 

  int x, y, z;

 

  float *px, *py, *pz;

  px=&x;

  py=&y;

  pz=&z;

 

  delta_calcForward(delta1, delta2, delta3, *px, *py, *pz);

 

i sada radi

 

Ovo je moj potpis...
Moj PC  
0 0 hvala 0
13 godina
offline
Programiranje u C-u - od svega pomalo

Kako ti izgleda prototip te funkcije delta_calcForward?

 

Ti njoj ovdje šalješ dereferencirane float pointere koji pokazuju na integere, čudno mi to izgleda.

Ali, ako radi kako ti kažeš, sve pet.

0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
Moj PC  
0 0 hvala 0
17 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

izgleda ti

 

int delta_calcForward(float theta1, float theta2, float theta3, float &x0, float &y0, float &z0)

 

*px će dati vrijednost koja se nalazi na px-u a px je adresa u ovom slučaju globalne varijable x

bar sam tako ja to shvatio 

Ovo je moj potpis...
Moj PC  
0 0 hvala 0
13 godina
offline
Re: Programiranje u C-u - od svega pomalo
dantex kaže...

izgleda ti

 

int delta_calcForward(float theta1, float theta2, float theta3, float &x0, float &y0, float &z0)

 

*px će dati vrijednost koja se nalazi na px-u a px je adresa u ovom slučaju globalne varijable x

bar sam tako ja to shvatio 

Ne znam na kojem si compileru i u kojem modeu kompajlaš, ali ova tri desna parametra su ti reference iz C++, to ne postoji ni u ANSI C-u ni u C99.

 

Meni javlja milijun grešaka ako ovakvo nešto pokušam u VS-u.

0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
Poruka je uređivana zadnji put sub 4.5.2013 2:42 (pr0n_addict).
17 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

taj arduino IDE koristi avr GCC compiler

Ovo je moj potpis...
Moj PC  
0 0 hvala 0
13 godina
offline
Re: Programiranje u C-u - od svega pomalo
dantex kaže...

taj arduino IDE koristi avr GCC compiler

To mi je pomalo preegzotično, nisam baš upućen.

Možda on dodaje nekakvu dodatnu funkcionalnost.

0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
13 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
dantex kaže...

taj arduino IDE koristi avr GCC compiler

Programiraš li za mikrokontrolere?, ne vidim zašto bi u protivnom koristio avr gcc.

Poruka je uređivana zadnji put sub 4.5.2013 10:09 (royalhero).
17 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

da, arduino je mikrokontroler na bazi atMega čipova

Ovo je moj potpis...
Moj PC  
0 0 hvala 0
13 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Ajd molim vas pomoć, nije za mene nego za kolegu, ja sam u C-u radio prije 2 godine zadnji puta više nemam pojma šta i kako, a ovome treba za pozitivnu ocijenu iz INF. Pa ako bi htjeo napravit i postat riješenje. 

Ja bi mu pomogo ali neznam više. 

 

Hvala.

 

Dolje je zadatak.

Živi život kao da ti je svaki dan zadnji dan!
Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
PC - stručnjak kaže...

Ajd molim vas pomoć, nije za mene nego za kolegu, ja sam u C-u radio prije 2 godine zadnji puta više nemam pojma šta i kako, a ovome treba za pozitivnu ocijenu iz INF.

Inače imamo ovdje politiku izbjegavanja posluživanja gotovih rješenja ali hajde, ako je za pozitivnu ocjenu i to još u srednjoj školi, zašto ne? Očito se neće baviti programiranjem profesionalno...

 

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

int main()
{
    int korisnikov_broj=0, zamisljeni_broj, n=0;
   
    srand(time(NULL));
    zamisljeni_broj=rand()%10+1;
   
    printf("Zamislio sam broj od 1 do 10\n"
           "Imas tri pokusaja da pogodis koji je to broj.\n\n");
          
    while (0xB00B5)
    {
        scanf("%d", &korisnikov_broj);
       
        if (korisnikov_broj > zamisljeni_broj)
            printf("Broj je prevelik\n\n");
        else if (korisnikov_broj < zamisljeni_broj)
            printf("Broj je premalen\n\n");
        else if (korisnikov_broj == zamisljeni_broj)
        {
            printf("Cestitam pogodio si!\n\n");
            break;
        }
       
        if (++n==3)
        {
            printf("Vise srece drugi puta...\n\n");
            break;
        }
    }
       
    system("pause");
    return 0;
}

 

0xBADC0DE
13 godina
offline
Programiranje u C-u - od svega pomalo

Može mala pomoć oko ovog zadatka? Imam funkciju koja traži optimalnu putanju kroz matricu, ali trebala bi isto tako pamtiti i optimalnu putanju odnosno one ćelije u matrici koje čine tu optimalnu putanju u matrici.

To bi trebalo realizirati uspomoć stacka. Nešto mi baš i ne ide {#}

Matrica je ustvari struktura vrijednosti i suma gdje su vrijednosti inicijalizirane na neki rand u rasponu od 0 do 9, a sume su inicijalizirane na INT_MAX.

Ovo što sam dosad modificirao je prijedlog sa SO-a.

Link na Pastebin, malo je preglednije.

 

 

    // prototipovi stack funkcija
     
    stack_t stack_new();
    void stack_delete(stack_t stack);
    void stack_push(stack_t stack, stack_element_t elem);
    stack_element_t stack_pop(stack_t stack);
    stack_element_t stack_top(stack_t stack);
    int stack_is_empty(stack_t stack);
     
    // rekurzivno traži najjeftiniji spust kroz matricu, korisnik daje indeks ćelije od koje se kreće
     
    void traverse(struct path **matrix, unsigned row, unsigned col, int path_cost, int *min_cost, int *cnt, stack_t answer, FILE *f)
    {
       stack_t temp = NULL;
       char buffer[16];
       path_cost += matrix[row][col].value;
       matrix[row][col].sum = path_cost;
       (*cnt)++; // brojanje poziva
       temp = stack_new();
       fprintf(f, "Broj poziva: %d, min_cost: %s, path_cost: %d, value: %d, sum: %d\n", *cnt, *min_cost == INT_MAX ? "Inf" : itoa(*min_cost, buffer, 10), path_cost, matrix[row][col].value, matrix[row][col].sum); // logiranje
       if(matrix[row][col].sum > *min_cost) // ako smo tu već bili prije s manjim utroškom ni ne idi u tu granu
       {
         stack_delete(temp);
         return;
       }
       if(row == MATRIX_ROW - 1) // ako smo na dnu matrice
       {
         if(path_cost < *min_cost) // ako smo pronašli novu optimalnu putanju
         {
           *min_cost = path_cost;
           stack_delete(answer);
           answer = stack_new();
           while(!stack_is_empty(temp))
             stack_push(answer, stack_pop(temp));  
         }
         stack_delete(temp);
         return;
       }
       if (col < MATRIX_COL - 1) // idi dolje desno
       {
         stack_push(temp, matrix[row + 1][col + 1].value);
         traverse(matrix, row + 1, col + 1, path_cost, min_cost, cnt, answer, f);
         stack_pop(temp);
       }
      // idi ravno dolje
     
       stack_push(temp, matrix[row + 1][col].value);
       traverse(matrix, row + 1, col, path_cost, min_cost, cnt, answer, f);
       stack_pop(temp);
     
       if (col > 0) // idi dolje lijevo
       {
         stack_push(temp, matrix[row + 1][col - 1].value);
         traverse(matrix, row + 1, col - 1, path_cost, min_cost, cnt, answer, f);
         stack_pop(temp);
       }
       stack_delete(temp);
    }
0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
Poruka je uređivana zadnji put sub 1.6.2013 2:49 (pr0n_addict).
Moj PC  
0 0 hvala 0
15 godina
online
Re: Programiranje u C-u - od svega pomalo
pr0n_addict kaže...

Može mala pomoć oko ovog zadatka? Imam funkciju koja traži optimalnu putanju kroz matricu, ali trebala bi isto tako pamtiti i optimalnu putanju odnosno one ćelije u matrici koje čine tu optimalnu putanju u matrici.

To bi trebalo realizirati uspomoć stacka. Nešto mi baš i ne ide {#}

Matrica je ustvari struktura vrijednosti i suma gdje su vrijednosti inicijalizirane na neki rand u rasponu od 0 do 9, a sume su inicijalizirane na INT_MAX.

Ovo što sam dosad modificirao je prijedlog sa SO-a.

Link na Pastebin, malo je preglednije.

  Dakle ti si tu pokušao implementirati rekurzivno traženje na puta u matrici? Taj način ti se zove DFS(Depth First Search) i praktički se svodi na isprobavanje svih mogućih puteva, pa stoga algoritam nije brz. Algoritam se može implementirati na više načina. Jedan način je da koristiš rekurzivne funkcije, i ti u stvari tada koristiš sistemski stack jer svi ti pozivi funkcija pohranjuju na sistemski stack. Buduci da je meni cilj pokazati kako algoritam funkcionira, ja ovdje odstupam od odredenih stvari koje ti koristis, no mislim da ces ga lako prilagoditi.

int min_cost = 10000000;
int shortest_path[num_rows], temp_path[num_rows];
void find_shortest_path(int row, int column, int path_cost){
      if(row < 0 || column < 0 || row >= num_rows || column >= num_columns)
              return;

      temp_path[row] = column;
      path_cost += matrix[row][column];
     
      if(row == num_rows - 1){
              if(min_cost > path_cost){
                      min_cost = path_cost;
                     
                      int i;
                      for(i = 0; i < num_rows; i++)
                              shortest_path[i] = temp_path[i];
              }
              return;
      }

      find_shortest_path(row+1, column, path_cost);
      find_shortest_path(row+1, column+1, path_cost);
      find_shortest_path(row+1, column-1, path_cost);
}

 

I funkciju find_shortest_path bi pozivao ovako:

int i;
      for(i = 0; i < num_columns; i++){
              find_shortest_path(0, i, 0);
      }

 

Varijabla min_cost pohranjuje ukupnu vrijednost najkraćega puta. Nju postavimo na neku veliku vrijednost za koju smo sigurni da je veca od svake moguce duzine pute. Polja shortest_path i temp_path služe za pohranjivanje najkraćega puta. Budući da se iz jednoga reda može preći samo u sljedeći(dolje, dolje-desno, dolje-ljevo), onda u svakome redu put može proći kroz samo jedno polje. I mi put pamtimo tako da da za svaki red pamtimo stupac kroz koji je red prolazio. shortest_path zapisuje najkraci put, a temp_path zapisuje trenutni put.

 

Ako smo dosli do zadnjega reda, onda provjeravamo je li trenutni put najkraci. Ako je trenutni put najkraci, onda to zapisemo, i prepisemo polje temp_path u polje shortest_path, zato jer polje temp_path opisuje put do trenutnog elementa.

 

Ako to nije zadnji red, onda jednostavno pozovemo funkciju find_shoretst_path za donji, donji-lijevi i donji-desni element.

 

Umjesto koristenja sistemskoga stacka, mozemo koristiti i neki stack koji smo sami implementirali. Onda cemo ono sto smo gore stavljali kao argumente funkcije jednosta pohranjivati u taj stack. Ja u ovome rjesenju necu koristiti tvoje funkcije, vec cu koristiti svoje tri funkcije za stack:

int stack[10000000], stack_pos = 0;
void stack_add(int value){
      stack[stack_pos] = value;     
      stack_pos++;
}
int stack_pop(){
      stack_pos--;
      return stack[stack_pos];
}

int stack_empty(){
      if (stack_pos == 0)
              return 1;
      return 0;
}

Dakle ovdje imas samo jedan stack, dok ih je kod tvojih funkcija moguce imati koliko god hoces. Svjestan da je ovo jako ograniceno rjesenje i da pri velikim matricama nece raditi, no buduci da je cilj pokazati nacin na koji funkcionira algoritma mislim da ih mogu koristiti. Ti mozes to bez problema prilagoditi na svoje funkcije (kao i cijeli algoritam).

 

E algoritam izgleda ovako:

      int min_cost = 10000000;
      int shortest_path[num_rows], temp_path[num_rows];

      int i;
      for(i = 0; i < num_columns; i++){
              stack_add(0);
              stack_add(i);
              stack_add(0);
      }     
     
      while(!stack_empty()){
              int path_cost = stack_pop();
              int column = stack_pop();
              int row = stack_pop();

              if(row < 0 || column < 0 || row >= num_rows || column >= num_columns)
                      continue;

              temp_path[row] = column;
              path_cost += matrix[row][column];
             
              if(row == num_rows - 1){
                      if(min_cost > path_cost){
                              min_cost = path_cost;
                             
                              int i;
                              for(i = 0; i < num_rows; i++)
                                      shortest_path[i] = temp_path[i];
                      }
                      continue;
              }
              stack_add(row+1);
              stack_add(column);
              stack_add(path_cost);

              stack_add(row+1);
              stack_add(column+1);
              stack_add(path_cost);

              stack_add(row+1);
              stack_add(column-1);
              stack_add(path_cost);

      }

Algoritam je prakticki isti kao onaj gore, samo sto umjesto rekurzivnih funkcija koristimo stack. Tamo smo kao argumente funkcija imali   red, stupa i duljinu puta, a ovdje te argumente tim redom dodajemo u stack, i onda ih obrnutim redosljedom vadimo zato jer stack LIFO struktura.

 

Ako te zanima kako se ovo moze brze napraviti, mogu ti i takav algoritam napisati.

Poruka je uređivana zadnji put sub 1.6.2013 15:32 (captain_soap_McTawish).
13 godina
offline
Programiranje u C-u - od svega pomalo

Hvala puno na iscrpnom odgovoru, probat ću tvoj algoritam ako ću imati vremena.

Inače, ovaj moj i nije tako strašno spor - 20 x 20 matricu prođe za oko 0,3 do 1,5 sekunde u prosjeku zbog toga jer pamtim sumu svake ćelije u koju uđem.

Bez toga mu je trebalo preko 30, 40 sekundi za matricu iste veličine.

Vjerojatno se u praksi koriste mnogo veće matrice (kao i sve ostalo, uglavnom) tako da tu vjerojatno već gubi na uporabljivosti.

 

Inače, ovaj odgovor mi je ponudio neki lik na SO-u, ne mogu reći da baš kužim što je pjesnik htio reći.

0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
Poruka je uređivana zadnji put sub 1.6.2013 14:53 (pr0n_addict).
Moj PC  
1 0 hvala 0
15 godina
online
Re: Programiranje u C-u - od svega pomalo
pr0n_addict kaže...

Inače, ovaj odgovor mi je ponudio neki lik na SO-u, ne mogu reći da baš kužim što je pjesnik htio reći.

Sad mi je jasno na što si ti mislio kad si rekao da algoritam treba implementirati pomoću stacka.

Ono što ti on nudi je vrlo slično ono što sam ja napisao(ono prvo gdje se koristi sistemski stack), ali samo je razlika u tome što on za pohranu puta koristi strukturu stack, a ja obično polje. Ono što je kod njega answer, kod mene je  shortest_path, a ono što je kod njega  temporary kod mene je  temp_path.

 

Temporary ti je trenutni put. Kada ti ideš iz jednoga reda u drugi, ti na vrh stacka  temproray staviš u koji si stupac otišao(dolje, dolje-desno, dolje-lijevo). I tako kada dođeš do kraja,  u  temporary se nalazi cijeli put od početka, pa do toga mjesta. Ako je put jeftiniji ti taj put zapamtiš tako što ga prepišeš u  answer. Sada kada si došao do vrha, onda se vraćaš, i onda usporedno s time brišeš stupce sa  temporary jer viši nisi u njima.

pr0n_addict kaže...

Hvala puno na iscrpnom odgovoru, probat ću tvoj algoritam ako ću imati vremena.

Inače, ovaj moj i nije tako strašno spor - 20 x 20 matricu prođe za oko 0,3 do 1,5 sekunde u prosjeku zbog toga jer pamtim sumu svake ćelije u koju uđem.

Bez toga mu je trebalo preko 30, 40 sekundi za matricu iste veličine.

  To odlična ideja, i na taj način možeš dosta vremena uštediti u određenim slučajevima.

12 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

/* program unosi string i u dinamicki zauzet prostor

odgovarajuce duzine smjesta sve znakove stringa

osim samoglasnika */

 

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int samogl(char x);

int main(){

 

char *rijec = NULL;

char s1[50];

int i,j=0;

printf("unesi string string:\n");

fflush(stdin);

gets(s1);

for (i=0;i<strlen(s1);i++){

   if (!samogl(s1[i])){

     rijec = (char *)realloc(rijec, sizeof(char) * (j+1));

     *(rijec + j)=s1[i];

     j++;

   }

}

for (i=0;i<=j;i++){

   printf("%c", *rijec+i);

}

free(rijec);

 

}

int samogl(char x){

char samogla[]="AEIOUaeiou";

int i;

for (i=0;i<strlen(samogla);i++){

   if (x==samogla[i]){

       return 1;

}

return 0;

}

}

 

Evo malo mi dosadno pa uzeo one skolske primjere malo radit...Ovaj sam nabrzinu odradio, i vidim cudno se ponasa, radi normalno ali ispisuje nekakve gluposti na kraju, divlje znakove...
Ovo boldano sam probao bez *, ali onda ispisuje nekakve strelice, wtf
Inače odavno nisam programirao pa mislim, haj da malo mozak aktiviram kad tamo...pa ako bi mi mogao netko nabrzinu ukazati pogresku bio bih zahvalan...
99% sam siguran da je neka glupost, al eto...{#}
Google Search Is Your Friend
Poruka je uređivana zadnji put uto 4.6.2013 21:42 (lazy_punk).
Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

rijec[i] ili *(rijec + i)

Kada lajavci laju onda završe ovako: http://i471.photobucket.com/albums/rr77/toropreto/2012-07-0813_30_07.gif
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
lazy_punk kaže...
Inače odavno nisam programirao pa mislim, haj da malo mozak aktiviram kad tamo...pa ako bi mi mogao netko nabrzinu ukazati pogresku bio bih zahvalan...
99% sam siguran da je neka glupost, al eto...{#}

1. U main funkciji ti nedostaje return (nije neka tragedija, ali ni ne postoji dobar razlog za izostavljanje)

 

2. Uvjet petlje s kojom ispisuješ konačni string treba biti:

for (i=0; i<j; i++)

a ne:

for (i=0; i<=j; i++)

Jer inače ispisuješ jedan znak previše.

 

3. Ovo nije dobro:

printf("%c", *rijec+i);

jer operator dereferenciranja ima veći prioritet, pa se prvo dereferencira pokazivač, te se vrijednosti koju dobiješ doda vrijednost brojača, pa bi tako za string 'bbb' dobio ispis 'bcd', jer je b+0=b, b+1=c, b+2=d

Stavi aritmetiku sa pokazivačem u zagradu, pa onda dereferenciraj dobivenu vrijednost:

printf("%c", *(rijec+i));

 

4.

U funkciji koja ti provjerava je li znak samoglasnik, return 0 stoji na krivom mjestu, moraš ga maknuti izvan petlje. Zašto? Recimo da si upisao riječ 'ekran', prvo slovo je 'e' i ono je samoglasnik. Petlja počne provjeravati je li znak samoglasnik tako da ga počne uspoređivati sa svim samoglasnicima u nizu počevši od prvog, a to je veliko slovo 'A'. Kako 'e' nije jednako 'A' preskačemo 'return 1' i dolazimo do 'return 0'. Dakle funkcija nam vraća da 'e' nije samoglasnik, odnosno vraća nulu (false) za to slovo (i za sve ostale samoglasnike osim velikog 'A', jer se ne uspijeva izvršiti više puta kako bi usporedila trenutni znak sa svim samoglasnicima).

 

Dakle makni return 0 izvan petlje, jer se pretpostavlja da ako je petlja usporedila znak sa svim samoglasnicima i nije našla podudardnost i prekinula sa return 1, onda ne preostaje ništa drugo nego da znak nije samoglasnik.

 

5.

Nije greška ali možda ne znaš da možeš koristiti operator subskripta niza i na pokazivačima, pa onda ne moraš koristiti aritmetiku kako bi dereferencirao pojedine elemente u nizu, jer je:

*(a+0)

*(a+1)

*(a+2)

isto što i:

a[0]

a[1]

a[2]

 

0xBADC0DE
Poruka je uređivana zadnji put uto 4.6.2013 22:37 (rustweaver).
15 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Jeli znate neki IDE koji kreira sučelje drag and drop metodom u GTK+-u?

Ima li možda neki eclipse plugin za to,ili plugin u nekom drugom IDE-u?

 

 

Ja sam Plavi zmaj.Form the future!Masa,društvo većina,''normalni'' su ništa bez onih pojedinaca koji ih čine.
Poruka je uređivana zadnji put pon 24.6.2013 11:45 (g12356).
Moj PC  
0 0 hvala 0
15 godina
online
Re: Programiranje u C-u - od svega pomalo
g12356 kaže...

Jeli znate neki IDE koji kreira sučelje drag and drop metodom u GTK+-u?

Ima li možda neki eclipse plugin za to,ili plugin u nekom drugom IDE-u?

U GTK+ postoji objekt GtkBuilder koji na temelju određenog xml datoteke kreira sučelje. Ti tu xml datoteku možeš napisati ručno, a možeš i koristiti neki drag and drop plugin ili aplikaciju. I kad jednom imaš xml datoteku, ti nju možeš iskoristiti u bilo kojem programskom jeziku( c/c++, vala, python, itd). Zbog toga ti nije potreban nikakv plugin, već možeš koristiti neki vanjsku drag and drop aplikaciju poput Glade, i onda samo generiranu xml datoteku uključiš u kod. Neki IDE-i poput Anjuta imaju to ugrađeno u sebi.

15 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Kako doći do designera u anjuti?

Kako povezati taj xml sa C kodom?

 

Draže bi mi bilo da ima nešto sa native c kodom.

Ja sam Plavi zmaj.Form the future!Masa,društvo većina,''normalni'' su ništa bez onih pojedinaca koji ih čine.
Poruka je uređivana zadnji put pon 24.6.2013 19:50 (g12356).
Moj PC  
0 0 hvala 0
15 godina
online
Programiranje u C-u - od svega pomalo

Kada kreiras novi projekt tipa GTK+ onda negdje u opcijama trebas izabrati opciju Use GtkBuilder for user interface. Tada ce ti anjuta automatski pripremiti xml file, i povezati ga sa aplikacijom. Nakon toga pronadi negdje file <ime_projekta>.ui i dvaput klikni na njega. Nakon toga otvorit ce ti se Glade. Tu mozes uredivati i sucelje pomocu drag and drop principa.

 
2 0 hvala 1
17 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
g12356 kaže...

Kako doći do designera u anjuti?

Kako povezati taj xml sa C kodom?

 

Draže bi mi bilo da ima nešto sa native c kodom.

Mozes ti i hard kodirati GTK, ali ne preporucam jer nije modularno.

http://zetcode.com/tutorials/gtktutorial/

 

Ovako je nesto sporije (jer program prije pokretanja treba ucitati XML shemu), ali s obzirom na danasnju racunalnu snagu, cak i prosjecnog racunala to nije problem, a puno dobivas kod odrzavanja koda.

https://live.gnome.org/Glade/Tutorials

Perhaps today IS a good day to die. PREPARE FOR RAMMING SPEED!
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
1domagoj1 kaže...
g12356 kaže...

Kako doći do designera u anjuti?

Kako povezati taj xml sa C kodom?

 

Draže bi mi bilo da ima nešto sa native c kodom.

Mozes ti i hard kodirati GTK, ali ne preporucam jer nije modularno.

http://zetcode.com/tutorials/gtktutorial/

 

Ovako je nesto sporije (jer program prije pokretanja treba ucitati XML shemu), ali s obzirom na danasnju racunalnu snagu, cak i prosjecnog racunala to nije problem, a puno dobivas kod odrzavanja koda.

https://live.gnome.org/Glade/Tutorials

  Hvala,ali pošto sam u javi učio swing,što je sličnije hardkodiranom,nekako mi se to čini kao bolja polazna točka za učit.Šteta,nadao sam se drag and dropu,ali mislim da ću sa time nastavit za sada.To i naučit radit objekte u čistom c-u.

Ja sam Plavi zmaj.Form the future!Masa,društvo većina,''normalni'' su ništa bez onih pojedinaca koji ih čine.
17 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
g12356 kaže...

Hvala,ali pošto sam u javi učio swing,što je sličnije hardkodiranom,nekako mi se to čini kao bolja polazna točka za učit.Šteta,nadao sam se drag and dropu,ali mislim da ću sa time nastavit za sada.To i naučit radit objekte u čistom c-u.

Modularnost na prvom mjestu. Uci se pravilno. Ovo drugo nema smisla iz vise razloga, prebaci se na C++ ako zelis OO paradigmu.

Perhaps today IS a good day to die. PREPARE FOR RAMMING SPEED!
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
1domagoj1 kaže...
g12356 kaže...

Hvala,ali pošto sam u javi učio swing,što je sličnije hardkodiranom,nekako mi se to čini kao bolja polazna točka za učit.Šteta,nadao sam se drag and dropu,ali mislim da ću sa time nastavit za sada.To i naučit radit objekte u čistom c-u.

Modularnost na prvom mjestu. Uci se pravilno. Ovo drugo nema smisla iz vise razloga, prebaci se na C++ ako zelis OO paradigmu.

  Ma ne,želim ansi c.Probao sam malo C++ i mislim da je loš jezik.Za objekte je Java zakon.Ok,budem i tako učio,ali za početak kao nekakav 'starting point' ću učit hardkodirano.

 

Cijeli cilj ovoga mi je da naučim C relativno ok,Javu npr. već relativno ok znam. A zašto objekte u C-u?jednostavno mislim da ako želim napredovati sa tim jezikom da bih trebao znati napraviti u njemu barem najosnovniji objekt.Iako ću za OOP uvijek koristiti Javu koliko god budem mogao.

 

A prvi korak za to sam već napravio(evo vam objekt u C-u :P):

  #include <stdio.h>
#include<stdlib.h>
typedef struct stringStruct
{
char* internalRep;
void (*set) (void* ,char* newString);
char* (*get) (void* );
} String;
void set(void* obj,char* newString)
{
String* self=(String*) obj;
self->internalRep=newString;
}
char* get(void* obj)
{
String* self=(String*) obj;
return self->internalRep;
}
String* new_String()
{
String* newInstance=malloc(sizeof(String));
newInstance->set=&set;
newInstance->get=&get;
return newInstance;
}
int main (int argc, char** argv[a])
{
String* ourString=new_String();
ourString->set(ourString,"MyString");
printf(ourString->get(ourString));
free(ourString);
return 0;
}

Ja sam Plavi zmaj.Form the future!Masa,društvo većina,''normalni'' su ništa bez onih pojedinaca koji ih čine.
Nova poruka
E-mail:
Lozinka:
 
vrh stranice