Programiranje u C-u - od svega pomalo izdvojena tema

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

Znam da ih mogu preskočiti ali mislim da ih u ovom slučaju MORAM zapisati. Zašto ? Radi se o 8-bita ( moram zapisat 8 znamenki) tako da dodam te 4 nule ispred 1111 tek tako da popunim mjesto.

Onda ih zapiši, ništa ne gubiš to je i dalje isti broj. Da, ako želiš napisati stanje 8 bitnog cpu registra, onda bi vjerojatno trebao navesti stanje svih njegovih bitova pa bi to onda u tvom slučaju bilo: 00001111

0xBADC0DE
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
rustweaver kaže...
patch123 kaže...

Znam da ih mogu preskočiti ali mislim da ih u ovom slučaju MORAM zapisati. Zašto ? Radi se o 8-bita ( moram zapisat 8 znamenki) tako da dodam te 4 nule ispred 1111 tek tako da popunim mjesto.

Onda ih zapiši, ništa ne gubiš to je i dalje isti broj. Da, ako želiš napisati stanje 8 bitnog cpu registra, onda bi vjerojatno trebao navesti stanje svih njegovih bitova pa bi to onda u tvom slučaju bilo: 00001111

Hvala,to me je i zanimalo.

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

Ovaj programčić radi što treba raditi nego mene zanima mogu li u funkciji max_volume ikako koristi adresnu aritmetiku umjesto countera i? Probao sam koliko znam i umijem, ali mi nije baš išlo - valjda zato jer pointeri na strukture funkcioniraju malčice drukčije od onih "normalnih".

 

// Zadatak 2.

 

#include <stdio.h>

#include <math.h>

#define MAX_L 5

 

double max_volume(struct valjak const *x);

 

struct valjak

{

       double polumjer;

       double visina;

};

 

int main()

{

       struct valjak niz[MAX_L];

       int i;

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

       {

             printf("Unesite polumjer i visinu %d. valjka: ", i + 1);

             scanf("%lf %lf", &niz[i].polumjer, &niz[i].visina);

       }

       putchar('\n');

       printf("Volumen najveceg valjka je %.2lf\n", max_volume(niz));

       return 0;

}

 

double max_volume(struct valjak const *x)

{

       int i;

       double volume, max = 0;

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

       {

             volume = (pow(x -> polumjer, 2)) * 3.14 * x -> visina;

             if(volume > max)

                    max = volume;

             x++;

       }

       return max;

}

 

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

Ne razumijem. Što točno želiš postići?

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

 

 

Ovaj programčić radi što treba raditi nego mene zanima mogu li u funkciji max_volume ikako koristi adresnu aritmetiku umjesto countera i? Probao sam koliko znam i umijem, ali mi nije baš išlo - valjda zato jer pointeri na strukture funkcioniraju malčice drukčije od onih "normalnih".

 

// Zadatak 2.

 

#include <stdio.h>

#include <math.h>

#define MAX_L 5

 

double max_volume(struct valjak const *x);

 

struct valjak

{

       double polumjer;

       double visina;

};

 

int main()

{

       struct valjak niz[MAX_L];

       int i;

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

       {

             printf("Unesite polumjer i visinu %d. valjka: ", i + 1);

             scanf("%lf %lf", &niz[i].polumjer, &niz[i].visina);

       }

       putchar('\n');

       printf("Volumen najveceg valjka je %.2lf\n", max_volume(niz));

       return 0;

}

 

double max_volume(struct valjak const *x)

{

       int i;

       double volume, max = 0;

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

       {

             volume = (pow(x -> polumjer, 2)) * 3.14 * x -> visina;

             if(volume > max)

                    max = volume;

             x++;

       }

       return max;

}

 

 

Vidi komentar::

 

// Zadatak 2.

 

#include <stdio.h>

#include <math.h>

#define MAX_L 5

 

double max_volume(struct valjak const *x);

 

struct valjak

{

    double polumjer;

    double visina;

};

 

int main()

{

    struct valjak niz[MAX_L];

    int i;

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

    {

       printf("Unesite polumjer i visinu %d. valjka: ", i + 1);

       scanf("%lf %lf", &niz[i].polumjer, &niz[i].visina);

    }

    putchar('\n');

    printf("Volumen najveceg valjka je %.2f\n", max_volume(niz));

    return 0;

}

 

double max_volume(struct valjak const *x)

{

    /*moras fixirat pointer inace stalno

     u komparaciji imas x++ sa value koji 

     takodjer raste ++. 

     Npr. 4 - 1 -> dizes 4++ = 5 ali ti raste

     i 1++ = 2 p opet imas  5-2 itd.. */

 

    const valjak* max_value = x + (MAX_L-1) ;

    double volume, max = 0;

 

    while( ( max_value - x ) !=  -1 )

    {

       volume = (pow(x -> polumjer, 2)) * 3.14 * x -> visina;

       if(volume > max)

           max = volume;

       x++;

    }

 

    return max;

}

 

 

 

ili while uredi 

 

double max_volume(struct valjak const *x)

{

   /*moras fixirat pointer inace stalno

   u komparaciji imas x++ sa value koji 

   takodjer raste ++. 

   Npr. 4 - 1 -> dizes 4++ = 5 ali ti raste

   i 1++ = 2 p opet imas  5-2 itd.. */

 

   const valjak* end = x + MAX_L;

   double volume, max = 0;   

 

   while( x  != end  )

   {    

    putchar('\n');

    volume = (pow(x -> polumjer, 2)) * 3.14 * x -> visina;

    if(volume > max)

      max = volume;

    x++;

   }

 

   return max;

}

 

Poruka je uređivana zadnji put čet 13.12.2012 10:36 (nik_02).
13 godina
offline
Programiranje u C-u - od svega pomalo

Sad sam tek došao doma i išao probati ova tvoja rješenja i vidio sam samo da si zaboravio dodati "struct" u deklaraciji pointera "end".

Valjda si navikao na rad sa typedef strukturama. Hvala, sad se preko blagdana moram se malo više pozabaviti s pointerima.

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

Imam problema s dijeljenjem jednog stringa na 3 dijela pomocu strtok funkcije. Ta 3 nova stringa spremam u novo polje stringova jer ih poslije moram slati funkciji. Koristim znak "#" ili "!" kao delimiter. Kada upisem "a#b#c", a i b se normalno upisu, ali umjesto c su upisu neki random znakovi. Ako upisem npr. aaaaaaaa#bbbbbb#cccccc ili bilo koja druga slova, on mi i prvo polje upise 4 puta a i ostalo samo random znakovi. Kako ispravno ovo napisati? Hvala

EDIT: Nakon 5 sati pokušavanja uspio sam nać rješenje. Ostavio sam samo ispravan kod dolje, možda nekom zatreba.

const char delimiters[]="#!";

int i=0;
char niz1[20]="";
char niz2[20]="";
char niz3[20]="";

char *p;

char signal[50]={};
scanf("%s", signal);

char* tekst=(char*)malloc(sizeof(char)*(strlen(signal)+1));
strcpy(tekst, signal);

p=strtok(tekst,delimiters);

if(p != NULL)
{
strcpy(niz1,p);
p=strtok(NULL, delimiters);

if(p != NULL)
strcpy(niz2,p);

p=strtok(NULL, delimiters);

if(p != NULL)
strcpy(niz3,p);
}

Poruka je uređivana zadnji put pon 17.12.2012 17:16 (Filip21).
Moj PC  
0 0 hvala 0
16 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Pozdrav.

 

Naime upravo radim "seminarski - programski" zadatak koji mi je bitan za prolaz jednog predmeta na faksu. 

 

Zadatak je: 

 

Napisati program koji u unosu prima dva mala slova (npr 'h' i 't'). Program treba ispisati sva slova u engleskoj abecedi koja se nalaze između dva upisana slova (uključujući i ta slova), unatrag (od kraja prema početku), razdvojena razmakom (SPACE). Napomena: prvo unijeto slovo ne mora biti "ispred" drugo unijetog po abecednom redoslijedu.

 

Unos i ispis možete prilagoditi i uljepšati prema izboru, dani primjeri samo pokazuju funkcionalnost programa.

 

 

Primjer:

 

unos: h t

ispis: t s r q p o n m l k j i h

 

Primjer:

 

unos: d a

ispis: d c b a

 

 

Primjer provjere samostalnog rada:

 

Izmjeniti program da ispisuje unaprijed (od prvog slova prema zadnjem)

 

I kod mene je problem što nemam pojma kako se deklariraju stringovi i kako da izvršim ovo sortiranje od iza prema naprijed (ostlog se nekako sjećam, ali to je slabo s obzirom da već skoro 2 godine nisam ništa programirao u C-u već samo HTML/CSS/php).

 

Dakle molio bih vas da mi pomognete oko deklaracije stringa (teksta) i sortiranja (dalje ću sam sve moći izvršiti)

Extend my EMSI License for free: http://download.emsisoft.com/EmsisoftAntiMalwareSetup_6434073 / My Web Site: http://markoidzan.from.hr || First Croatian CM9 blog: http://cm9croatia.blogspot.com
Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

for(char c = 'h'; c <= 't'; c++)
    printf("%c ", c);

 

..a sad ti dovrši.

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

for(char c = 'h'; c <= 't'; c++)
    printf("%c ", c);

 

..a sad ti dovrši.

Hvala TracerCPP :) I da može pomoć oko deklaracije stringa (tj. kako deklarirati slovo u programu tipa ovo c što si naveo, to sam najblaže rečeno zaboravio)

 

EDIT: Nema potrebe skužio sam caku programa i deklaracije :P

Extend my EMSI License for free: http://download.emsisoft.com/EmsisoftAntiMalwareSetup_6434073 / My Web Site: http://markoidzan.from.hr || First Croatian CM9 blog: http://cm9croatia.blogspot.com
Poruka je uređivana zadnji put pet 21.12.2012 11:29 (midzan21).
16 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Isprike na double postu no može mi netko pomoći da skužim što je greška u programu (kad je ovako napisan ispisuje sve moguće znakove) 

 

 

#include <stdio.h>

#include <conio.h>

#include <math.h>

#include <string.h>

main (){

char a,b;

printf("Upisi dva slova engleske abecede odvojena razmakom ");

scanf("&c  &c","%a %b");

for(char c = 'a'; c <= 'z'; c++){

   printf("%c ", c); }

   return 0;

}

a meni treba da izbacuje slova između slova upisanog u varijablu a i varijablu b? Dakle moze mi netko objasniti kako u for petlji to izvesti (ili treba još neka if funkcija)

 

Extend my EMSI License for free: http://download.emsisoft.com/EmsisoftAntiMalwareSetup_6434073 / My Web Site: http://markoidzan.from.hr || First Croatian CM9 blog: http://cm9croatia.blogspot.com
Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

scanf("%c%c", &a, &b);

 

i tad umjesto 'a' staviti a a umjesto 'z' staviti b...

Kada lajavci laju onda završe ovako: http://i471.photobucket.com/albums/rr77/toropreto/2012-07-0813_30_07.gif
Poruka je uređivana zadnji put pet 21.12.2012 16:34 (TracerCPP).
16 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Hvala Tracer na otkrivanju "buga" u kodu...

 

Sad imam pitanje, kad ubacim slova u redu (dakle npr prvo h pa onda t) program se normalno izvršava, a kad stavim obratno (npr. t pa h) onda ne radi... Što bi sad pak tu mogao biti problem...

 

Source:

 

#include <stdio.h>

#include <conio.h>

#include <string.h>

main (){

char a,b,d;

int c,counter;

printf("Upisi dva slova engleske abecede odvojena razmakom ");

scanf("%c %c", &a, &b);

for(char c = a; c <= b; c++){

printf(" %c ", c); }

return 0;

}

 

Hvala na svakoj pomoći ali ovo mi je bitno da položim POR (primjena osobnih računala, dio seminarsko-programski zadatak). Ovaj zadatak sam mislio izvesti u php-u ali sam odustao zbog toga što sam dobio odbijenicu od profesora :P

Extend my EMSI License for free: http://download.emsisoft.com/EmsisoftAntiMalwareSetup_6434073 / My Web Site: http://markoidzan.from.hr || First Croatian CM9 blog: http://cm9croatia.blogspot.com
Moj PC  
0 0 hvala 0
17 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
midzan21 kaže...

Hvala Tracer na otkrivanju "buga" u kodu...

 

Sad imam pitanje, kad ubacim slova u redu (dakle npr prvo h pa onda t) program se normalno izvršava, a kad stavim obratno (npr. t pa h) onda ne radi... Što bi sad pak tu mogao biti problem...

 

Source:

 

 

#include <stdio.h>

#include <conio.h>

#include <string.h>

main (){

char a,b,d;

int c,counter;

printf("Upisi dva slova engleske abecede odvojena razmakom ");

scanf("%c %c", &a, &b);

for(char c = a; c <= b; c++){

printf(" %c ", c); }

return 0;

}

 

 

Hvala na svakoj pomoći ali ovo mi je bitno da položim POR (primjena osobnih računala, dio seminarsko-programski zadatak). Ovaj zadatak sam mislio izvesti u php-u ali sam odustao zbog toga što sam dobio odbijenicu od profesora :P

Ispred main-a stavi int, znaci int main(), kompajler ti to sam inace napravi, ali obavezno ti to eksplicitno stavi (sigurno ti je ispisao warning glede toga, citaj warninge, ne samo errore, warningi se trebaju tretirati kao errori bez obzira sto kompajliranje prode).

U for petlji ti fale apostrofi, znaci ide char c = 'a' i c <= 'b'.

The programmer is fighting against the two most destructive forces in the universe: entropy and human stupidity. --Damian Conway
Poruka je uređivana zadnji put pet 21.12.2012 18:04 (1domagoj1).
15 godina
online
Re: Programiranje u C-u - od svega pomalo
midzan21 kaže...

Hvala Tracer na otkrivanju "buga" u kodu...

 

Sad imam pitanje, kad ubacim slova u redu (dakle npr prvo h pa onda t) program se normalno izvršava, a kad stavim obratno (npr. t pa h) onda ne radi... Što bi sad pak tu mogao biti problem...

  Slova se zapisuju pomocu ASCII koda. Char varijabla je ustvari manji int koji pamti taj kod. Pa kad ti usporedujes slova, ti ustvari usporedujes njihove ASCII vrijednosti. Buduci da su u ASCII tablici slova poredana abecednim redom, kad usporedujes slova 't' je vece 'h'. Pa u prvom slucaju ti pocinjes sa 'h' i polagano povecavas vrijednost varijable c dok ona ne bude veca od 't'. U drugom slucaju, uvjet u for petlji nije zadovoljen, tj. 't' nije manje ili jednako 'h', pa se petlja odmah prekida.

I would love to change the world, but they won't give me the source code
16 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
1domagoj1 kaže...

Ispred main-a stavi int, znaci int main(), kompajler ti to sam inace napravi, ali obavezno ti to eksplicitno stavi (sigurno ti je ispisao warning glede toga, citaj warninge, ne samo errore, warningi se trebaju tretirati kao errori bez obzira sto kompajliranje prode).

U for petlji ti fale apostrofi, znaci ide char c = 'a' i c <= 'b'.

primjedba za int je prihvaćena... i da ako stavim apostrof onda ispisuje samo a i b (a probavam sa kombinacijom npr f pa c ili g pa t)... najvaznije u programu je da za bilo koja 2 slova bilo kako napisana ispisuje sva slova između njih unazad (uključivši zadana slova)... te isto tako je bitno da znam pdoesiti kod da se vrti u obratnom smjeru (dakle od naprijed ka iza, što ovaj kod radi)...

 

u prilogu mozes vidjeti source kod i kako se program izvrsava kad je redoslijed slova "pravilan" (slika 1) i kad je "obrnut" (slika 2)

 

 

EDIT: @captain može onda pomoć da to skužim (nekako), jer se baš i ne snalazim u onome što si napisao

Extend my EMSI License for free: http://download.emsisoft.com/EmsisoftAntiMalwareSetup_6434073 / My Web Site: http://markoidzan.from.hr || First Croatian CM9 blog: http://cm9croatia.blogspot.com
Poruka je uređivana zadnji put pet 21.12.2012 18:19 (midzan21).
15 godina
online
Re: Programiranje u C-u - od svega pomalo
1domagoj1 kaže...

U for petlji ti fale apostrofi, znaci ide char c = 'a' i c <= 'b'.

  Zapravo, ne fale mu apostrofi jer se imena a i b odnose na varijable koje je deklarirao na pocetku i onda u njih unio vrijednosti pomocu scanf.

 

On je ustvari napravio gresku sto je varijable imenovao na takav glup nacin. Imena  a,b i c su totalno glupa imena za varijable, jednostavno cine kod potpuno necitljivim. Mislim da je trebao koristiti neka smislenija imena poput  pocetak  kraj.

 

midzan21 kaže...
najvaznije u programu je da za bilo koja 2 slova bilo kako napisana ispisuje sva slova između njih unazad (uključivši zadana slova)... te isto tako je bitno da znam pdoesiti kod da se vrti u obratnom smjeru (dakle od naprijed ka iza, što ovaj kod radi)...

  Trebas dodati jos jednu for petlju koja sluzi za ispsivanje unatrag. I onda pomocu  if-else izvrsiti onu koja potrebna(ako je pocetno slovo manje od zavrsnog onda koristis "normalnu" petlju, a ako je pocetno slovo vece od zavrsnog onda koristis "obrnutu" petlju.

I would love to change the world, but they won't give me the source code
17 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
midzan21 kaže...

primjedba za int je prihvaćena... i da ako stavim apostrof onda ispisuje samo a i b (a probavam sa kombinacijom npr f pa c ili g pa t)... najvaznije u programu je da za bilo koja 2 slova bilo kako napisana ispisuje sva slova između njih unazad (uključivši zadana slova)... te isto tako je bitno da znam pdoesiti kod da se vrti u obratnom smjeru (dakle od naprijed ka iza, što ovaj kod radi)...

 

u prilogu mozes vidjeti source kod i kako se program izvrsava kad je redoslijed slova "pravilan" (slika 1) i kad je "obrnut" (slika 2)

 

 

EDIT: @captain može onda pomoć da to skužim (nekako), jer se baš i ne snalazim u onome što si napisao

Aha, aha, sad sam skuzio sto ti zelis. Nisam najbolje pogledao kod, zato sam zazujao ovo za apostrofe. A cuj, kako ti je kapetan objasnio, brojevi su zapravo ASCII vrijednosti i ti njih usporedujes.

 

Ovako na brzinu rekao bih da napravis jedan uvjet koji ce pokretati odgovarajucu for petlju ovisno o slucaju (jel je veci prvi uneseni broj ili drugi). Znaci imas jedan if uvjet i dvije for petlje, po jedna za jedan slucaj i s ifom zapravo odabires koja ce se petlja izvrsiti.

The programmer is fighting against the two most destructive forces in the universe: entropy and human stupidity. --Damian Conway
Poruka je uređivana zadnji put pet 21.12.2012 18:33 (1domagoj1).
15 godina
online
Programiranje u C-u - od svega pomalo

midzan21 kaže...

EDIT: @captain može onda pomoć da to skužim (nekako), jer se baš i ne snalazim u onome što si napisao

  Prvo moras shvatiti na koji nacin ti znakove pohranjujes u c++-u.   A to je napravljeno tako da se za svaki znak odredio neki broj koji taj znak predstavlja. I za to se koristi ASCII tablica. Pa tako slovo A ima kod 65, B ima 66 itd. Kad ti slovo pohranjujes u c++-u ti ustvari pohranjujes njegov broj. Pa ako je korisnik unio znak A, u char varijabli se zapisuje broj 65 koji taj znak predstavlja. Kada ti usporedujes char tipove ti ustvari usporedujes te brojeve. U ASCII tablici slova su poredana abecednim redom, pa tako kad usporedujes slova B i C, vece je slovo C zato sto ima veci ASCII kod(66 < 67).

 

Zbog toga je slovo t vece od slova h, i zbog toga tvoja petlja normalno radi kada ides od manjeg slova k vecem, jer ti stalno uvecavas pocetnu vrijednost(varijabla c). No kada ides od veceg k manjem( od t do h) trebas napisati drugaciju petlju koja ce umanjivati pocetnu vrijednost.

I would love to change the world, but they won't give me the source code
 
0 0 hvala 0
13 godina
offline
Programiranje u C-u - od svega pomalo

Imam problem u radu sa datotekama. Imam jednu funkciju koja prima dva file pointera te kopira sadržaj iz jedne .txt datoteke u drugu, ali mijenja slova u uppercase (druga radi to isto, samo lowercase).

E sad, ja nikako ne mogu napisati funkciju koja će u jednoj datoteci to napraviti, bez kopiranja u drugu. Datoteke otvaram u "r+" modu da se ne moram još i s tim zezati. Mislim da nije potreban main jer to sigurno nije problem.

 

//Ovo radi:

 

void mala_u_velika(FILE *fin, FILE *fout)

{

       char c;

       while((c = fgetc(fin)) != EOF)

       {

             if(c >= 'a' && c <= 'z')

                    fputc(c - 32, fout);

             else

                    fputc(c, fout);

       }

       return;

}

 

void mala_u_velika(FILE *fin, FILE *fout)

{

       char c;

       while((c = fgetc(fin)) != EOF)

       {

             if(c >= 'A' && c <= 'Z')

                    fputc(c + 32, fout);

             else

                    fputc(c, fout);

       }

       return;

}

 


//Ovo NE radi:

 

#include <stdio.h>

 

void velika_u_mala(FILE *f)

{

       char c;

       while((c = fgetc(f)) != EOF)

       {

             if(c >= 'A' && c <= 'Z')

             {

                    fseek(f, -1, SEEK_CUR);

                    fputc(c + 32, f);

             }

       }

       return;

}

 

0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
Poruka je uređivana zadnji put pet 21.12.2012 19:02 (pr0n_addict).
Moj PC  
0 0 hvala 0
16 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
captain_soap_McTawish kaže...

 

midzan21 kaže...

EDIT: @captain može onda pomoć da to skužim (nekako), jer se baš i ne snalazim u onome što si napisao

  Prvo moras shvatiti na koji nacin ti znakove pohranjujes u c++-u.   A to je napravljeno tako da se za svaki znak odredio neki broj koji taj znak predstavlja. I za to se koristi ASCII tablica. Pa tako slovo A ima kod 65, B ima 66 itd. Kad ti slovo pohranjujes u c++-u ti ustvari pohranjujes njegov broj. Pa ako je korisnik unio znak A, u char varijabli se zapisuje broj 65 koji taj znak predstavlja. Kada ti usporedujes char tipove ti ustvari usporedujes te brojeve. U ASCII tablici slova su poredana abecednim redom, pa tako kad usporedujes slova B i C, vece je slovo C zato sto ima veci ASCII kod(66 < 67).

 

Zbog toga je slovo t vece od slova h, i zbog toga tvoja petlja normalno radi kada ides od manjeg slova k vecem, jer ti stalno uvecavas pocetnu vrijednost(varijabla c). No kada ides od veceg k manjem( od t do h) trebas napisati drugaciju petlju koja ce umanjivati pocetnu vrijednost.

 

ček evo tebi kako glasi zadatak pa mi onda uz pomoć mojeg source-a ispravi greške (poboldano da vidim što je mijenjano)

 

Napisati program koji u unosu prima dva mala slova (npr 'h' i 't'). Program treba ispisati sva slova u engleskoj abecedi koja se nalaze između dva upisana slova (uključujući i ta slova), unatrag (od kraja prema početku), razdvojena razmakom (SPACE). Napomena: prvo unijeto slovo ne mora biti "ispred" drugo unijetog po abecednom redoslijedu.

 

Unos i ispis možete prilagoditi i uljepšati prema izboru, dani primjeri samo pokazuju funkcionalnost programa.

 

 

Primjer:

 

unos: h t

ispis: t s r q p o n m l k j i h

 

Primjer:

 

unos: d a

ispis: d c b a

 

 

Primjer provjere samostalnog rada:

 

Izmjeniti program da ispisuje unaprijed (od prvog slova prema zadnjem)

 

Bitno mi je da shvatim ovo poboldano kako riješiti (preko nekih primjera kao što je TracerCPP pokazao)

Extend my EMSI License for free: http://download.emsisoft.com/EmsisoftAntiMalwareSetup_6434073 / My Web Site: http://markoidzan.from.hr || First Croatian CM9 blog: http://cm9croatia.blogspot.com
14 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

@pr0n_addict

 

U pravilu, fseek se koristi kod binarnih (neformatiranih) datoteka. Tvoja je očito formatirana (razumljiv tekst) pa vjerojatno fseek pogrešno pozicionira kad naleti na znak poput prelaska u novi redak ('\r\n'). Zato ti je zadatak vjerojatno bio da napraviš novu datoteku umjesto da imaš probleme s pozicioniranjem u staroj.

Kada lajavci laju onda završe ovako: http://i471.photobucket.com/albums/rr77/toropreto/2012-07-0813_30_07.gif
Poruka je uređivana zadnji put pet 21.12.2012 19:08 (TracerCPP).
Moj PC  
0 0 hvala 0
13 godina
offline
Re: Programiranje u C-u - od svega pomalo
TracerCPP kaže...

U pravilu, fseek se koristi kod binarnih (neformatiranih) datoteka. Tvoja je očito formatirana (razumljiv tekst) pa vjerojatno fseek pogrešno pozicionira kad naleti na znak poput prelaska u novi redak ('\r\n'). Zato ti je zadatak vjerojatno bio da napraviš novu datoteku umjesto da imaš probleme s pozicioniranjem u staroj.

Istina, takav je bio zadatak, ali evo mene zanima kako se to može obaviti u istoj datoteci. Kolege s faxa (njih dvadeset) su platili profesionalnog programera da im riješi sve zadatke iz svih vježbi. Usput je i ovog riješio, naravno. Oni se samo pojave s rješenjima i skupe se za pola sata doma. Napravio je to za nekih šestotinjak kuna (platiti su to zajedno), pa sad oni ne žele dijeliti sa mnom jer su platiti. Svašta, pa ja sad moram vas gnjaviti tu na forumu s ovim banalnostima. Negdje sam pročitao da fseek zezne EOF od fputc-a pa programčić uđe u nekakvu beskonačnu petlju ili što već.

0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
Poruka je uređivana zadnji put pet 21.12.2012 19:11 (pr0n_addict).
14 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

Pa možeš sve izmjene napraviti u novoj datoteci, staru datoteku izbrisati a zatim novoj promijeniti ime.

 

Ili, datoteku obrađivati kao binarnu pa koristiti fread i fwrite.

Kada lajavci laju onda završe ovako: http://i471.photobucket.com/albums/rr77/toropreto/2012-07-0813_30_07.gif
Poruka je uređivana zadnji put pet 21.12.2012 19:16 (TracerCPP).
13 godina
offline
Re: Programiranje u C-u - od svega pomalo
TracerCPP kaže...

Pa možeš sve izmjene napraviti u novoj datoteci, staru datoteku izbrisati a zatim novoj promijeniti ime.

 

Ili, datoteku obrađivati kao binarnu pa koristiti fread i fwrite.

Hvala, probat ću tako. Još me zanima zašto mi ovaj kod ispisuje žvrljotine na konzolu i u datoteku (nešto ga fgets zeza valjda):

Ajme kako je naporan ovaj editor {#}

 

 

 

// Zadatak 2.

 

#include <stdio.h>

#include <stdlib.h>

 

int main()

{

       int *a, n, i;

       char str[512];

       FILE *f;

       printf("Unesite velicinu niza: ");

       scanf("%d", &n);

       if(n <= 0)

       {

             printf("%d je nedopustena vrijednost!\n", n);

             return 1;

       }

       a = (int*)malloc(n * sizeof(int));

       if(a == NULL)

             return 1;

       putchar('\n');

       f = fopen("mojniz.txt", "r+");

       if(f == NULL)

             return 1;

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

       {

             printf("Unesite %d. element niza: ", i + 1);

             scanf("%d", &a[i]);

             fprintf(f, "%d ", a[i]);

       }

       putchar('\n');

       puts(fgets(str, 512, f));

       free(a);

       fclose(f);

       return 0;

}

 

0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
Poruka je uređivana zadnji put pet 21.12.2012 19:21 (pr0n_addict).
14 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Da ne treba možda dodati '\0' na kraj stringa?

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

Da ne treba možda dodati '\0' na kraj stringa?

Još jedan fprintf ili fputc nakon što se petlja izvrši ili što?

 

EDIT: 0 bodova, prešao u novi red i opet ispisao žvrljotine {#}

0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
Poruka je uređivana zadnji put pet 21.12.2012 19:31 (pr0n_addict).
14 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

Kod mene je ovo tvoje sve OK, samo što koristiš r+. Zato onaj stari sadržaj datoteke (žvrljotine) i dalje ostane a onaj početni sadržaj bude novo-uneseni niz. Probaj umjesto r+ koristiti w.

Kada lajavci laju onda završe ovako: http://i471.photobucket.com/albums/rr77/toropreto/2012-07-0813_30_07.gif
Poruka je uređivana zadnji put pet 21.12.2012 19:33 (TracerCPP).
13 godina
offline
Re: Programiranje u C-u - od svega pomalo
TracerCPP kaže...

Kod mene je ovo tvoje sve OK, samo što koristiš r+. Zato onaj stari sadržaj datoteke (žvrljotine) i dalje ostane a onaj početni sadržaj bude novo-uneseni niz. Probaj umjesto r+ koristiti w.

Ma nikako, možda je do IDE-a odnosno compilera (koristim VS 2010). Mislim da si pomiješao append mod "a+" sa "r+" - potonji prebriše postojeći sadržaj i omogući novi upis vrijednosti u file.

0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
Poruka je uređivana zadnji put pet 21.12.2012 19:37 (pr0n_addict).
14 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

Nisam ništa pomješao. r+ je ostavljao stari sadržaj na kraju datoteke a prebrisalo (prepisalo) bi se samo ono s početka.

 

Uglavnom, probaj onda s nekim drugim compilerom. Meni sve ok radi u C++ Builderu.

Kada lajavci laju onda završe ovako: http://i471.photobucket.com/albums/rr77/toropreto/2012-07-0813_30_07.gif
Nova poruka
E-mail:
Lozinka:
 
vrh stranice