Programiranje u C-u - od svega pomalo izdvojena tema

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

Samo tuci po kodu, stackoverflow, geeksforgeeks itd će ti pomoći. Što više radiš sam bit ćeš bolji iako će ti duže trebati.

 
1 0 hvala 0
4 godine
neaktivan
offline
Programiranje u C-u - od svega pomalo

Pozdrav, ljudi!

Prolazim kroz neke vježbe za početnike i naišao sam na zadatak gdje neki broj dana treba rasporediti u godine, mjesece, tjedne i ponovo dane (ostatak pri dijeljenju).

Nekako sam ga uspio riješiti, no htio sam da broj dana unosim iz konzole kao parametar (*char argv[]).

Taj string sam koristeći atoi() prebacio u integer i to šljaka.

Međutim, zanima me ima li neka caka da se umjesto *char argv[] unosi niz integera? int argv[] ili nešto slično.

Unaprijed hvala!

 

evo kod:

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

int main (int argc, char *argv[])
{
   int x = atoi(argv[1]);
   int years = x / 365;
   int months = (x % 365) / 30;
   int weeks = ((x % 365) % 30) / 7;
   int days = ((x % 365) % 30) % 7;
   
   printf ("YEARS: %d\n", years);
   printf ("MONTHS: %d\n", months);
   printf ("WEEKS: %d\n", weeks);
   printf ("DAYS: %d\n", days);

}

 
0 0 hvala 0
4 godine
neaktivan
offline
Programiranje u C-u - od svega pomalo

Nevermind za zadnji post.

Pokušavam riješiti zadatak s nekog školskog natjecanja iz 2008. (slike u prilogu).

 

Ovo je kod koji sam napisao, međutim radi samo kada je rotacija istog tipa, čim ih pomiješam, ne radi više ništa.

Ima li itko ideju zašto je tomu tako?

Hvala unaprijed!

 

#include <stdio.h>

int main ()
{
   int fields[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
   char buffer1[100];
   int nm=0; // moves
   int memory[3][3];
   int command[20];
   int x=1;
   int i=0;
   int j=0;
   char buffer[100];

   fgets(buffer1, 100, stdin);
   sscanf(buffer1, "%d", &nm);

   fgets(buffer, 100, stdin);
   for (i=0; i<nm; i++) {
      sscanf(buffer, "%d", &command[i]);
      switch (command[i])
         {
         case 1:
         memory[0][0]=fields[0][0];
         memory[0][1]=fields[0][1];
         memory[0][2]=fields[1][1];
         memory[0][3]=fields[1][0];

         fields[0][0] = memory[0][3];
         fields[0][1] = memory[0][0];
         fields[1][0] = memory[0][2];
         fields[1][1] = memory[0][1];
         break;
         
         case 2:
         memory[1][0]=fields[0][1];
         memory[1][1]=fields[0][2];
         memory[1][2]=fields[1][1];
         memory[1][3]=fields[1][2];

         fields[0][2] = memory[1][0];
         fields[1][2] = memory[1][1];
         fields[1][1] = memory[1][3];
         fields[0][1] = memory[1][2];
         break;

         case 3:
         memory[2][0]=fields[1][0];
         memory[2][1]=fields[1][1];
         memory[2][2]=fields[2][0];
         memory[2][3]=fields[2][1];

         fields[1][1] = memory[2][0];
         fields[2][1] = memory[2][1];
         fields[2][0] = memory[2][3];
         fields[1][0] = memory[2][2];
         break;
   
         case 4:
         memory[3][0]=fields[1][1];
         memory[3][1]=fields[1][2];
         memory[3][2]=fields[2][1];
         memory[3][3]=fields[2][2];

         fields[1][2] = memory[3][0];
         fields[2][1] = memory[3][3];
         fields[2][2] = memory[3][1];
         fields[1][1] = memory[3][2];
         break;


         default:
         printf ("FAILED");
         }
      }
   //prints out the entire field
   for (i=0; i<3; i++) {
      for (j=0; j<3; j++) {
         printf ("%d", fields[i][j]);
      }
   printf("\n");
   }
   
         
            
   return 0;
}

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

Problem je

 

sscanf(buffer, "%d", &command[i]);

 

Ova linija kod svakog izvršavanja učita prvi broj iz stringa buffer, a ne i-ti broj iz stringa buffer.

 

Dodaj jedan printf("%d\n", command[i]); iza ove naredbe i vidjet ćeš da u svakom koraku radiš prvu rotaciju.

4 godine
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
Bobobo-bo Bo-bobo kaže...

Problem je

 

sscanf(buffer, "%d", &command[i]);

 

Ova linija kod svakog izvršavanja učita prvi broj iz stringa buffer, a ne i-ti broj iz stringa buffer.

 

Dodaj jedan printf("%d\n", command[i]); iza ove naredbe i vidjet ćeš da u svakom koraku radiš prvu rotaciju.

 Da, hvala puno!

trebalo je upotrijebit pointer i onda neki %n i onda pointeru dodat taj n, nemam pojma što to točno radi, ali upalilo je:

 

char *at; // pointer

 

fgets(buffer, 100, stdin);
   at =buffer; //point to buffer
   for (i=0; i<nm; i++) {
      
      sscanf(at, "%d%n", &command[i], &n);

.

.

.

    at += n;

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

Taj %n je mehanizam kojim sscanf vraća broj znakova učitanih iz stringa at. Zadnja naredba omogućuje da sljedeći poziv sscanf nastavi tamo gdje je prethodni poziv završio.

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

Pozdrav,

 

Napisati C program koji će učitati dva cijela broja A i B, takvi da su veći od 300 i manji od 500, i da je B veće od A za najmanje 28. Ako nisu ispunjeni navedeni uvjeti ispisati poruku "Brojevi nisu u zadanim granicama" i ponoviti učitavanje brojeva.Izračunati broj i zbroj parnih brojevaizmeđuA i B čiji je zbroj znamenki jednak 11.Ispisati broj pronađenih brojeva i njihov zbroj porukom "Brojeva je _, zbroj je _".

 

#include <stdio.h>

int main()

{
    int A, B, C;
    int prva, druga, treca, treca_f;

    printf ("Upisite dva broja: ");
    scanf ("%d%d",&A,&B);

    while (A>500 || A<300 || B>500 || B<300 || B-A<28)
           {

    printf ("Brojevi nisu u zadanim granicama!");
     break;

    }

    for (A; A<B; A++)
    {
        prva=A/100;
        treca_f=A%100;
        treca=treca_f%10;
        druga=treca_f/10;

        if (A%2==0 && prva + druga+treca==11)
        {C++;
        printf ("\n%d", A);
    }
    }
    printf ("Broj brojeva je: %d", C);

    return 0;

}

 

 

Znači sve mi dobro izračuna no program se ne prekida nakon što se unesu pogrešni brojevi. Kako napraviti da se nakon ispisa poruke "Brojevi nisu u zadanim granicama" završi program i korisnik treba upet upisivati brojeve

Poruka je uređivana zadnji put uto 8.9.2020 17:52 (Hazar).
10 godina
offline
Re: Programiranje u C-u - od svega pomalo
Hazar kaže...

 

Napisati C program koji će učitati dva cijela broja A i B, takvi da su veći od 300 i manji od 500, i da je B veće od A za najmanje 28. Ako nisu ispunjeni navedeni uvjeti ispisati poruku "Brojevi nisu u zadanim granicama" i ponoviti učitavanje brojeva.Izračunati broj i zbroj parnih brojevaizmeđuA i B čiji je zbroj znamenki jednak 11.Ispisati broj pronađenih brojeva i njihov zbroj porukom "Brojeva je _, zbroj je _".

  

 

Znači sve mi dobro izračuna no program se ne prekida nakon što se unesu pogrešni brojevi. Kako napraviti da se nakon ispisa poruke "Brojevi nisu u zadanim granicama" završi program i korisnik treba upet upisivati brojeve

 

Ne želiš da ti se program završi, nego želiš da ponovno učitava brojeve.

 

While petlja ti trenutno ništa ne radi nego samo ispisuje poruku, ali se program dalje nastavi, tj radi kao obični if uvjet jer ako uđe u nju odmah izađe iz nje zbog break naredbe.

U while petlji moraš ponovit učitavanje brojeva nakon ispisa "Brojevi nisu u zadanim granicama!" i maknut break kako bi se radnja ponovila sve dok uneseni brojevi ne budu u redu.

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

Jesi uspio riješiti ?

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

Jesi uspio riješiti ?

 Jesam, ovako sam riješio taj problem, ne znam jel najelegantnije riješenje, ali funkcionira :D.

 

#include <stdio.h>

int main()

{
    int A, B, C;
    int prva, druga, treca, treca_f;

    printf ("Upisite dva broja: ");
    scanf ("%d%d",&A,&B);

    while (A>500 || A<300 || B>500 || B<300 || B-A<28)
           {

    printf ("Brojevi nisu u zadanim granicama!");
    printf ("\nPonovno upisite dva broja: ");
    scanf ("%d%d",&A, &B);

    }
    for (A; A<B; A++)
    {
        prva=A/100;
        treca_f=A%100;
        treca=treca_f%10;
        druga=treca_f/10;

        if (A%2==0 && prva + druga+treca==11)
        {C++;
        printf ("\n%d", A);
    }
    }
    printf ("\nBroj brojeva je: %d", C);

    return 0;

}

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

Pozdrav,

 

Zadatak glasi ovako:

Uzeti znamenke svog JMBAG-a i OIB-a, zatim izdvojiti iz tih brojeva samo oktalne znamenke, njih zbrojiti (u oktalnoj bazi), a taj zbroj pretvoriti u heksadekadski oblik. Nakon toga, znamenke A-F staviti na lijevu stranu u istom redoslijedu (nazvat ćemo ih L), a ostale znamenke na desnu (nazvat ćemo ih D), te izračunati omjer L/D i zapisati ga u dekadskom obliku u znanstvenoj notaciji.
 
Primjer rjesavanja:
JMBAG: 0246784234 OIB: 4871779997
 
Oktalne znamenke oba broja su: JMBAG: 024674234 i OIB: 471777
Njihov zbroj, zapisan u heksadekadskom obliku je: 55ec9b
L = ecb (znamenke između a i f), a ostale znamenke su D = 559.
 
Omjer L/D = 2.766253 * 10^0, što je i konačno rješenje zadatka.
Sad, ja sam riješio ovaj prvi dio, znači definirao sam OIB i JMBAG kao stringove i s for i if petljom izvukao brojeve manje od 8, ali kako da ja kasnije koristim te nizove koje sam stvorio, znači JMBAG [i] i OIB [i]. JMBAG je i dalje ovaj prvi, ja sam uspio samo ispisati dio tog stringa bez tih znamenki, bi li ja trebao sad te stringove onda pretvoriti u int array, za taj dio nisam siguran, kako dalje?
Poruka je uređivana zadnji put ned 18.10.2020 16:06 (Hazar).
14 godina
offline
Re: Programiranje u C-u - od svega pomalo

Pozdrav, može netko pomoći, zadatak je sljedeći:

 

Na slici ispod je umjetnički prikazan koncept. Vi ste pozicionirani s lijeve strane, na koordinatama (0,0). Postoji N (1 <= N <= 1000) vrhova (u donjem slucaju, N=7), a svaki vrh ima X koordinatu i visinu V (0 < X, V <= 1000000000). 
Potrebno je za učitane vrhove (koji su učitani redom s lijeva na desno) odrediti koliko ih je vidljivo s koordinate (0,0). U donjem primjeru, vidljiva su 2 vrha, dok ostali nisu vidljivi jer vrh broj 2 nam zaklanja pogled da vidimo ostale.

 

Uglavnom znači koliko vrhova planine N se vidi, ako imamo njihove koordinate X i V

 

Ja sam ovako napravio, ali ne ispada dobro, trebam li koristiti nizove možda?

 

 Riješeno

Poruka je uređivana zadnji put ned 8.11.2020 22:10 (Hazar).
12 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

Program izgleda OK, možeš li navesti konkretne koordinate vrhova koje si koristio za testiranje?

14 godina
offline
Re: Programiranje u C-u - od svega pomalo
Bobobo-bo Bo-bobo kaže...

Program izgleda OK, možeš li navesti konkretne koordinate vrhova koje si koristio za testiranje?

 Ma skužio sam, rješenje mi je bilo krivo jer sam stavio varijable int za koordinate umjesto float pa je zato bilo krivo. Hvala svejedno :).

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

Pozdrav ljudi, nije nikakva hitnoća ni ništa, čisto dodatni zadatak za vježbu, ali me baš zanima kako se riješava, radi se o nizovima.

 

Evo lijepog teksta zadatka:

 

Odlazite na city-break u grad Nully, u Francuskoj, i s obzirom da želite obići sve znamenitosti u jednom danu, imate vrlo ograničen prostor u ruksaku.
Samim time, morate se odlučiti što želite ponijeti sa sobom. Stvarima koje želite ponijeti ste izmjerili težinu, i ocijenili koliko vam vrijede.
Primjerice, 
- krema za sunčanje je teška 1kg, ali vrijedi 50 jedinica
- štit od Captain America je težak 4kg (plastični) a vrijedi vam 75 jedinica
- sendvič od buđole je težak 2kg, i vrijedi 60 jedinica
- luft madrac je težak 1kg, ali vrijedi 10 jedinica
 
Pošto možete ponijeti samo 5kg, najoptimalnije je izabrati kremu za sunčanje i štit Captain America koji vrijede zajedno 125 jedinica. Druga opcija je da ponesete kremu, sendvič i luftić, i to vrijedi 120 jedinica. Što je zaključak? Nećete izgoriti i lijepo ćete izgledati na slikama sa štitom, ali ćete biti gladni.
 
S ulaza je potrebno učitati dva broja K i N. K označava koliko možete kilograma ponijeti u ruksaku, a N označava broj dostupnih stvari od kojih morate izabrati
Nakon toga slijedi N redaka, a u svakom retku se nalazi broj T i V, gdje je T težina pojedine stvari a V je njena vrijednost.
Na kraju je potrebno ispisati jedan broj: koja je najveća vrijednost koju je moguće ponijeti.
Primjer ulaza: 5 4
1 50
4 75
2 60
1 10
Izlaz: 125

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

int main()
{
    int N,K,i;
    int tezina [10];
    int vrijednost [10];

    scanf ("%d%d", &K, &N);
 
    for (i=0;i<N;i++)
    {
        scanf ("%d%d", &tezina[i], &vrijednost[i]);

 

Ja sam evo samo započeo, no uopće mi ne pada na pamet kako riješiti odnosno kako kombinirati stvari iz dva različita niza tako da jedna vrijednost ovisi o drugoj. Ne morate mi riješiti zadatak dajte mi da se mučim, ali mi dajte neki hint ili pomoć kako recimo učitati nizA i nizB od četiri elementa i da onda kombinacija vrijednosti iz niza A bude najveća ako kombinacija vrijednosti iz drugog niza odgovara N (u ovom slučaju 5).

 

Hvala unaprijed

 

Poruka je uređivana zadnji put ned 15.11.2020 19:10 (Hazar).
12 godina
offline
Re: Programiranje u C-u - od svega pomalo
Hazar kaže...

Pozdrav ljudi, nije nikakva hitnoća ni ništa, čisto dodatni zadatak za vježbu, ali me baš zanima kako se riješava, radi se o nizovima.

 

Evo lijepog teksta zadatka:

 

Odlazite na city-break u grad Nully, u Francuskoj, i s obzirom da želite obići sve znamenitosti u jednom danu, imate vrlo ograničen prostor u ruksaku.
Samim time, morate se odlučiti što želite ponijeti sa sobom. Stvarima koje želite ponijeti ste izmjerili težinu, i ocijenili koliko vam vrijede.
Primjerice, 
- krema za sunčanje je teška 1kg, ali vrijedi 50 jedinica
- štit od Captain America je težak 4kg (plastični) a vrijedi vam 75 jedinica
- sendvič od buđole je težak 2kg, i vrijedi 60 jedinica
- luft madrac je težak 1kg, ali vrijedi 10 jedinica
 
Pošto možete ponijeti samo 5kg, najoptimalnije je izabrati kremu za sunčanje i štit Captain America koji vrijede zajedno 125 jedinica. Druga opcija je da ponesete kremu, sendvič i luftić, i to vrijedi 120 jedinica. Što je zaključak? Nećete izgoriti i lijepo ćete izgledati na slikama sa štitom, ali ćete biti gladni.
 
S ulaza je potrebno učitati dva broja K i N. K označava koliko možete kilograma ponijeti u ruksaku, a N označava broj dostupnih stvari od kojih morate izabrati
Nakon toga slijedi N redaka, a u svakom retku se nalazi broj T i V, gdje je T težina pojedine stvari a V je njena vrijednost.
Na kraju je potrebno ispisati jedan broj: koja je najveća vrijednost koju je moguće ponijeti.
Primjer ulaza: 5 4
1 50
4 75
2 60
1 10
Izlaz: 125

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

int main()
{
    int N,K,i;
    int tezina [10];
    int vrijednost [10];

    scanf ("%d%d", &K, &N);
 
    for (i=0;i<N;i++)
    {
        scanf ("%d%d", &tezina[i], &vrijednost[i]);

 

Ja sam evo samo započeo, no uopće mi ne pada na pamet kako riješiti odnosno kako kombinirati stvari iz dva različita niza tako da jedna vrijednost ovisi o drugoj. Ne morate mi riješiti zadatak dajte mi da se mučim, ali mi dajte neki hint ili pomoć kako recimo učitati nizA i nizB od četiri elementa i da onda kombinacija vrijednosti iz niza A bude najveća ako kombinacija vrijednosti iz drugog niza odgovara N (u ovom slučaju 5).

 

Hvala unaprijed

 

Odličan zadatak, evo hint.

0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
Poruka je uređivana zadnji put ned 15.11.2020 19:17 (pr0n_addict).
14 godina
offline
Re: Programiranje u C-u - od svega pomalo
pr0n_addict kaže...
Hazar kaže...

Pozdrav ljudi, nije nikakva hitnoća ni ništa, čisto dodatni zadatak za vježbu, ali me baš zanima kako se riješava, radi se o nizovima.

 

Evo lijepog teksta zadatka:

 

Odlazite na city-break u grad Nully, u Francuskoj, i s obzirom da želite obići sve znamenitosti u jednom danu, imate vrlo ograničen prostor u ruksaku.
Samim time, morate se odlučiti što želite ponijeti sa sobom. Stvarima koje želite ponijeti ste izmjerili težinu, i ocijenili koliko vam vrijede.
Primjerice, 
- krema za sunčanje je teška 1kg, ali vrijedi 50 jedinica
- štit od Captain America je težak 4kg (plastični) a vrijedi vam 75 jedinica
- sendvič od buđole je težak 2kg, i vrijedi 60 jedinica
- luft madrac je težak 1kg, ali vrijedi 10 jedinica
 
Pošto možete ponijeti samo 5kg, najoptimalnije je izabrati kremu za sunčanje i štit Captain America koji vrijede zajedno 125 jedinica. Druga opcija je da ponesete kremu, sendvič i luftić, i to vrijedi 120 jedinica. Što je zaključak? Nećete izgoriti i lijepo ćete izgledati na slikama sa štitom, ali ćete biti gladni.
 
S ulaza je potrebno učitati dva broja K i N. K označava koliko možete kilograma ponijeti u ruksaku, a N označava broj dostupnih stvari od kojih morate izabrati
Nakon toga slijedi N redaka, a u svakom retku se nalazi broj T i V, gdje je T težina pojedine stvari a V je njena vrijednost.
Na kraju je potrebno ispisati jedan broj: koja je najveća vrijednost koju je moguće ponijeti.
Primjer ulaza: 5 4
1 50
4 75
2 60
1 10
Izlaz: 125

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

int main()
{
    int N,K,i;
    int tezina [10];
    int vrijednost [10];

    scanf ("%d%d", &K, &N);
 
    for (i=0;i<N;i++)
    {
        scanf ("%d%d", &tezina[i], &vrijednost[i]);

 

Ja sam evo samo započeo, no uopće mi ne pada na pamet kako riješiti odnosno kako kombinirati stvari iz dva različita niza tako da jedna vrijednost ovisi o drugoj. Ne morate mi riješiti zadatak dajte mi da se mučim, ali mi dajte neki hint ili pomoć kako recimo učitati nizA i nizB od četiri elementa i da onda kombinacija vrijednosti iz niza A bude najveća ako kombinacija vrijednosti iz drugog niza odgovara N (u ovom slučaju 5).

 

Hvala unaprijed

 

Odličan zadatak, evo hint.

 

Uh hvala puno, nisam znao da je toliko pažnje posvećeno baš ovom problemu :D.

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

Pozdrav,

 

Evo mene opet sa zadatkom.

 

Vaš zadatak je isprogramirati jednostavu igricu sličnu tetrisu, ali sa slijedećim pravilima:

  • polje za igru veliko je 3x3
  • polje za igru na početku igre je uvijek prazno (polje je popunjeno s vrijednostima 0)
  • polje za igru se popunjava odozgora prema dole, dakle ulazni objekt pada s vrha na dno polja za igru (kao u klasičnom tetrisu)
  • padajući objekt je dimenzije 1x1 (visine jednog retka i dužine jednog stupca) i ima vrijednost 1
  • objekt uvijek pada vertikalno kroz određeni stupac i ne mijenja smjer
    • na početku igre, unosi se broj stupca kroz koji će objekt padati
    • u slučaju unosa neodgovarajuće vrijednosti, izvan raspona [1,3], potrebno je ponoviti unos vrijednosti te ispisati poruku "Ponovi unos!"
  • nakon svakog "kruga" igre potrebno je ispisati stanje polja za igru i poruku "Nakon n-tog kruga:", dakle nakon primjene svih gore navedenih pravila vezanih uz tijek igre
  • kada neki stupac u polju za igru dostigne vrijednost 3 (visinu polja za igru) igra se prekida s porukom "Prekid igre."

 

 

Primjer ulaza:

2
2
2

 

Očekivani izlaz:

Nakon 1. kruga:
000
000
010
Nakon 2. kruga:
000
010
010
Nakon 3. kruga:
010
010
010
Prekid igre.

 

Neću uploadat kod da nebi slučajno netko od kolega naišao i kopirao, ljudi su padali zbog toga. Nego ću čisto pitati za hint. Znači došao sam do ovog slika.

 

Sad ne znam kako da se prebacim na drugi red, odnosno kako da postavim uvjet da ako je zadnji red ispunjen da se prilikom ponovnog unosa istog broja ispuni drugi red, a ne treći.

 

 

 

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

Prije upisa u polje (red, stupac) provjeri da li je polje prazno. Ako nije ponovi postupak za polje (red-1, stupac).

14 godina
offline
Re: Programiranje u C-u - od svega pomalo
Bobobo-bo Bo-bobo kaže...

Prije upisa u polje (red, stupac) provjeri da li je polje prazno. Ako nije ponovi postupak za polje (red-1, stupac).

 Uspio, hvala, ma išao sam preko brojača ipak, znači ako je neki stupac ispunjen njegov brojač++ i ako je brojač 1 ispuni drugi redak, ako je 2 ispuni prvi i radi.

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

Evo me opet. Radi se o 2D polju dimenzija 3x3 koje se inicira kao devet nuli.

 

Upisuju se vrijednosti tri po tri. Gotovo je kada u jednom stupcu bude 3 brojke koje nisu nula.

 

Znači otprilike ovako:

 

Input: 131, 200, 300

 

Nakon 1. kruga:
000
000
131
Nakon 2. kruga:
000
200
131
Nakon 3. kruga:
300
200
131
Prekid igre.

 

 

Ea sad, zadatak ima dodatan problem, ako su susjedne brojke iste, one se poništavaju i ako je cijeli redak 0 unosi se ispočetka.

 

Znači ovako

 

Input: 111, 320, 011, 001, 320

 

Nakon 1. kruga:
000
000
000
Nakon 2. kruga:
000
000
320
Nakon 3. kruga:
000
010
321
Nakon 4. kruga:
000
000
320
Nakon 5. kruga:
000
000
000
Ponovi unos!
Nakon 6. kruga:
000
000
131
Nakon 7. kruga:
000
200
131
Nakon 8. kruga:
300
200
131
Prekid igre.

 

 

Napravio sam kod za ovaj slučaj kad nema poništavanja, čak sam i na tragu da sklopim nešto i kada se poništavaju brojke, ali mi je problem kako vratiti da kada se ponište brojke da se ponovno unosi prvi redak

 

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

Riješeno

Poruka je uređivana zadnji put ned 22.11.2020 21:28 (Hazar).
13 godina
offline
Re: Programiranje u C-u - od svega pomalo

Nisam gledao detaljno, ali vidim da imaš for i unutar for i.

Svaki put moraš koristiti drugu varijablu.

Battlelog: [G] CyberDemonVZ
14 godina
offline
Re: Programiranje u C-u - od svega pomalo
CyberDemonVZ kaže...

Nisam gledao detaljno, ali vidim da imaš for i unutar for i.

Svaki put moraš koristiti drugu varijablu.

 Haha hvala, to je to, a ja razbijao glavu već jedno dulje vrijeme.

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

Riješeno

Poruka je uređivana zadnji put ned 22.11.2020 21:28 (Hazar).
13 godina
offline
Re: Programiranje u C-u - od svega pomalo

Na mobitelu sam, tako da mi malo teže ide podučavanje koda :)

Iz iskustva bi rekao krivi poredak i i j, umjesto brojenje od 0 na više, treba biti više prema 0, brojenje treba početi od i+1, a ne i... Ili nešto u tom stilu :D

Battlelog: [G] CyberDemonVZ
Poruka je uređivana zadnji put ned 22.11.2020 9:29 (CyberDemonVZ).
14 godina
offline
Re: Programiranje u C-u - od svega pomalo
CyberDemonVZ kaže...

Na mobitelu sam, tako da mi malo teže ide podučavanje koda :)

Iz iskustva bi rekao krivi poredak i i j, umjesto brojenje od 0 na više, treba biti više prema 0, brojenje treba početi od i+1, a ne i... Ili nešto u tom stilu :D

 Hm hm, ma čudno mi je da dobro radi bez tog dijela koda za prebacivanje brojeva na nule niže, to je obični if, i da tako poremeti ispis.

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

Kako rješavate stringove, konkretno u ovoj situaciji. Zadatak je kao napravit igru kaladont, odnosno nakon svakog unosa stringa ispisat zadnja dva slova i ako su ona NT onda je igra gotova. Jel to nešto pomoću substringova?

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

Koristiš C string. Znači string definiraš kao 

 

char tekst[32];

 

S time da si limitiran na 31 znak, 32. znak je \0(null) koji mora biti u svakom stringu kako bi računalo znalo da je došlo do kraja stringa.

Nakon svakog unosa uzimaš duljinu teksta s

 

uint8_t duljina = strlen(tekst);

 

Nakon toga ispisuješ zadnja dva znaka s

 

tekst[duljina - 2] i tekst[duljina - 1]

 

Nakon toga napraviš provjeru za kraj igre s

 

if((tekst[duljina - 2] == 'N' && tekst[duljina - 1] == 'T') || (tekst[duljina - 2] == 'n' && tekst[duljina - 1] == 't'))

 

Ako je provejra prošla - kraj igre - ako nije, ideš na ponovan unos.

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

Može neki hint, pseudo kod, bilo šta, kako biste ovo riješili.

 

Znači s matrice na lijevoj strani potrebno je dobiti riješenje na desnoj strani.

 

Drugim riječima, točke se pretvaraju u zvjezdice samo ako je put do G takav da se ne može nigdje skrenuti, znači X je i gore i dolje i dok dode do G stane.

 

Oke, ako je X iznad i ispod pretvaram tockicu u zvjezdicu, ali to mi ne rješava problem, koji još uvjeti nedostaju.

 

Hvala na pomoci.

 

Poruka je uređivana zadnji put sub 16.1.2021 20:45 (Hazar).
Nova poruka
E-mail:
Lozinka:
 
vrh stranice