Programiranje u C-u - od svega pomalo izdvojena tema

poruka: 1.661
|
čitano: 386.842
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
12 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
Trawis kaže...

 

 Ti neprintabilni znakovi su valda ovi 0-31 (iako i njih ima printabilnih al neiscrtavaju znak tipa 10 + 13 su enter, pa je valda to) iz ascii tbl ako te to muci samo provjeris jel taj uneseni u rangeu i ispises underscore to is

to mozes preko ascii, ugl ascii tablica ti je otvoren tab kad radis nesto sa znakovima.

Poruka je uređivana zadnji put sri 23.3.2016 20:25 (someguy).
15 godina
offline
Re: Programiranje u C-u - od svega pomalo
someguy kaže...
Trawis kaže...

 

 Ti neprintabilni znakovi su valda ovi 0-31 (iako i njih ima printabilnih al neiscrtavaju znak tipa 10 + 13 su enter, pa je valda to) iz ascii tbl ako te to muci samo provjeris jel taj uneseni u rangeu i ispises underscore to is

to mozes preko ascii, ugl ascii tablica ti je otvoren tab kad radis nesto sa znakovima.

 Više me muči gdje da stavim te brojače. Ako ih stavim pod postojeću for petlju onda mi ispiše samo jedan od njih 4 ili krivo izračuna..

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

 

 Ti neprintabilni znakovi su valda ovi 0-31 (iako i njih ima printabilnih al neiscrtavaju znak tipa 10 + 13 su enter, pa je valda to) iz ascii tbl ako te to muci samo provjeris jel taj uneseni u rangeu i ispises underscore to is

to mozes preko ascii, ugl ascii tablica ti je otvoren tab kad radis nesto sa znakovima.

 Više me muči gdje da stavim te brojače. Ako ih stavim pod postojeću for petlju onda mi ispiše samo jedan od njih 4 ili krivo izračuna..

 U zadatku ti piše jedna for petlja.

Dakle, ovo je primjer gdje imamo rang ascii vrijednosti od 0 do 20, odredili smo da broj stupaca bude 4 i shodno tome ispisujemo matricu.

Brojače i ispis znakova riješi sam sa if else logikom.

Brojač petlje nam u ovom slučaju služi za ispis raspona ascii vrijednosti i zato sam uveo poseban brojač stupaca.

 

int stupci = 4, trenutnoStupaca=0;
   for (int i = 0; i < 20; i++)
   {
      cout << i << " ";
      if (++trenutnoStupaca % stupci == 0) cout << endl;
   }

Poruka je uređivana zadnji put čet 24.3.2016 20:42 (Floki).
15 godina
offline
Programiranje u C-u - od svega pomalo

Hvala puno! Preuredio sam i dodao još neke stvari i sada radi 

 

Moj PC  
1 0 hvala 0
14 godina
offline
Programiranje u C-u - od svega pomalo

Pozdrav ekipa, počeo sam programirati u C-u, tj.imam nekakvo znanje od prije pa sam išao isprobati novi Visual Studio 2010. Primjetio sam da mi često javlja neke "fatal errore", a u VS 2008 mi je radilo bez ikakvih problema. Može li mi netko pomoći? Unaprijed hvala :)

R.I.P. EnlightenedPhoenix 24.6.2011. Steve Jobs: 1955 - 2011 David Bowie 1947-2016
Moj PC  
0 0 hvala 0
13 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
alen4430 kaže...

...pa sam išao isprobati novi Visual Studio 2010. Primjetio sam da mi često javlja neke "fatal errore", a u VS 2008 mi je radilo bez ikakvih problema. Može li mi netko pomoći?

 

Tip projekta je Win32 GUI ili Win32 konzola?

main() prima koje argumente i vraća što?

14 godina
offline
Re: Programiranje u C-u - od svega pomalo
Djuro von Prekoplotovich kaže...
alen4430 kaže...

...pa sam išao isprobati novi Visual Studio 2010. Primjetio sam da mi često javlja neke "fatal errore", a u VS 2008 mi je radilo bez ikakvih problema. Može li mi netko pomoći?

 

Tip projekta je Win32 GUI ili Win32 konzola?

main() prima koje argumente i vraća što?

 Tip projekta je Win32 konzola. Što se tiče ovoga što prima i koje argumente vraća, ne mogu ti puno pomoći nažalost. Zadatak smo dobili da učitamo rečenicu i da se prebroji ima li više slova O ili U. Ja mislim da main prima argumente za učitavanje polja, brojače slova O i U, i I za for petlju.

R.I.P. EnlightenedPhoenix 24.6.2011. Steve Jobs: 1955 - 2011 David Bowie 1947-2016
12 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
alen4430 kaže...

Pozdrav ekipa, počeo sam programirati u C-u, tj.imam nekakvo znanje od prije pa sam išao isprobati novi Visual Studio 2010. Primjetio sam da mi često javlja neke "fatal errore", a u VS 2008 mi je radilo bez ikakvih problema. Može li mi netko pomoći? Unaprijed hvala :)

 Znači stavi prije "main()"  int, a na kraj koda stavi return 0; i onda bi trebalo raditi

ovako bi izgledalo:

 

int main(){

.

.

.

return 0;

}

Smrt u penziji
13 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo
Umjesto main() napisi void main(), za svaki slucaj, iako bi int main(void) uz return 0 bio najpravilniji zapis.

Ja ipak mislim da je problem u ekstenziji filea, tebi pise .cpp, trebalo bi zapravo pisati .c, renameaj file i problem bi trebao biti rjesen.
Moj PC  
0 0 hvala 0
15 godina
offline
Programiranje u C-u - od svega pomalo

Par pitanja

 

Preskočio sam predavanje u kojem se spominjao stream i buffer

Može neka dobra poveznica koja govori puno o tome?

 

I mogu li ikako prvo saznati duljinu unešenog stringa (nekako iz buffera?!) pa onda alocirati/realocirati potrebnu memoriju te ubaciti to unutra ili?

 

Npr. 

 

int main (int argc, char argv[]) {

 char *polje;

polje = char * malloc(argc*sizeof(char));

strcpy(polje,*argv);

}

 

Ali onda opet moram nekako proslijediti string u main, ali mislim da nisu na to mislili ovi s faksa

 

hvala!

You have to be odd to be number one
Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

Parametar argc govori koliko je argumenata predano u komandnoj liniji pri pozivanju programa, a parametar argv sadrži svaki od njih. Zato argv mora biti niz pokazivača gdje svaki od njih pokazuje na jedan predani argument:

 

char* argv[]

 

 

int main(int argc, char *argv[]){ /* char **argv */
   int i;
   
    printf("Broj argumenata: %d\n", argc - 1);
   for(i = 0; i<argc; i++)
       printf("%d. argument:%s\n", i, argv[i]);
    return 0;
}

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

U zadatku se traži rekurzivna funkcija koja će u nizu pozitivnih cijelih brojeva naći najmanji neparni broj

u slučaju da nema neparnih brojeva funckija treba vratiti -1

 

Ovako sam ga ja riješio: http://pastebin.com/DNUssmMq

Je li moguće riješiti to bez ružnog uvijeta unutar if-a?

 

Ideja je ta da pozivam rekurziju dok ne dođem do prvog elementa

Ako je prvi element niza paran, funkcija vraća -1, u suprotnom vraća element

Nakon toga se vraćam po pozvanim funkcijama i provjeravam treba li vratiti n-ti element ili n-1 element kojeg sam dobio iz prijašnjeg poziva funkcije

Provjera se sastoji od toga da provjerim (je li vraćeni element -1 i je li a[n] neparan) ili (a[n] neparan i a[n] < vraćeni element)

 

Ako mislite da mogu unaprijediti kod na bilokoji način javite!

You have to be odd to be number one
Moj PC  
1 0 hvala 0
12 godina
offline
Re: Programiranje u C-u - od svega pomalo

Malo poboljsanje bi bilo stavit INT_MAX umjesto -1, pa onda ne moras imat specijalno rukovanje s -1, samo usporedjujes jel manji.

 

Edit: sad vidim da se trazi min. neparni broj, a ne parni. Onda stavis INT_MAX-1, obzirom da je INT_MAX uvijek neparan.

Poruka je uređivana zadnji put ned 24.4.2016 21:15 (CyberK).
15 godina
offline
Re: Programiranje u C-u - od svega pomalo
CyberK kaže...

Malo poboljsanje bi bilo stavit INT_MAX umjesto -1, pa onda ne moras imat specijalno rukovanje s -1, samo usporedjujes jel manji.

 

Edit: sad vidim da se trazi min. neparni broj, a ne parni. Onda stavis INT_MAX-1, obzirom da je INT_MAX uvijek neparan.

 

Ma može i int_max jer se svakako traži manji broj 

ali je zadano da funkcija vrati -1 ako nema neparnog

 

Mislio sam da postoji neki drugi pristup rekurziji...

You have to be odd to be number one
17 godina
offline
Re: Programiranje u C-u - od svega pomalo
Top Bugovac kaže...
CyberK kaže...

Malo poboljsanje bi bilo stavit INT_MAX umjesto -1, pa onda ne moras imat specijalno rukovanje s -1, samo usporedjujes jel manji.

 

Edit: sad vidim da se trazi min. neparni broj, a ne parni. Onda stavis INT_MAX-1, obzirom da je INT_MAX uvijek neparan.

 

Ma može i int_max jer se svakako traži manji broj 

ali je zadano da funkcija vrati -1 ako nema neparnog

 

Mislio sam da postoji neki drugi pristup rekurziji...

 Može se malo pojednostaviti uvjet. Ako je tekući neparan i razlika između prethodnog i tekućeg pozitivna, onda funkcija vraća tekući, uz korekciju sa -1. Razlikom između prethodnog i tekućeg u stvari provjerimo da li je tekući manji od prethodnog.

 

int minNepar(int a[], int n) {
   int p;
   if (n == 0) return (a[n] % 2) ? a[n] : -1;
   p = minNepar(a, n - 1);
   if (a[n] % 2 && (p - a[n]) * p > 0) return a[n];
   else return p;
}

Poruka je uređivana zadnji put pon 25.4.2016 21:49 (Floki).
17 godina
offline
Programiranje u C-u - od svega pomalo

Inače, iz prethodne funkcije možemo u tekuću funkcijiu dobiti jedino neparni broj, a to znači da razlika vrijednosti iz prethodne funkcije i vrijednosti tekuće funkcije može biti jedino paran broj ako tekuća funkcija dalje prenosi svoju vrijednost.

Ostaje da provjerimo da li je vrijednost tekuće funkcije manja od vrijednosti prethodne funkcije, to radimo uz korekciju -1.

 

int minNepar(int a[], int n) {
   int p;
   if (n == 0) return (a[n] % 2) ? a[n] : -1;
   p = minNepar(a, n - 1);
   if ((p - a[n]) % 2 == 0 && ((p - a[n]) * p > 0)) return a[n];
   else return p;
}

Poruka je uređivana zadnji put pon 25.4.2016 21:51 (Floki).
 
0 0 hvala 1
12 godina
offline
Re: Programiranje u C-u - od svega pomalo

Pojednostavit ovdje ima dvojako znacenje. Matematicki jednostavnije po broju operacija, no teze za shvatit.
Ono tvoje prvo rjesenje mi je jednostavnije od drugog u oba znacenja...

Dodatno "poboljsanje" gdje umjesto 4 uvjeta, imamo samo 2 (ukljucujuci i n==0 za terminaciju rekurzije) :)
Vjerujem da bi se dalo izbacit i sve uvjete i samo jedan return s kompliciranim aritmetickim izrazom, ali to vec prelazi u sadomazohizam ...

int minNepar(int a[], int n) {
    int p;
    int mod = a[n] % 2;

    if (n == 0) return -1 + (a[n] + 1) * mod;

    p = minNepar(a, n - 1);
    if (mod * (p - a[n]) * p > 0) return a[n];
    else return p;
}

 

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

Pojednostavit ovdje ima dvojako znacenje. Matematicki jednostavnije po broju operacija, no teze za shvatit.
Ono tvoje prvo rjesenje mi je jednostavnije od drugog u oba znacenja...

Dodatno "poboljsanje" gdje umjesto 4 uvjeta, imamo samo 2 (ukljucujuci i n==0 za terminaciju rekurzije) :)
Vjerujem da bi se dalo izbacit i sve uvjete i samo jedan return s kompliciranim aritmetickim izrazom, ali to vec prelazi u sadomazohizam ...

int minNepar(int a[], int n) {
    int p;
    int mod = a[n] % 2;

    if (n == 0) return -1 + (a[n] + 1) * mod;

    p = minNepar(a, n - 1);
    if (mod * (p - a[n]) * p > 0) return a[n];
    else return p;
}

 

 Da, ovo sa modom je isto dobro, eliminira lijevu provjeru parnosti.

Ma sa onim drugim sam se malo zaigrao, čisto kad funkcija vraća samo neparne, razlika neparnog i neparnog daje parni, a razlika neparnog i parnog daje neparni, pa kad je to već tako, rakoh, ajde da napišem.

U biti, i to rješenje se može prevesti u jedan uvjet, tako da je broj operacija jednak prvom rješenju, a pošto se prvo rješenje temelji na parnosti tekućeg i pozitivnosti razlike prethodnog i tekućeg, drugo rješenje to svodi na parnost i pozitivnost razlike.

 

int minNepar(int a[], int n) {
   int p;
   if (n == 0) return (a[n] % 2) ? a[n] : -1;
   p = minNepar(a, n - 1);
   int razlika = p - a[n];
   if ((razlika * p -1)%2 > 0) return a[n];
   else return p;
}

Poruka je uređivana zadnji put sri 27.4.2016 13:12 (Floki).
13 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

pozdrav, jel mi moze netko pojasnit zasto ovo ne funkcionira?

trebalo bi samo rijec obrnuto napisat:

INPUT:brzina

OUTPUT:anizrb

 

a ja dobijem

OUTPUT:aniina

 

#include <stdio.h>
int main(){
char rijec[100];
int i=0,x=0;
scanf("%s", rijec);
while(rijec[i]!='\0'){
i++;
}

i=i-1;
while(i!=-1){
rijec[x]=rijec[i];
x++;
i--;
}
printf("\n%s", rijec);

 

return 0;
}

Poruka je uređivana zadnji put čet 12.5.2016 22:51 (golatificon).
 
0 0 hvala 0
15 godina
offline
Re: Programiranje u C-u - od svega pomalo

 

scanf("%s", rijec);

while(rijec[i]!='\0'){
i++;
}

  1. i=i-1;
  2. while(i!=-1){ 
  3. rijec[x]=rijec[i]; 

x++;
i--;

Podcrtano: uskoro će te napasti da umjesto scanf-a koristiš fgets

 

 1.manjivanja i uvećanja možeš zapisati na sljedeće načine:
i--, --i, i++, ++i

Razlika ti je u tome što --i prvo umanji i za 1 pa ga iskoristi, a i-- prvo iskoristi i pa ga onda umanji

npr.
int i=5;
i sada:
int j=++i;

Pa će j biti 6

A za j=i++;

j će biti 5

 

Inače u ovom tvom redu oba umanjivanja valjaju

 

 2. koristi for petlju zbog toga što unaprijed znaš broj ponavljanja petlje

 

 3. u ovome je problem

Zamisli riječ:

P|o|r|u|k|a

0 1 2 3  4 5

(ispod su označeni indeksi svakog elementa polja)
U prvom krugu tina 0. mjestu zapišeš ono što je na 5.

i tako izgubiš informaciju što je na 0. mjestu bilo

Odnosno ovako ti je zapisano u memoriji:
a|o|r|u|k|a

0 1 2 3  4 5

You have to be odd to be number one
Poruka je uređivana zadnji put čet 12.5.2016 23:22 (Top Bugovac).
13 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
Top Bugovac kaže...
golatificon kaže...

pozdrav, jel mi moze netko pojasnit zasto ovo ne funkcionira?

trebalo bi samo rijec obrnuto napisat:

INPUT:brzina

OUTPUT:anizrb

 

a ja dobijem

OUTPUT:aniina

 

#include <stdio.h>
int main(){
char rijec[100];
int i=0,x=0;
scanf("%s", rijec);
while(rijec[i]!='\0'){
i++;
}

  1. i=i-1;
  2. while(i!=-1){ 
  3. rijec[x]=rijec[i]; 

x++;
i--;
}
printf("\n%s", rijec);

 

return 0;
}

 1. možeš zapisati kao --i;

 2. koristi for petlju (zbog potcrtanog)

 3. u ovome je problem

Zamisli riječ:

0 1 2 3  4 5
P|o|r|u|k|a
U prvom krugu ti 
na 0. mjestu zapišeš ono što je na 5.

i tako izgubiš informaciju što je na 0. mjestu bilo

Odnosno ovako ti je zapisano u memoriji:
0 1 2 3  4 5
a|o|r|u|k|a

 ahaa , nekako sam imao u glavi da su rijec[x] i rijec[i] razlicita polja, hvala i na preporuci!

Poruka je uređivana zadnji put čet 12.5.2016 23:25 (golatificon).
9 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Pozdrav.
Potrebna mi je pomoć oko sljedećeg zadatka:

Definisati strukturu PITANJE kojom se reprezentuje jedno pitanje u nekom kvizu,
a čiji su atributi tekst pitanja (statički string), prvi odgovor (statički string), drugi odgovor (statički string),
treći odgovor (statički string), te redni broj tačnog odgovora (cijeli broj – 1, 2
ili 3).
Definisati strukturu KVIZ kojom se reprezentuje jedan kviz, a čiji su atributi broj pitanja (cijeli broj) i pitanja (dinamički niz).
Definisati funkciju koja dodaje novo pitanje u kviz, a čiji je prototip: void dodaj(KVIZ *k, PITANJE *p);
Definisati funkciju koja prikazuje pitanje (i ponuđene odgovore) čiji je redni broj rb. Prototip funkcije je: void prikazi_pitanje(KVIZ *k, int rb);
Definisati funkciju koja vraća informaciju o tome da li je odgovor, čiji je redni broj rbo, tačan odgovor na pitanje čiji je redni broj rb.
Prototip funkcije je: int tacan(KVIZ *k, int rb, int rbo);
U glavnom programu:
- definisati novi kviz, pa u njega dodati dva pitanja(sa pripadajućim ponuđenim odgovorima),
- korisniku redom prikazivati pitanja na standardni izlaz, a sa standardnog ulaza učitavati odgovore
korisnika. Korisnik odgovara tako što unosi redni broj odgovora: 1, 2 ili 3 (u suprotnom prikazati poruku o greški i ponovo učitati odgovor na isto pitanje).
- na kraju, kada korisnik odgovori na sva pitanja, prikazati rezultat u procentima na standardni izlaz.
Napomena: Ukupan broj pitanja se dinamički alocira (nije unaprijed poznat ukupan broj pitanja jer korisnik manipuliše izbornikom).
Korisnik može manipulisati samo ponuđenim odgovorima na postavljeno pitanje,
kao i izbornikom koji mu omogućava da li želi da se doda naredno pitanje, prikaže rezultat, ili da korisnik terminira program.
To znači da korisnik sam određuje kad se kviz završava.
Nema korištenja datoteka, sav program se izvršava preko command prompt-a.

 

Primjer izvršavanja programa:

1. Koje godine je nastao programski jezik C?

1. 1852

2. 1872

3. 1972

Izaberite odgovor: 6

Greska (dozvoljene vrednosti su 1, 2 i 3)!

Izaberite odgovor: 3

2. Ko je autor programskog jezika C?

1. Bill Gates

2. Dennis Ritchie

3. Steve Jobs

Izaberite odgovor: 2

Rezultat: 100%

 

U ovom zadatku mi nekoliko stvari nije jasno:
1) Kako dodati pitanje u kviz, tj. gdje treba definisati tekst pitanja (jer se tekst ne učitava, nego se automatski prikazuje kad korisnik hoće da doda novo pitanje)?
2) Pošto korisnik sam određuje kada će se program terminirati, kako definisati redoslijed pitanja koja dolaze kada ih korisnik
dodaje jedno po jedno (kada više nema definisanih pitanja valjda bi trebalo da se ispiše poruka o terminiranju programa, je li tako?)?
3) Tekst pitanja se ne definiše u datoteci, pa kako onda da se prikazuju na standarnom izlazu po redoslijedu kojim dolaze?

Unapred hvala.

 

Definicije:

#define MAX 1000000

 

typedef struct

{

    char tekstPitanja[MAX];

    char prviOdgovor[MAX];

    char drugiOdgovor[MAX];

    char treciOdgovor[MAX];

    int rbto;//redni broj tacnog odgovora(1, 2 ili 3)

}PITANJE;

 

typedef struct

{

    int bp;//ukupan broj definisanih pitanja?

    PITANJE *pitanja;

}KVIZ;

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

EDIT: Rijeseno

 

Pozdrav, trebao bih pomoć oko dijela programa. Naime ne radi mi dio koji bi trebao ispisivati rečenicu koja sadržava upisanu riječ. Zadatak je na slikama, unaprijed hvala!

 

#include<stdio.h>

#include<string.h>
void main()
{
  FILE* Dat = NULL;
  FILE* Zavrsna = NULL;
  char naziv[100], recenica[100], rijec[10];
  printf("Upisite naziv datoteke (naziv.txt): ");
  gets(naziv);
  Dat = fopen(naziv, "w");

  if(Dat == NULL)
  {
    printf("Greska kod otvaranja datoteke!");
    exit(311);
  }
  while(1)
  {
    if(strcmp(recenica, "KRAJ") == 0) break;
    printf("Unesite recenicu ili 'KRAJ' za zavrsetak: \n");
    gets(recenica);
    fprintf(Dat, "%s\n", recenica);
  }
  fclose(Dat);
  printf("Unesite jednu rijec: ");
  gets(rijec);
  Dat = fopen(naziv, "r");
  Zavrsna = fopen("zavrsna.txt", "w");
  while(fscanf(Dat,"%s ", recenica) == 1)
  {
    if(strstr(recenica, rijec) != NULL)
    {
     printf("%s\n", recenica);
     fprintf(Zavrsna, "%s\n", recenica);
    }
  }
  fclose(Dat);
  fclose(Zavrsna);
}

Poruka je uređivana zadnji put uto 17.5.2016 20:09 (Trawis).
Moj PC  
0 0 hvala 0
9 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Molim pomoc,

moram napisati program koji će od korisnika zatražiti unos rečenice (maksimalne duljine do 100 znakova), te turečenicu podijeliti na riječi. Znakovi kojima se razdvajaju riječi su praznina (' '), zarez (','), točka ('.'), upitnik ('?') i uskličnik ('!').Sve razdvojene riječi potrebno je ispisati na ekran i dodijeliti im redne brojeve.Kod razdvajanja rečenice na riječi potrebno je odrediti i ispisati najdulju i najkraću riječ u rečenici.Nakon toga je potrebno napisati funkciju
„isSamoglasnik“ koja prima jedan znak, a vraća vrijednost „1“ ako je taj znak veliki ili mali samoglasnik, odnosno, vraća „0“ ako on to nije.Pomoću funkcije „isSamoglasnik“ potrebno je odredit i koliko samoglasnika sadrži najduža riječ i taj podatak ispisati na ekran.Ako korisnik unese riječ koja nema nijedan samoglasnik, od njega je potrebno zatražiti unos nove rečenice iponoviti postupak razdvajanja rečenice na riječi.


Primjer izvođenja programa
Unesite recenicu do 100 znakova: Programski jezik C !
1. rijec: Programski
2. rijec: jezik
3. rijec: C

Najduza rijec: programski
Najkraca rijec: C
Najduza rijec ima 3 samoglasnika.

 

Pokuso sam na razne nacine al nikako da dodem do rjesenja!!!

 

Evo moj dio rjesenja :

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

void main() {
   char rec[200];
   int bs[20], poc[20], i, n, brslova = 0, rijec = 0;
   int min = 0, max = 0;

   printf("\n Upišite rečenicu:");
   gets(rec);
   n = strlen(rec);

   poc[0] = 0;
   for (i = 0; i < n; i++) {
      if (rec[i] != ' ')
         brslova++;
      else {
         poc[rijec + 1] = i + 1;
         bs[rijec] = brslova;
         rijec++;
         brslova = 0;
      }
   }
   poc[rijec + 1] = i + 1;
   bs[rijec] = brslova;

   
   for (i = 1; i <= rijec; i++) {
      if (bs[i] < bs[min])
         min = i;

      if (bs[i] > bs[max])
         max = i;
      }
   
   
   printf("\n Najduža riječ: ");

   for (i = poc[max]; i < poc[max] + bs[max]; i++)
      printf("%c", rec[i]);
   
   printf("\n Najkraća riječ: ");
   
   for (i = poc[min]; i < poc[min] + bs[min]; i++)
      printf("%c", rec[i]);

   return;
}

 

sad nezz kako da razdvojim rijeci i dodijelim im redne brojeve ?

 

 

Poruka je uređivana zadnji put sri 18.5.2016 19:06 (ivsim).
 
0 0 hvala 0
15 godina
offline
Programiranje u C-u - od svega pomalo

Neka ti jedna varijabla predstavlja broj rijeci (npr BrojRijeci), uzmi neku pomocnu varijablu kojom ćeš odrediti duljinu neke rijeci, i neku  koja će ti predstavljati određenu riječ

 

Uzmeš sada dvostruki pointer (odnosno pointer koji pokazuje na pointer) nazovi ga NizPointera

 Dvostruki pointer neka bude niz pointera, a svaki će pokazivati na prvi znak određene riječi

Sad imaš nekoliko verzija s mallocom/reallocom kako to postići

 

Po meni ti je najbolje krenuti ovako

 

Imaš jednu for petlju koja će ti proći svaki znak u nizu

 Povećaj d

 Jedan if koji provjerava je li došao kraj rijeci (je li naišao na jedan od onih znakova)

  Ako je povecaj brojrijeci

  realociraj nizPointera na velicinu sizeof((char *) * broj rijeci)

  postavi pointer *(NizPointera + brojrijeci) na onaj znak na kojem ti se for zaustavio

  d=0

 

Ugrubo je to to

Na brzinu sam pročitao i odgovorio, valjda nisam fulao

You have to be odd to be number one
Poruka je uređivana zadnji put sri 18.5.2016 20:49 (Top Bugovac).
Moj PC  
1 0 hvala 1
9 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Pozdrav svima,

imam problem,znači napisao sam kod  i nakon izvršavanja mi izbaci error IndexOutOfRange.Koliko sam upoznat to znači da mi tijekom posljednje iteracije želi zahvatiti područje koje je izvan granica definiranog polja.Bio bi zahvalan na svakoj pomoći.Hvala :)) 

 

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace zadatak_17._05
{
class Program
{
static void Main(string[] args)
{

double[,] polje = new double[19864, 2];//mmatrica još dva stupca
double c = 0;
// StreamReader citanje = new StreamReader("Koordinate.txt");//

StreamReader citanje = new StreamReader("Koordinate.txt");
for (int i = 0; i < 19864; i++)
{
string matrica = citanje.ReadLine();

string[] polje1 = matrica.Split(';');
polje[i, 0] = Convert.ToDouble(polje1[0]);
polje[i, 1] = Convert.ToDouble(polje1[1]);

 

 


}
c = IzracunUdaljenosti( polje);
Console.WriteLine(c);
Console.ReadKey();


}

 

public static double IzracunUdaljenosti( double[,] polje1)

{
double suma = 0;
double rezultat = 0;
for (int i = 1; i <polje1.Length-1; i++)

{
suma = suma + Math.Sqrt((Math.Pow(polje1[i, 0] - polje1[i - 1, 0], 2) + Math.Pow((polje1[i, 1] - polje1[i - 1, 1]), 2)));

Console.WriteLine(suma);

}
rezultat= suma*111.32;
return rezultat;
}

 

 

}

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

C#?
Ne vidim grešku :/

Možda ti duljina polja u funkciji stvara problem

 

Nisam upoznat s C# funkcijama ali u C-u zna biti problem

 

Ako šalješ pointer na polje u funkciju bez duljine polja, te pozoveš funkciju koja broji sve charove do \0 ili \n, a nisi prethodno u taj niz dodao \0 ili \n onda si se zaj...

You have to be odd to be number one
Poruka je uređivana zadnji put sri 18.5.2016 20:47 (Top Bugovac).
Moj PC  
0 0 hvala 0
9 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
Nisam bas najbolje razumio to sa dvostrukim pointerima sa tim se prvi put susrecem,pa ako nije problem molim malo detaljnije objasnjenje ?
16 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Ne radim u C#, ali sumnjivo mi je dohvacanje Length iz dvodimenzionalnog polja? Kako znas sto ce ti vratiti?

Ako ti baca IndexOutOfBounds, mozda ti taj Length vraca umnozak (duljina prve dimenzije * duljina druge dimenzije). Provjeri to u dokumentaciji

Moj PC  
1 0 hvala 0
15 godina
offline
Re: Programiranje u C-u - od svega pomalo
ivsim kaže...

Molim pomoc,

moram napisati program koji će od korisnika zatražiti unos rečenice (maksimalne duljine do 100 znakova), te turečenicu podijeliti na riječi. Znakovi kojima se razdvajaju riječi su praznina (' '), zarez (','), točka ('.'), upitnik ('?') i uskličnik ('!').Sve razdvojene riječi potrebno je ispisati na ekran i dodijeliti im redne brojeve.Kod razdvajanja rečenice na riječi potrebno je odrediti i ispisati najdulju i najkraću riječ u rečenici.Nakon toga je potrebno napisati funkciju
„isSamoglasnik“ koja prima jedan znak, a vraća vrijednost „1“ ako je taj znak veliki ili mali samoglasnik, odnosno, vraća „0“ ako on to nije.Pomoću funkcije „isSamoglasnik“ potrebno je odredit i koliko samoglasnika sadrži najduža riječ i taj podatak ispisati na ekran.Ako korisnik unese riječ koja nema nijedan samoglasnik, od njega je potrebno zatražiti unos nove rečenice iponoviti postupak razdvajanja rečenice na riječi.

Kolega, evo mog rješenja, možda ti pomogne. Vjerojatno nije najbolje, no radi  :)

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

int i, j, s, br = 0, sm = 0;
int isSamoglasnik(char *najduza)
{
   char znakovi[] = {"aeiouAEIOU"};
   int rijecD = strlen(najduza), znakoviD = strlen(znakovi);
   for(i=0; i < rijecD; i++)
   {
    for(j=0; j < znakoviD; j++)
    {
      if(najduza[i] == znakovi[j])
        sm++;
    }
   }
   if(sm == 0) {printf("Najduza rijec nema samoglasnike!\n"); return main();}
   else return sm;
}

int main()
{
   char rec[100];
   char *rijecP[100];
   char *najkraca, *najduza, znakovi[] = {
   " '!', '?', ',', '.', ' ', ' !', ' ?', ' ,', ' .', '! ', '? ', ', ', '. '"};
   char *rijec = NULL;
   do
   {
     printf("Unesite recenicu:\n");
     gets(rec);
     s = strlen(rec);
   } while(s > 100);
   printf("\nRecenica: %s\nDuljina: %d mjesta\nRijeci:", rec, s);
   rijec = strtok(rec, znakovi);
   for(i=0; i < s; i++)
   {
     if(rijec != NULL)
     {
       rijecP[i] = rijec;
       printf("\n%d. rijec: %s ", i+1, rijecP[i]);
       br++;
     }
     rijec = strtok(NULL, znakovi);
   }
   printf("\nUkupno rijeci: %d", br);
   najduza = rijecP[0];
   najkraca = rijecP[1];
   for(i=0; i < br; i++)
   {
      if(strlen(najduza) < strlen(rijecP[i]))
       najduza = rijecP[i];
      if(strlen(najkraca) > strlen(rijecP[i]))
       najkraca = rijecP[i];
   }
   printf("\nNajduza rijec je %s, a najkraca: %s\n", najduza, najkraca);
   isSamoglasnik(najduza); printf("Najduza rijec ima %d samoglasnika", sm);
}

Nova poruka
E-mail:
Lozinka:
 
vrh stranice