Programiranje

Programiranje u C-u - od svega pomalo

beno101 uto 8.2.2011 17:47
rustweaver kaže...
beno101 kaže...

No kak da onda u string tipka stavim rijec KVADRAT??

A to ti zapravo zelis!!

 

tipka = "KVADRAT"

 

ili ga mozes kopirati pomocu strcpy

 

#include <string.h>
...
strcpy(tipka,"KVADRAT")

KOnačno!

Hvala ti!

Znam tu naredbu ali je dugo nisam koristio pa je zaboravio...

Hvala!

beno101 uto 8.2.2011 17:49
Luuka kaže...
beno101 kaže...

No kak da onda u string tipka stavim rijec KVADRAT??

 

Ako želiš da string tipka bude "KVADRAT" onda strcpy(tipka,"KVADRAT").

Prouči te funkcije koje rade sa stringovima, recimo ovdje

Kasniš... hehe

rustweaver uto 8.2.2011 18:37

Ne, nije dobro. Sto sam ti rekao na prethodnoj stranici o usporedivanju stringova? Ne mozes ih usporedivati direktno pomocu znaka jednakosti kao sto mozes sa brojevima. Moras koristiti strcmp.

 

Ovako:

 

if (strcmp(r4,"#...#")==0) strcpy(tipka,"KVADRAT");

 

Takoder, ovo je malo zgodnije, umjesto:

 

scanf ("%s %s %s %s %s",r1,r2,r3,r4,r5);

 

stavi:

 

scanf("%s", r1);
scanf("%s", r2);
scanf("%s", r3);
scanf("%s", r4);
scanf("%s", r5);

 

Tako ces bolje vidjeti koji znak upisujes ;)

 

I jos imam primjedbu na uvlacenje kôda, tj ne-uvlacenje u tvom slucaju. Uvuci malo te linije, te mozes koji puta i lupiti enter da napravis jednu praznu liniju izmedu nekih djelova kako bi bilo citljivije. Samo prijedlog...

 

Osim ovoga sto sam nabrojao, sve ostalo se cini ok...

rustweaver uto 8.2.2011 18:49
beno101 kaže...

http://pastie.org/1541663

Eto rustweaver!
Bolje?

Skuzio si sto sam mislio s praznim linijama, ali te uvlacenje malo zbunjuje. Uvlacis samo linije u viticastim zagradama, svaki puta kada otvoris nove viticaste zagrade unutar viticastih zagrada, jos vise uvuces linije unutar tih novih zagrada tako da istaknes sto cemu pripada. U ovom slucaju imas funkciju main koja ima samo jedan par viticastih zagrada pa sve unutar njih uvuces jednom:

 

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

int main ()
{
    char r1[10];
    char r2[10];
    char r3[10];
    char r4[10];
    char r5[10];
    char tipka[10];
   
    scanf("%s", r1);
    scanf("%s", r2);
    scanf("%s", r3);
    scanf("%s", r4);
    scanf("%s", r5);
   
    if (strcmp(r4,"#...#")==0) strcpy(tipka,"KVADRAT");
    if (strcmp(r4,".#.#.")==0) strcpy (tipka, "KRUG");
    if (strcmp(r4,"#####")==0) strcpy (tipka, "TROKUT");
    if (strcmp(r3,"..#..")==0) strcpy (tipka, "X");
    if (strcmp(r3,"##...")==0) strcpy (tipka, "R");
    if (strcmp(r4,"..#..")==0) strcpy (tipka, "GORE");
    if (strcmp(r4,".###.")==0) strcpy (tipka, "DOLJE");
    if (strcmp(r4,".#...")==0) strcpy (tipka, "LIJEVO");
    if (strcmp(r4,"...#.")==0) strcpy (tipka, "DESNO");
    if (strcmp(r1,"#....")==0) strcpy (tipka, "L");
   
    printf ("\n%s\n",tipka);
    return 0;
}

rustweaver uto 8.2.2011 18:54
beno101 kaže...

@Rustweaver

Znači smisao uvlačenja je?

Preglednost?

Tocno. Lakse vidis sto cemu pripada.

 

Evo neki blesavi primjer koji demonstrira ono sto sam napisao gore, kako treba uvlaciti:

 

int main ()
{
    int a=0;
   
    while (1)
    {
          printf("xD");
          if (a==10)
          {
             printf("'A' je 10");
             break;
          }
          a++;
    }
   
    return 0;
}

beno101 uto 8.2.2011 18:56

@rustweaver

to je sad malo ipak nepregledan kod zbog manjeg broja naredbi, ali skužio sam što je pisac (rustweaver) htio reći....

 

JAOOOO!

Sutra natjecanje školsko....

Šta ću?

Jedva znam C...

Tj. znam uvijek riješiti 1. i 2. u Cu ali 3. nikad nisam znao... za drugu podskupinu....

Možda mi nije suđeno da budem programer, možda moram odustati...

 

1domagoj1 uto 8.2.2011 18:57
beno101 kaže...

@Rustweaver

Znači smisao uvlačenja je?

Preglednost?

Pa naravno! Ajde zamisli program od par (desetaka) tisuća linija koda nabacano sve jedno ispod drugog... Debugging nekakvi? Not a chance. Da mi da netko takav program, jajima bi ga izgađal i bacio van iz kuće skupa s USB-om na kojem ga je donio...

beno101 uto 8.2.2011 19:02
1domagoj1 kaže...
beno101 kaže...

@Rustweaver

Znači smisao uvlačenja je?

Preglednost?

Pa naravno! Ajde zamisli program od par (desetaka) tisuća linija koda nabacano sve jedno ispod drugog... Debugging nekakvi? Not a chance. Da mi da netko takav program, jajima bi ga izgađal i bacio van iz kuće skupa s USB-om na kojem ga je donio...

Opet kasniš Domagoje!

Hehe!

 

mbaksa uto 8.2.2011 20:03
beno101 kaže...

@Rustweaver

Znači smisao uvlačenja je?

Preglednost?

 

Da, preglednost - ali s kojom svrhom? Sa svrhom hijerarhijskom organiziranja - da znas sto je unutar cega, da vidis strukturu programa.

beno101 uto 8.2.2011 20:05
mbaksa kaže...
beno101 kaže...

@Rustweaver

Znači smisao uvlačenja je?

Preglednost?

 

Da, preglednost - ali s kojom svrhom? Sa svrhom hijerarhijskom organiziranja - da znas sto je unutar cega, da vidis strukturu programa.

Da skonto već dva-tri puta...

Ali hvala mode!

rustweaver uto 8.2.2011 20:30
beno101 kaže...

Kako da u C-u napišem neki broj i onda:

1. prvu znamenku (54, print 5)

2. obrnuti redoslijed znamenki broja (54, 45)

 

Hvala!

Neka korisnik unese taj broj kao string, i onda samo ispisuj pojedina slova stringa redom koji tebi odgovara.

 

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

int main()
{
    char tekst[10];
    int n;
   
    gets(tekst);   
   
    //ispisi prvo slovo stringa
    printf("%c\n", tekst[0]);
   
    //ispisi string obratno
    for (n=strlen(tekst)-1; n>=0; n--)
        printf("%c", tekst[n]);
   
    printf("\n");
    system("pause");  
    return 0;
}

Luuka uto 8.2.2011 20:38
beno101 kaže...

Kako da u C-u napišem neki broj i onda:

1. prvu znamenku (54, print 5)

2. obrnuti redoslijed znamenki broja (54, 45)

 

Hvala!

Ako baš želiš baratat s intovima (a ne sa stringom) onda možeš ili u niz spremit znamenke (koje pocijepaš sa while petljom) ili možeš pojedinu znamenku iščupat sa / i % operatorima. Npr za znamenku desetica napraviš (x/10)%10.

Pokušaj ovaj zadatak napravit:

unesti 2 inta.

zbrojiti okrenute brojeve.

 

za unešene

x=2345

y=17

treba ispisati 5432+71=5503

 

(kao što vidiš, rezultat nije isti ko kad bi prvo zbrojili pa okrenuli)

 

Najprije napravi za brojeve koji su najviše četveroznamenkasti, pa probaj za one za koje ne znaš koliko znamenki će imat.

Probaj sa spremanjem u niz i bez. Igraj se :D

mbaksa sri 9.2.2011 09:43
beno101 kaže...

Pozdrav!

Znate li naredbu swap u basicu?

Kako ta naredba glasi u Cu?

Moram zamijeniti a i b a neznam kako...

Hvala!

LOL - ti si još u začecima začetaka. Upotrijebiš neku treću, privremenu varijablu? Privremena=a, a=b, b=privremena.

beno101 sri 9.2.2011 09:45
mbaksa kaže...
beno101 kaže...

Pozdrav!

Znate li naredbu swap u basicu?

Kako ta naredba glasi u Cu?

Moram zamijeniti a i b a neznam kako...

Hvala!

LOL - ti si još u začecima začetaka. Upotrijebiš neku treću, privremenu varijablu? Privremena=a, a=b, b=privremena.

Znači nemogoće je?

 

mbaksa sri 9.2.2011 09:51
beno101 kaže...
mbaksa kaže...

Upotrijebiš neku treću, privremenu varijablu? Privremena=a, a=b, b=privremena.

Znači nemogoće je?

Mislio sam da sam ti odgovorio na pitanje - napisao sam ti točno kako se to može napraviti. Ne može se kao u basicu, korištenjem funkcije poput swap, pošto takva funkcija AFAIK u C/C++-u ne postoji. Ti si je doduše možeš sam napisati.

beno101 sri 9.2.2011 09:52
mbaksa kaže...

Mislio sam da sam ti odgovorio na pitanje - napisao sam ti točno kako se to može napraviti. Ne može se kao u basicu, korištenjem funkcije poput swap, pošto takva funkcija AFAIK u C/C++-u ne postoji. Ti si je doduše možeš sam napisati.

Stvarno?

Reci malo više....

 

Luuka sri 9.2.2011 10:58
Orinem kaže...
void swap (int &a, int &b)
{
 int temp = a;
 a = b;
 b = temp;
}
za poziv napises
swap(a, b);

 

Ovo će možda bit ok u c++u ako se radi s referencama. U C-u bi išlo ovako neto:

 

void swap (int *a, int *b)
{
 int temp = *a;
 *a = *b;
 *b = temp;
}
za poziv napises
swap(&a, &b);

 

No pošto pitaš ovakvo pitanje vjerojatno si na početku programiranja pa bi pointeri bili too much. Bolje poslušaj što kaže mbaksa, jednostavno kad mijenjaš varijable uzmeš jednu pomoćnu pa ih zamijeniš. Kod je isti ko gore samo bez zvjezdica. Upućujem te na 118str

 

 

 

 

IRebic sri 9.2.2011 11:06

Ljudi, treba mi pomoć oko zadatka, korisnik upisiva broj n , a program treba izračunati broj za koji vrijedi:

  1        ...                n

---- + -----    +  -------------

1+2   1+2+...   1+...+(n+1)

 

ako je (n=2) bit će:

  1         2

----- + --------

1+2    1+2+3

 

ako je (n=3) bit će:

  1         2                3

---- + --------  + -----------

1+2   1+2+3     1+2+3+4

 

Nadam se da kužite, hvala na pomoći unaprijed...

 

mbaksa sri 9.2.2011 11:17

Gdje je problem? Znaš valjda napraviti petlju, znaš zbrojiti i dijeliti, zar ne? Imaš varijablu rezultat, koja se uvećava za izraz

 

       n

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

1+...+(n+1)

 

 

Znači, izvana imaš petlju koja ide za svaki n. Što će se događati unutar te petlje? Pa prvo ćeš ići računat dijeljitelja - vrtjet ćeš petlju, i uvećavati sve do n+1, zar ne? I onda ćeš jednostavno podijeliti n s dijeljiteljem. I taj rezultat će se u petlji iznad (tj. skroz vanjskoj petlji) dodati ukupnom rezultatu.

 

 

Drugim riječima, razloži problem na manje jednotavnije probleme. Dijelitelja valjda znaš izračunati. Izraz n/djeljitelj bi isto morao znati izračunati. I u konačnici samo moraš zbrojiti sve te izraze.