Programiranje u C-u - od svega pomalo izdvojena tema

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

Visual Studio i C ? Da li to ide zajedno?

 

Nisam ekspert u jezicima, znam C, ali da li je C samo podskup recimo C++, C# ili? Znam da je u nekim djelovima sintaksa različita, ali pretpotavljam da VS treba sadržavat biblioteke i klasičnog C-a, jer stdio, stdlib i tako neke ima. Ali recimo prilikom korištenja malloca, te funkcije nema. Pitam jer VS nema okruženje baš za C nego za C++, C#, Java, F# ...

 

Također problemi sa secure sintaksama. Ne želi propustiti fopen, strcpy i slično nego forsa na korištenje fopen_s, strcpy_s, ... Vidim na netu da ljuti preko define-a isključe secure warninge ali meni to ne funkcionira.

Jel preporučate da se ostavim VS-a i da uzmem neko jednostavnije okruženje jer mi je primarno C trenutno na fakultetu, mada sam htjeo malo promjeniti okruženje i naučiti nešto novo, samo što pri samom startu više nemam volje.

 

 

Moj PC  
0 0 hvala 0
13 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

Visual C ne postoji od 1989. godine. U verziji 1992. se naziva C/C++ 7.0, a kasnije samo Visual C++.

C nije podskup C#-a, nemaju veze jedan sa drugim. Sličnost sintakse? Pa ako gledaš if, for, while, funkcije, nizove, onda jeste, ali C# je skroz OOP. C je nativni jezik (prevodi se direktno za mašinu) dok je C# managed jezik (dobiva se kôd koji vrti virtualna mašina).

Otvori novi C++ projekt i fajlu sa izvornim kôdom daj ekstenziju .c, umjesto C++ i prevest će se kao C.

VS radi samo sa MS kompajlerom, možda bi bilo bolje da uzmeš recimo DevC++ (da baš taj grozni IDE, koji ništa ne valja...) ili Code::Blocks, pogledaj koji ti više paše. 

 

Tu sam davno pisao o IDE-ovima:
http://www.bug.hr/forum/topic/programiranje/tutorialide-pocetnika-podesavanje/125989.aspx 

Poruka je uređivana zadnji put uto 12.3.2013 16:35 (royalhero).
13 godina
offline
Programiranje u C-u - od svega pomalo

Na slici se vidi kako se isključuju warninzi vezano za fopen, print, scanf, itd. Barem mislim da je to ustvari to. To radiš pod "project properties" - upiši točno 4996.

Inače malloc, calloc i realloc normalno možeš koristiti iz stdlib.h.

0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
Poruka je uređivana zadnji put uto 12.3.2013 16:36 (pr0n_addict).
Moj PC  
0 0 hvala 0
12 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Da li bi mi neko mogao napisati rjesenje za ovaj zadatak :

Na ekrani ispisati "Otkucajte nadimak pjesnika Jovana Jovanovića".Ako se otkuca Zmaj ili ZMAJ ispisati "ODLIČNO",inače na druge odgovore ispisati "ISPRAVAN ODGOVOR JE ZMAJ" ?

Hvala unaprijed

Dina Mustovic
 
0 0 hvala 0
15 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

#include <stdio.h>

#inclue <stdlib.h>

#inlcude <string.h>

 

int main(){

string ime;

printf("Otkucajte nadimak pjesnika Jovana Jovanovica");

scanf("%s", ime);

 

if( strcmp(ime, "Zmaj") == 0 || strcmp(ime, "ZMAJ") == 0) printf("ODLICNO");

else printf("ISPRAVAN ODGOVOR JE ZMAJ");

 

return 0;

}

 

 

nisam kompajlirao i probao, tako da se mozda potkrao koji tipfeler, ali to je to

 
1 0 hvala 0
13 godina
offline
Programiranje u C-u - od svega pomalo

Evo ti ako hoćeš lokalizirani I/O:

 

    #include <stdio.h>
    #include <locale.h>
    #include <wchar.h>
     
    void chomp(wchar_t *str);
     
    int main()
    {
         wchar_t odgovor[32];
         setlocale(LC_ALL, ".852");
         wprintf(L"Otkucajte nadimak pjesnika Jovana Jovanovića: ");
         fgetws(odgovor, 32, stdin);
         chomp(odgovor);
         if(!wcscoll(odgovor, L"ZMAJ") || !wcscoll(odgovor, L"Zmaj"))
             fputws(L"ODLIČNO\n", stdout);
         else
             fputws(L"ISPRAVAN ODGOVOR JE ZMAJ\n", stdout);
       return 0;
    }
     
    void chomp(wchar_t *str)
    {
         int i;
         for(i = 0; str[i]; i++)
             if(str[i] == '\n')
                 str[i] = '\0';
    }
0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
Moj PC  
0 1 hvala 0
12 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

Ovaj postupak je uredu ali kada napisem Zmaj treba pisati ODLIČNO a meni to ne pise nego samo" ispravan odgovor je zmaj" sta treba da uradim ?

Dina Mustovic
14 godina
offline
Re: Programiranje u C-u - od svega pomalo
Nabukodonosor kaže...

Ovaj postupak je uredu ali kada napisem Zmaj treba pisati ODLIČNO a meni to ne pise nego samo" ispravan odgovor je zmaj" sta treba da uradim ?

Probaj ovo:

 

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

 

int main(){

   char ime[40];

   printf("Otkucajte nadimak pjesnika Jovana Jovanovica\n");

   scanf("%s", ime);

 

   if( strcmp(ime, "Zmaj") == 0 || strcmp(ime, "ZMAJ") == 0) printf("\nODLICNO\n");

   else printf("\nISPRAVAN ODGOVOR JE ZMAJ\n");

 

   return 0;

}

WordPress ❤
13 godina
offline
Re: Programiranje u C-u - od svega pomalo
Nabukodonosor kaže...

Ovaj postupak je uredu ali kada napisem Zmaj treba pisati ODLIČNO a meni to ne pise nego samo" ispravan odgovor je zmaj" sta treba da uradim ?

To govoriš za moje rješenje ili? Kod mene dobro ispisuje.

0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
14 godina
offline
Re: Programiranje u C-u - od svega pomalo
pr0n_addict kaže...
Nabukodonosor kaže...

Ovaj postupak je uredu ali kada napisem Zmaj treba pisati ODLIČNO a meni to ne pise nego samo" ispravan odgovor je zmaj" sta treba da uradim ?

To govoriš za moje rješenje ili? Kod mene dobro ispisuje.

Koristi "Nadporuka" :)

WordPress ❤
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
avantgard kaže...

Visual Studio i C ? Da li to ide zajedno?

 

Nisam ekspert u jezicima, znam C, ali da li je C samo podskup recimo C++, C# ili? Znam da je u nekim djelovima sintaksa različita, ali pretpotavljam da VS treba sadržavat biblioteke i klasičnog C-a, jer stdio, stdlib i tako neke ima. Ali recimo prilikom korištenja malloca, te funkcije nema. Pitam jer VS nema okruženje baš za C nego za C++, C#, Java, F# ...

 

Također problemi sa secure sintaksama. Ne želi propustiti fopen, strcpy i slično nego forsa na korištenje fopen_s, strcpy_s, ... Vidim na netu da ljuti preko define-a isključe secure warninge ali meni to ne funkcionira.

Jel preporučate da se ostavim VS-a i da uzmem neko jednostavnije okruženje jer mi je primarno C trenutno na fakultetu, mada sam htjeo malo promjeniti okruženje i naučiti nešto novo, samo što pri samom startu više nemam volje.

 

 

  Promašio si,prvo je u sedamdesetima nastao C,zatim je od njega nastao C++ pa je tek pred kakvih 10 godina došao C#.

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

Molim da mi netko pomogne da riješim ovaj zadatak:

 

Ucitati pozitivan ili negativan cijeli broj i pozvati funkciju koja ce ispitati i ispisati s
kojim cijelim brojevima je djeljiv bez ostatka. Ukoliko je uneseni broj jednak nuli odmah
prekinuti program

 

ja sam započeo ali neznam ga dovršit:

 

#include<stdio.h>

int ispitivanje(int broj)
    {
       int brojac;
       int i;
      

    }




int main(void)
{
    int broj=0;

    printf("Unesi pozitivan ili negativan cijeli broj\n");
    scanf("%d",broj);
    while(broj!=0)
    {
       printf("%d",ispitivanje(broj));
    }


    return 0;
}

 

 
0 0 hvala 0
13 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

#include<stdio.h>

int ispitivanje(int broj)
{
    int brojac;
    for(brojac = 1; brojac<broj; brojac++)
    {
       if(broj%brojac == 0)
       {
          printf("%d\n", brojac);
       }
    }
}
int main(void)
{
    int broj=0;
    printf("Unesi pozitivan ili negativan cijeli broj\n");
    scanf("%d", &broj);
    if(broj!=0)
    {
       isitivanje(broj);
    }
    else
    {
       printf("Broj ne moze biti 0!\n");
    }
    return 0;
}

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

Nije dobro :)

Zadan je cijeli broj, koji moze biti i negativan. Petlja koja raste od 1 do negativnog broja? :P

I trazimo i negativne djelitelje.

 

Treba uzeti apsolutnu vrijednost broja, i brojac ide od -broj do broj :)

 
1 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
royalhero kaže...

#include<stdio.h>

int ispitivanje(int broj)
{
    int brojac;
    for(brojac = 1; brojac<broj; brojac++)
    {
       if(broj%brojac == 0)
       {
          printf("%d\n", brojac);
       }
    }
}

Nije velika greška ali bi ti ova funkcija isptivanje trebala biti tipa void jer ne vraća ništa ... {#}

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

Nije dobro :)

{#} Moja brzina.

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

Misliš na ovo?

 

void ispitivanje(int broj)
{
    int i;
    if(broj < 0)
       broj = -broj;
    for(i = 1; i <= broj / 2; i++)
      if(!(broj % i))
        printf("%d %d\n", i, -i);
}

Kada lajavci laju onda završe ovako: http://i471.photobucket.com/albums/rr77/toropreto/2012-07-0813_30_07.gif
Moj PC  
2 0 hvala 0
17 godina
offline
Programiranje u C-u - od svega pomalo

Dobra fora sa broj/2, jer ako je broj/2 cijeli broj, najveći broj djeljiv sa brojem broj je broj/2, ostali mogu biti samo manji

 

Možemo i korak dalje, pa vrtiti petlju do sqrt(broj), a ispisivati i i broj/i u jednoj iteraciji.

 

 

for(i=1; i*i<=broj; i++)

{

   if(broj%i == 0)

    printf("%d %d %d %d\n", i, -i, broj/i, -broj/i);

}

Poruka je uređivana zadnji put sri 3.4.2013 19:42 (Floki).
 
1 0 hvala 0
13 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

ajde molim vas, jer sam već lud od mindfuckanja , kako bi vi napisali funkciju koja odjednom vraća najveći i najmanji element jendodimenzionalnog polja ali rekurzijom hahahahah :)

Moj PC  
0 0 hvala 0
13 godina
offline
Re: Programiranje u C-u - od svega pomalo
bruno_123 kaže...

ajde molim vas, jer sam već lud od mindfuckanja , kako bi vi napisali funkciju koja odjednom vraća najveći i najmanji element jendodimenzionalnog polja ali rekurzijom hahahahah :)

Evo ti par primjera kako vratiti više vrijednosti - svodi se na vraćanje strukture ili petljanje s pointerima.

Za rekurziju ne znam, inače ju nastojim izbjeći jer mi je još uvijek mindfuck {#}

0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
Poruka je uređivana zadnji put ned 7.4.2013 1:29 (pr0n_addict).
13 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
pr0n_addict kaže...
bruno_123 kaže...

ajde molim vas, jer sam već lud od mindfuckanja , kako bi vi napisali funkciju koja odjednom vraća najveći i najmanji element jendodimenzionalnog polja ali rekurzijom hahahahah :)

Evo ti par primjera kako vratiti više vrijednosti - svodi se na vraćanje strukture ili petljanje s pointerima.

Za rekurziju ne znam, inače ju nastojim izbjeći jer mi je još uvijek mindfuck {#}

ma lako za vraćanje vrijendosti samo me rekurzija zajehe...., ali hvala ti, sada mi je lakše jer znam da nisam retardiran čim je i drugima ljudima problem :)

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

Postoje rekurzivni algoritmi za sortiranje niza. Neznam kako je zamišljeno da se zadatak napravi, ali mozes rekurzivno sortirati niz, i na kraju kad je sortiran vratis prvi i zadnji element.

 
1 0 hvala 0
13 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

znači nemate blage koliko je lagoritam jednostavan, jutros sam se probudio i skužio rješenje hhahahahha toliko je mutav da sam htio plakati nad svojom retardacijom hahahahah

 

void naj(int n, int *p,int *big,int *small){

 if (n==1){

   *big=p[0];

   *small=p[0];

   return;

 }else{

   naj((n-1),p,big,small);

   if (p[n-1]>*big) *big=p[n-1];

   if (p[n-1]<*small) *small=p[n-1];

   return;

 }}

e sada zajebancija sa binarnim hash datotekam hahaha

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

Kako mogu proslijediti statički alociranu 2D matricu funkciji koja prima int**?

Javlja mi da nisu kompatibilni tipovi - čini mi se da je statički alocirana matrica samo niz od n pointera na tip koji si deklarirao dok je ovo drugo jednostavno dupli pointer.

Možda da proslijedim nekakvu adresu, castam matricu u nešto?

 

EDIT: Radi kada castam u int**.

0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
Poruka je uređivana zadnji put pon 15.4.2013 0:46 (pr0n_addict).
Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
pr0n_addict kaže...

Kako mogu proslijediti statički alociranu 2D matricu funkciji koja prima int**?

Javlja mi da nisu kompatibilni tipovi - čini mi se da je statički alocirana matrica samo niz od n pointera na tip koji si deklarirao dok je ovo drugo jednostavno dupli pointer.

Na ovaj način nikako. Dupli pointer ti u biti kaže da je ono na što on pokazuje također pointer. Odnosno da je npr matrica[0] pointer, a znamo da to nije tako, jer je matrica[0] statički niz od N integera. (to je opet ona razlika između pokazivača i polja)

 

pr0n_addict kaže...
Možda da proslijedim nekakvu adresu, castam matricu u nešto?

Postoje dva načina.

 

Prvi, ajmo reći pravilniji, bi bio deklarirati argument funkcije onako kako je deklarirana i matrica, znači ako imaš matricu int n[5][5], onda i bi i argument funkcije trebao biti int nešto[5][5]. Tu C dozvoljava jednu prečicu, a to je da kod deklariranja višedimenzionalnih argumenata veličinu prve dimenzije možeš i izostaviti (zbog razloga o kojima neću sada jer bi odužilo post). Dakle kada se to uzme u obzir onda bi bilo dovoljno deklarirati argument kao int nešto[][5] (ostanimo na primjeru sa 5x5 matricom).

 

Drugi način iskorištava činjenicu da su elementi 2D matrice u memoriji poredani jedan iza drugoga bez praznina između. Znači da bi 2D matrica:

x x x
y y y
z z z

 

u memoriji izgledala: x x x y y y z z z

 

Pa možeš argument funkcije deklarirati kao obično polje ili pokazivač, te ručno računati indekse svakog elementa pomoću klasične formule: "Y*širina+X". Gdje je 'Y' željeni red, 'X' željeni stupac, a 'širina' je duljina svakog reda (odnosno broj stupaca u svakom redu).

 

Evo ti i primjeri za oba načina pa analiziraj:

#include <stdio.h>

void ispis2(int *m)
{
    int n, i;

    for (n=0; n<3; n++)
    {
        for (i=0; i<3; i++)
        {
            printf("%d ", m[n*3+i]);
        }
        printf("\n");
    }

    printf("\n");
}

void ispis(int m[][3])
{
    int n, i;

    for (n=0; n<3; n++)
    {
        for (i=0; i<3; i++)
        {
            printf("%d ", m[n][i]);
        }
        printf("\n");
    }

    printf("\n");
}

int main()
{
    int matrica[3][3]={{1, 2, 3},
                       {4, 5, 6},
                       {7, 8, 9}};

    ispis(matrica);
    ispis2(matrica);

    return 0;
}

 

0xBADC0DE
Poruka je uređivana zadnji put pon 15.4.2013 15:39 (rustweaver).
13 godina
offline
Programiranje u C-u - od svega pomalo

Našao sam odličan i jednostavan programčić za praćenje potencijalnih memory leakova - Visual Leak Detector.

Besplatan je, naravno. Ne radi kao standardna VS ekstenzija već se mora includeati kroz Property Manager.

 

Instalacija programa:

 1.

2.

Oni koji imaju 64-bitnu verziju VS-a bi trebali ovo isto ponoviti i za Microsoft.Cpp.x64.user samo trebaju umjesto Win32 foldera odabrati Win64 folder.

Dalje se u projektu jednostavno putem pretprocesora koristi - #include "vld.h"

 

Primjer ispisa (kada ima leakova):

 

Ima sigurno bolji alata, ali đaba teško {#}

0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
Poruka je uređivana zadnji put uto 16.4.2013 1:15 (pr0n_addict).
Moj PC  
1 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
pr0n_addict kaže...

Našao sam odličan i jednostavan programčić za praćenje potencijalnih memory leakova - Visual Leak Detector.


Ima sigurno bolji alata, ali đaba teško {#}

Ima dosta takvih alata:

http://winleak.sourceforge.net/

http://www.drmemory.org/

http://www.linkdata.se/sourcecode/memwatch/

I apsolutni teškaš u toj kategoriji (koji doduše radi samo na linuxu): Valgrind

 

A u takvim situacijama i alati za statičku analizu koda mogu biti od koristi (između ostalih grešaka koje pokušavaju pronaći):

http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis#C.2FC.2B.2B

 

GCC od verzije 4.8 dobiva podršku za address sanitizer i thread sanitizer što će pomoći kod debuggiranja korištenja memorije i race conditiona u multithread programima.

 

I to su uglavnom samo FOSS alati, a gdje je tu onda komercijala poput IBM-ovog Purifya i ostatka ekipe...

 

A ako si snalažljiv, moći ćeš nešto od toga obaviti i u dobrom starom WinDBG-u

0xBADC0DE
Poruka je uređivana zadnji put uto 16.4.2013 4:08 (rustweaver).
17 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

Valgrind. Nenadhebiv.

Ne samo da je zabadava, nego je i open source. {#}

Perhaps today IS a good day to die. PREPARE FOR RAMMING SPEED!
17 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Dakle za početak da se ispričam jer je sigurno pitano i odgovoreno više puta i odgovoreno, ali mi je hitno i nemam vremena tražiti
ujutro moram na Inovu tako da sada moram završiti program

ukratko  

 

Ako imam ovakvu funkciju, a trebam natrag u program vratiti theta1, theta2 i theta3 (totalno sam zaboravio pokazivače) kako varijable moram definirati, i kako ih poslati u program

 

 

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

{

  theta1 = theta2 = theta3 = 0;

  int status = delta_calcAngleYZ(x0, y0, z0, theta1);

  if (status == 0) status = delta_calcAngleYZ(x0*cos120 + y0*sin120, y0*cos120-x0*sin120, z0, theta2);  // rotate coords to +120 deg

  if (status == 0) status = delta_calcAngleYZ(x0*cos120 - y0*sin120, y0*cos120+x0*sin120, z0, theta3);  // rotate coords to -120 deg

  return status;

}

 

 

dakle formulacija bi bila

delta_calcInverse( neki broj, neki broj, neki broj, ???, ???, ???);

Ovo je moj potpis...
Poruka je uređivana zadnji put sub 4.5.2013 0:06 (dantex).
Moj PC  
0 0 hvala 0
13 godina
offline
Programiranje u C-u - od svega pomalo

Valjda ovako:

 

Ovo tvoje su inače reference iz C++-a, možda ti se malo pomiješalo.

 

int delta_calcInverse(float x0, float y0, float z0, float *theta1, float *theta2, float *theta3)

{

  *theta1 = *theta2 = *theta3 = 0;

  int status = delta_calcAngleYZ(x0, y0, z0, *theta1); // ne znam što prima ova funkcija odnosno treba li derefencirati ili ne

  if (status == 0) status = delta_calcAngleYZ(x0*cos120 + y0*sin120, y0*cos120-x0*sin120, z0, *theta2);  // rotate coords to +120 deg

  if (status == 0) status = delta_calcAngleYZ(x0*cos120 - y0*sin120, y0*cos120+x0*sin120, z0, *theta3);  // rotate coords to -120 deg

  return status;

}

 

Poziv:

delta_calcInverse( neki broj, neki broj, neki broj, &neki_float, &neki_float, &neki_float); // šalješ adresu od nekog float-a

0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
Poruka je uređivana zadnji put sub 4.5.2013 0:13 (pr0n_addict).
Moj PC  
1 0 hvala 0
Nova poruka
E-mail:
Lozinka:
 
vrh stranice