Programiranje u C-u - od svega pomalo izdvojena tema

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

bok,moze mi neko objasniti kako funkcionira rekurzivna funkcija u ovom programu,tj zasto je ovako zapisana.

U program upisujemo slovo i rijec i program nam na kraju napise koliko je ponavljanja tog slova u toj rijeci

 

 

#include <stdio.h>

// Prototip funkcije
int Prebroji(char[], char);


main()
{
// Prijava varijabli
char rijec[256], znak;
int n;

printf("Unesi znak:\t");
scanf("%c", &znak);
printf("Unesi rijec:\t");
scanf("%s", rijec);

n = Prebroji(rijec, znak);

printf("\nBroj pojavljivanja znaka: %c\nu rijeci %s je: %d", znak, rijec, n);
system("pause");
return 0;
}

int Prebroji(char rijec[], char znak)
{
if (*rijec == '\0') return 0;
if (*rijec == znak) return 1 + Prebroji(rijec + 1, znak);
else return Prebroji(rijec + 1, znak);
}

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

bok,moze mi neko objasniti kako funkcionira rekurzivna funkcija u ovom programu,tj zasto je ovako zapisana.

U program upisujemo slovo i rijec i program nam na kraju napise koliko je ponavljanja tog slova u toj rijeci

 

 

#include <stdio.h>

// Prototip funkcije
int Prebroji(char[], char);


main()
{
// Prijava varijabli
char rijec[256], znak;
int n;

printf("Unesi znak:\t");
scanf("%c", &znak);
printf("Unesi rijec:\t");
scanf("%s", rijec);

n = Prebroji(rijec, znak);

printf("\nBroj pojavljivanja znaka: %c\nu rijeci %s je: %d", znak, rijec, n);
system("pause");
return 0;
}

int Prebroji(char rijec[], char znak)

{
if (*rijec == '\0') return 0;
if (*rijec == znak) return 1 + Prebroji(rijec + 1, znak);
else return Prebroji(rijec + 1, znak);
}


else return Prebroji(rijec + 1, znak);
}

Funkcija uvijek poziva samu sebe sa nizom pomaknutim za +1, naravno, a ako nadje da se znak na nekom mjestu u polju podudara sa zadanim znakom, vratit ce 1 + poziv funkcije, a ako ne, samo taj novi pomaknuti poziv..

Tesko ju je nesto kvalitetnije objasnit, jer je uistinu jednostavna. Moras si samo docarat u glavi kako funkcioniraju rekurzije.

Kod rekurzija uvijek imas prekidni uvjet. U ovom slucaju je to kad se procita terminirajuci znak, '/0'.

Dalje imas ispitivanje nekog uvjeta i onda ponovno rekurzivno pozivanje ali ovaj put sa novim argumentima koji ovise o zadatku. To je vise manje to. Probaj jos shvatit da kad se izvrsava ovo return 1 + Prebroji(rijec + 1, znak); jedinica se "zamrze" na tom mjestu, a program ide dalje. Kad fja opet nesto vrati, onda se i taj novi rezultat zamrzne i ide se dalje... I tek kad dodjes do prekidnog uvjeta, svi se ti rezultati od najzadnjeg prema prvom kupe, i zbrajaju/oduzimaju mnoze (opcenito obradjuju) il sto vec. Jako ti je bitno da imas prekidni uvjet, odnosno neki break koji ce se jednom morat izvrsit, jer inace imas beskonacnu petlju, samo sto u ovom slucaju si punis memoriju pa je kao malo gore, iako je tu i kompajler i sam OS da te zastiti.

Googlaj "stack".

Poruka je uređivana zadnji put pon 27.4.2015 16:57 (passat).
17 godina
offline
Programiranje u C-u - od svega pomalo

Ova funkcija radi kao rekurzivna factorial funkcija i isto tako se treba napisati u dva reda.

Uzastopnim pozivima na stog stavimo funkcije kod kojih je n na svakoj sljedećoj funkciji manji za 1.

 

 

#include<iostream>

using namespace std;

int factorial(int n)
{
   if (n <= 0) return 1; // prekid rekurzije, najgornja funkcija na stogu u funkciju iz koje je pozvana  vraca 1
   return n * factorial(n - 1); // trenutna funkcija vraca u funkciju iz koje je pozvana trenutni n te funkcije pomnozen sa vrijednoscu koju je vratila funkcija pozvana iz nje
}
int main()
{
   int n = 5;
   cout << factorial(n) << endl;
   return 0;
}

 

 

 Nije tesko vizualizirati.

Za n = 3

Pozivamo funkcije n=3, n=2, n=1, n=0

Na stogu imamo 4 funkcije.

 

Funkcija n=0 vraća 1 u funkciju n=1

funkcija n=1 vraća 1 * 1 u funkciju n=2

funkcija n=2 vraća 2 * 1 u funkciju n=3

funkcija n=3 vraća 3 * 2, odnosno 6

 

Kako ovu funkciju napisati u dva reda kao factorial funkciju pošto koristi isti princip rekurzije. trenutno slovo == trazano slovo daje 1 ili 0

 

Poruka je uređivana zadnji put pon 27.4.2015 22:40 (Floki).
 
0 0 hvala 0
10 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Imam jedan pomalo glup problem u C-u.

 

U myheaderu imam definiranu strukturu, include-am taj heder u program.c i dinamički alociram memoriju za tu jednu strukturu. Iz tekstualne datoteke trebam učitavat podatke (o nekom računu)..

 

Evo kako to izgleda:

 

typedef struct racun {
  char *prodavac;
  char *kupac;
  Artikl *artikli;
  int broj_artikala;
  float ukupan_iznos;
}Racun;

 

int main(){

  FILE *datoteka = fopen("racun.txt", "r");

  Racun *r = (Racun*)malloc(sizeof(Racun));

  r->prodavac = fgets(r->prodavac, 80, datoteka);

  printf("%s", &(r->prodavac)); // GRESKA!!!

  getchar();
  return 0;
}

Kod se kompajlira ali ne dobijem nikakav ispis, ali imam upozorenje: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char **’ [-Wformat=]

Zašto?

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

Šalješ printf funkciji char** umjesto char* kojega očekuje za "%s" format specifier.

Ne vidim zašto bi trebao slati adresu char pointera.

 

Ovako bi trebalo raditi:

 

printf("%s", r->prodavac);

0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
Poruka je uređivana zadnji put čet 21.5.2015 3:55 (pr0n_addict).
Moj PC  
1 0 hvala 1
10 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

POMOĆ-HITNO! 

Nakon brojnih uzaludnih pokusaja,i dalje ne znam rijesiti ovaj,nakon kompajliranja pise da nesto ne valja a ja ne znam sto, pa ako je tko voljan pomoci,bio bih mu vrlo zahvalan!

Treba napisati progam kojim se izracunava i ispisuje suma parnih brojeva od 1-100. Potrebno je ispisati koliko ima takvih brojeva!

Hvala unaprijed!

Moj PC  
0 3 hvala 0
17 godina
offline
Re: Programiranje u C-u - od svega pomalo
fizicar1 kaže...

POMOĆ-HITNO! 

Nakon brojnih uzaludnih pokusaja,i dalje ne znam rijesiti ovaj,nakon kompajliranja pise da nesto ne valja a ja ne znam sto, pa ako je tko voljan pomoci,bio bih mu vrlo zahvalan!

Treba napisati progam kojim se izracunava i ispisuje suma parnih brojeva od 1-100. Potrebno je ispisati koliko ima takvih brojeva!

Hvala unaprijed!

 stavi taj uzaludni pokušaj pa ćeš dobiti ispravak

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

Kako dobit trenutno vrijeme/datum, treba mi za varijable ne za ispis,

 
0 0 hvala 0
16 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
someguy kaže...

Kako dobit trenutno vrijeme/datum, treba mi za varijable ne za ispis,

 

Napravi to na niže priloženi način.

 

 

ZAMOLBA AUTORU    code-a koji pogoni forum:

  Može li se išta napokon učiniti glede ove nesretne opcije [Formati->Kod] u editoru.

  Naime , na Chrome-u i Exploreru mi baca boldane crte preko code-a tako da na kraju

  kod bolje izgleda bez same opcije [Kod].

  Na Firefox-u radi kako treba iz prve no pošto njega upotrebljavam samo po

  prisili ovo je stvarno loše.

 

 

-----------------------------------------------------------------------

----------------------------- C O D E begin-------------------

-----------------------------------------------------------------------

 

#include <stdio.h>
#include <time.h>

 

int main ()
{
   time_t curr;
   struct tm* info;

   time (&curr);
   info = localtime ( &curr );
   printf ("datum/vrijeme: %s", asctime (info));


   /*=======U STRUCT-u TM VADI PO POTREBI =====
   ==================================
   Member Type Meaning Range
   tm_sec int seconds after the minute 0-60 
   tm_min int minutes after the hour 0-59
   tm_hour int hours since midnight 0-23
   tm_mday int day of the month 1-31
   tm_mon int months since January 0-11
   tm_year int years since 1900
   tm_wday int days since Sunday 0-6
   tm_yday int days since January 1 0-365
   tm_isdst int Daylight Saving Time flag
   ******************************************/

  

   // npr godina i mjesec
   int year = info->tm_year + 1900;
   int mon = info->tm_mon + 1;

   printf ("godina/mjesec: %i/%i", year,mon);


  

   return 0;
}

 

-----------------------------------------------------------------------

----------------------------- C O D E end---------------------

-----------------------------------------------------------------------

 

 

 

 

 

 

 

 

moje aplikacije na play-u : https://play.google.com/store/search?q=nik02droid
Poruka je uređivana zadnji put sri 10.6.2015 18:17 (nik_02).
10 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

U zdataku moram zapisati neki integer koristeći fwrite, ali svaki puta mi zapiše binarni kod. Kako da zapišem intereg koristeći fwrite, jer ne smijem koristiti fprintf?

Poruka je uređivana zadnji put pon 8.6.2015 19:19 (Galt).
 
0 0 hvala 0
14 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

fwrite uvijek piše binarni kod. To što je unutra zapisano i jest zapravo integer, samo što nije formatirani (ljudskim okom čitljiv) zapis.

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

Opet ja....

 

Pokušavam nekako namjestiti Eclipse da mogu raditi i C programe u njemu, ali mi je počeo kidati živce.

 

Znači, ovo:

 

int main()
{
int i, n;

printf("Unesite zeljeni broj novih korsnika: ");
}

 

Radi bez problema, u konzoli dobijem željeni output...

 

A za ovo:

 

int main()
{
int i, n;

printf("Unesite zeljeni broj novih korsnika: ");
scanf("%d", &n);
}

 

ne dobijem apsolutno ništa. -.-

 

U čemu je problem?

 
0 0 hvala 0
17 godina
offline
Programiranje u C-u - od svega pomalo

Imaš problem, tko još koristi Eclipse za C, pa ni ja, ljudi obično koriste Dec C++ ili VS. Zato ne znam o čemu se radi, probaj naći na netu, ovdje naprimjer govore o tome:

http://stackoverflow.com/questions/1897227/problem-with-scanf-in-eclipse-minigw

http://stackoverflow.com/questions/16877264/c-c-printf-before-scanf-issu

 

 

 

Poruka je uređivana zadnji put sri 10.6.2015 14:41 (Floki).
 
2 0 hvala 1
16 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
Galt kaže...

Opet ja....

 

Pokušavam nekako namjestiti Eclipse da mogu raditi i C programe u njemu, ali mi je počeo kidati živce.

 

Znači, ovo:

 

int main()
{
int i, n;

printf("Unesite zeljeni broj novih korsnika: ");
}

 

Radi bez problema, u konzoli dobijem željeni output...

 

A za ovo:

 

int main()
{
int i, n;

printf("Unesite zeljeni broj novih korsnika: ");
scanf("%d", &n);
}

 

ne dobijem apsolutno ništa. -.-

 

U čemu je problem?

 

Ima Floki pravo , ne koristi Eclipse za C ili C++.

Skini Qt ili Code-blocks i tvoji problemi će nestati.

Nije Eclipse najbolji izbor za gore navedene jezike.

 

 

 

moje aplikacije na play-u : https://play.google.com/store/search?q=nik02droid
10 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

pozdrav,

trazim po internetu vec neko vrijeme i nikako da nadem. Jel zna netko mozda kako string pretvorit u njegov decimalni iznos(ASCII) npr K=75?

 
0 0 hvala 0
12 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
josip.1s kaže...

pozdrav,

trazim po internetu vec neko vrijeme i nikako da nadem. Jel zna netko mozda kako string pretvorit u njegov decimalni iznos(ASCII) npr K=75?

 atoi funkcija ?

10 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

mozem mi dat primjer, il samo kako se koristi?

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

char str[10] = "153";
int a = atoi(str);

 

EDIT:

Ovo je bilo za atoi() koja vrijednost stringa pretvara u int

 

Ako mislis ASCII vrijednost char mozes jednostavno:

char c = 'K';

printf("%c %d", c, c); dati ce ti ispis K 75

 

Mozes i 

int x = c; x je sada 75

Poruka je uređivana zadnji put sub 13.6.2015 18:50 (wrathchild).
 
0 0 hvala 0
10 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

e hvala puno. A jeli ikako moguce da je meni u str[10] vise slova npr A,B,C,D,E..

Kako bi onda. Jasno mi je da onda treba str[10] vrtit u petlji pa onda po indeksu uzimat odredeno slovo, samo ne znam kako bi tad koristio atoi.

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

Jel ti zelis ASCII vrijednost znaka, ili vrijednost stringa pretvoriti u int?

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

Zapravo mi treba ovo sto si napisao primjer programa ovo kad mi K da vrijednost 75. SKuzio sam krivo sve. Sori, hvala ti

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

Malo vjezbam nekakve zadacice pa bi mi trebala ideja za neku optimiziranu implementaciju.

Dakle imam 10 struktura "animal". Svaka sadrzi izmedju ostalog i string "habitat". Potrebno je sktrukture ispisat abecednim redom prema tom stanistu. Imam nekoliko ideja al mislim da nisu efikasne i da se moze vjerojatno nesto jednostavnije smislit?

1. Prvo ih sortirat recimo selection sortom i onda redom citat. (koristit neki bolji sort poput Shellovog je mislim suludo jer imam svega 10 struktura, no da'l bi to bilo ok ukoliko bih ih imao neki puno veci broj? )

2. Nac najmanju, ostavit pointer na toj strukturi, na kraju "cesljanja" je ispisat i u sljedecem prolasku mozda ic opet ispocetka al gledat za stanista koju su strogo veca od prethodnog pointera, ali manja od sljedecih kojih cu listat(if that makes any sense )

3. Napravit neko pomocno polje u koje ce mi 1 predstavljat da je struktura procitana, 0 da nije..iako mi je to vec previse kompliciranja jer ce se stalno morat if-at jel jedinica na nekom mjestu

Any ideas?

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

Možeš to napraviti na način da napraviš sortiranu listu, gdje se svaki podatak pri umetanju odmah sortira po svim potrebnim atributima. Imam jedan primjer iz C++a, ali zapravo samo treba umjesto cout ubaciti printf, a to možeš i sam.

 

#include <iostream>
#include <cstdlib>
using namespace std;

struct zapis{
   int god;
   char ime[25 + 1];
   char prez[25 + 1];
   struct zapis* godp;   // sljedeći zapis po starosti
   struct zapis* imep;    // ----- II -------- imenu
   struct zapis* prezp;   // ----- II -------- prezimenu
};
typedef struct zapis glava;

void PoGodini(glava **glavap, glava *novi) {
   for (; *glavap && (*glavap)->god < novi->god;
      glavap = &((*glavap)->godp));
      novi->godp = *glavap;
   *glavap = novi;
}
void PoImenu(glava **glavap, glava *novi) {
   for (; *glavap && strcmp((*glavap)->ime, novi->ime) < 0;
      glavap = &((*glavap)->imep));
      novi->imep = *glavap;
   *glavap = novi;
}
void PoPrezimenu(glava **glavap, glava *novi) {
   for (; *glavap && strcmp((*glavap)->prez, novi->prez) < 0;
      glavap = &((*glavap)->prezp));
      novi->prezp = *glavap;
   *glavap = novi;
}
int main(){
   int n, i;
   glava *lista_god = NULL, *lista_ime = NULL, *lista_prez = NULL;
   glava *temp;

   cout << "Unesite broj željenih podataka: ";
   cin >> n;
   for (i = 1; i <= n; i++){
      if ((temp = (glava*)malloc(sizeof(glava))) == NULL){
         cout << "Nema dovoljno memorije!";
         return -1;
      }
      cout << "Unesi ime, prezime i starost: ";
      cin >> temp->ime >> temp->prez >> temp->god;
      PoGodini(&lista_god, temp);
      PoImenu(&lista_ime, temp);
      PoPrezimenu(&lista_prez, temp);
   }
   cout << "\nIspis po starosti:\n";
   while (lista_god){
      cout << lista_god->god << " " << lista_god->ime << " "
         << lista_god->prez << endl;
      lista_god = lista_god->godp;
   }
   cout << "\nIspis po imenu:\n";
   while (lista_ime){
      cout << lista_ime->god << " " << lista_ime->ime << " "
         << lista_ime->prez << endl;
      lista_ime = lista_ime->imep;
   }
   cout << "\nIspis po prezimenu:\n";
   while (lista_prez){
      cout << lista_prez->god << " " << lista_prez->ime << " "
         << lista_prez->prez << endl;
      lista_prez = lista_prez->prezp;
   }
   return 0;
}

 

Nakon što uneseš N podataka dobiješ ih sortirane po starosti, imenu i prezimenu.

15 godina
offline
Re: Programiranje u C-u - od svega pomalo

Najs, dakle odmah prilikom unosenja se stvaraju trostruko povezane liste sa strukturama.. Kako mi to nije palo na pamet :)
Elegantno 

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

Bok ljudi, moze se reci da sam relativni pocetnik sto se tice programiranja pa me zanima moze li s c-om programirana aplikacija imati neki user interface a ne da bude samo konzolna. Mozda je pitanje glupo al ako mi mozete objasniti kako to sve ide.

Hvala unaprijed 

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

C nije baš za GUI. Ako ti treba grafičko okruženje onda idi na C++ (C++ Builder) ili na C# (Visual Studio). C++ u Visual Studiju (MFC) je zastario i nema ga smisla više koristiti.

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

Bok ljudi, moze se reci da sam relativni pocetnik sto se tice programiranja pa me zanima moze li s c-om programirana aplikacija imati neki user interface a ne da bude samo konzolna. Mozda je pitanje glupo al ako mi mozete objasniti kako to sve ide.

Hvala unaprijed 

Za čisti C imaš GTK+ (upute za instalaciju na Windowsima) no nisam ga nikada koristio.

 

Za C++ imaš također Qt i wxWidgets, uz ove koje je kolega TracerCPP nabrojao.

Qt, doduše, kojeg sam koristio te koji mi se svidio nudi i više od isključivo GUI funkcionalnosti.

0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
Poruka je uređivana zadnji put ned 28.6.2015 23:33 (pr0n_addict).
11 godina
offline
Re: Programiranje u C-u - od svega pomalo
TracerCPP kaže...

C nije baš za GUI.

Osim sto je cijeli Win API baziran na C-u.

http://www.pci-z.com/
14 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
bbanelli kaže...
TracerCPP kaže...

C nije baš za GUI.

Osim sto je cijeli Win API baziran na C-u.

U C-u su napravljeni kompletni operacijski sustavi, no to zato ne znači da je on dobar izbor za GUI. C++/C# je tu puno bolji izbor.

17 godina
offline
Re: Programiranje u C-u - od svega pomalo
bbanelli kaže...
TracerCPP kaže...

C nije baš za GUI.

Osim sto je cijeli Win API baziran na C-u.

 E pa Tracer mu jest dao najbolji mogući savjet. Ili C++ sa C++ Builder ili C# sa VS.

Bolje od toga ne može.

Poruka je uređivana zadnji put pon 29.6.2015 13:23 (Floki).
Nova poruka
E-mail:
Lozinka:
 
vrh stranice