Programiranje u C-u - od svega pomalo izdvojena tema

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

Dodao string.h, mesto deklaracije varijabli ne menja nista, cudno je sto uslov u while mislim da je OK, a kada pri debagiranje dogjem do while petlje, tu samo preskoci i produzi dalje?!

 kako sto vidis iz screenshota meni radi;

iz kojeg okruzenja to pokreces? neki IDE, CMD, terminal? kako ti se zovu ulazne datoteke, daj screenshot ili nesto?
sto se dogodi uopce ako pokrenes bez debug-era?

edit: koliko se meni cini, program ti radi, ali ti ne uspije otvorit datoteku te iz tog razloga ti i preskace onu petlju posto nema sto citati

edit2: skonto sam da sam tamo prekopirao krivi kod pa evo popravljeno, probaj s tim jel  ti radi

edit3: posto sam sad probao izveset u dev_c++ IDE-u i vidio kaku gresku taj pokazuje, gotovo sam siguran da je problem sto ti ne moze otovoriti input.txt datoteku pa provjeri:

        -da datoteka input.txt postoji uopce

        - da se nalazi u istom folderu u kojem program kojeg izvodis, ili da programu das dobar put do datoteke

        - da si izbacio razmake u imenu datoteke koje otvaras tj. da si promjenio " input .txt" u "input.txt"

i jos jedna napomena: strlen ti broji charove koje je procitao, a on procita i znak za novi red pa ti i njeg ubroji te ti tako zapise jedan vise u svakom redu osim zadnjeg. probaj to rijesit sam, pa ako ne uspije dodi po pomoc :D

Poruka je uređivana zadnji put sub 27.8.2016 10:40 (ShadoW).
7 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

Ovako radi kako sto kaze ShadoW.

Hvala vam puno!!

Poruka je uređivana zadnji put sub 27.8.2016 18:17 (koda5).
8 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

ljudi moze jedna brzinska pomoc.Neznam u cemu je gresku kad pritisnem f9 .Windows mi izbaci gresku i trazi problem da ga rijesi koji ne daje rezultate

 

evo koda:

 

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

void main()
{
char ime_prezime[25];
char ime[25];
char bjelina = " ";
int mjesto;

printf("upisite svoje ime i prezime:\n");
gets(ime_prezime);

mjesto=strcspn(ime_prezime,bjelina); //pregledava znak u stringu
strncpy(ime,ime_prezime,mjesto); //kopira ili duplicira string
ime[mjesto] = NULL;

printf("drago mi je da sam te upoznao ,%s.\n",ime_prezime);
printf("smijem li te zvati %s \n ?",ime);
}

//strcpy(duplikat,original)
//strncpy(duplikat,original,duljina)

//strcspn(string,znak)

Carry on
 
0 0 hvala 0
15 godina
offline
Re: Programiranje u C-u - od svega pomalo
Dino-san kaže...

ljudi moze jedna brzinska pomoc.Neznam u cemu je gresku kad pritisnem f9 .Windows mi izbaci gresku i trazi problem da ga rijesi koji ne daje rezultate

 

evo koda:

 U C-u ti se sa jednostrukim navodnicima oznacava char, a sa dvostrukim string; Ono sto si ti napravio je pokuso zgurat string u char, sto on zapravo ne moze tako spremit;

to je prva stvar, druga stvar je sto u strcspn saljes jedan char, a trebas slat string, ili ti polje charova:

 

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

void main(){
   char ime_prezime[25];
   char ime[25];
   char bjelina[] = " ";
   size_t mjesto;
   
   printf("upisite svoje ime i prezime:\n");
   gets(ime_prezime);
   
   mjesto = strcspn(ime_prezime, bjelina); //pregledava znak u stringu
   strncpy(ime, ime_prezime, mjesto); //kopira ili duplicira string
   
   ime[mjesto] = NULL;
   
   printf("drago mi je da sam te upoznao, %s.\n",ime_prezime);
   printf("smijem li te zvati %s?\n",ime);
}

 

evo ti popravljeno, ako trebas pojasnjene reci pa objasnim detaljno sve

edit: i daj pls poradi na razmacima a ne da ih stavljas bezveze da to bude malo urednije. Takodjer, ne znam cemu includanje svega onoga; izbacio sam nepotrebno.

Poruka je uređivana zadnji put ned 4.9.2016 22:09 (ShadoW).
8 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
ShadoW kaže...
Dino-san kaže...

ljudi moze jedna brzinska pomoc.Neznam u cemu je gresku kad pritisnem f9 .Windows mi izbaci gresku i trazi problem da ga rijesi koji ne daje rezultate

 

evo koda:

 U C-u ti se sa jednostrukim navodnicima oznacava char, a sa dvostrukim string; Ono sto si ti napravio je pokuso zgurat string u char, sto on zapravo ne moze tako spremit;

to je prva stvar, druga stvar je sto u strcspn saljes jedan char, a trebas slat string, ili ti polje charova:

 

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

void main(){
   char ime_prezime[25];
   char ime[25];
   char bjelina[] = " ";
   size_t mjesto;
   
   printf("upisite svoje ime i prezime:\n");
   gets(ime_prezime);
   
   mjesto = strcspn(ime_prezime, bjelina); //pregledava znak u stringu
   strncpy(ime, ime_prezime, mjesto); //kopira ili duplicira string
   
   ime[mjesto] = NULL;
   
   printf("drago mi je da sam te upoznao, %s.\n",ime_prezime);
   printf("smijem li te zvati %s?\n",ime);
}

 

evo ti popravljeno, ako trebas pojasnjene reci pa objasnim detaljno sve

edit: i daj pls poradi na razmacima a ne da ih stavljas bezveze da to bude malo urednije. Takodjer, ne znam cemu includanje svega onoga; izbacio sam nepotrebno.

 Nije problem sto ne kuzim sve te strng kratice ali me zanimalo u cemu je greska,btw. u cemu je razlika između size_t i int ?

Include su mi ostali od proslog zadatka.

Carry on
16 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
Dino-san kaže...
ShadoW kaže...
Dino-san kaže...

ljudi moze jedna brzinska pomoc.Neznam u cemu je gresku kad pritisnem f9 .Windows mi izbaci gresku i trazi problem da ga rijesi koji ne daje rezultate

 

evo koda:

 U C-u ti se sa jednostrukim navodnicima oznacava char, a sa dvostrukim string; Ono sto si ti napravio je pokuso zgurat string u char, sto on zapravo ne moze tako spremit;

to je prva stvar, druga stvar je sto u strcspn saljes jedan char, a trebas slat string, ili ti polje charova:

 

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

void main(){
   char ime_prezime[25];
   char ime[25];
   char bjelina[] = " ";
   size_t mjesto;
   
   printf("upisite svoje ime i prezime:\n");
   gets(ime_prezime);
   
   mjesto = strcspn(ime_prezime, bjelina); //pregledava znak u stringu
   strncpy(ime, ime_prezime, mjesto); //kopira ili duplicira string
   
   ime[mjesto] = NULL;
   
   printf("drago mi je da sam te upoznao, %s.\n",ime_prezime);
   printf("smijem li te zvati %s?\n",ime);
}

 

evo ti popravljeno, ako trebas pojasnjene reci pa objasnim detaljno sve

edit: i daj pls poradi na razmacima a ne da ih stavljas bezveze da to bude malo urednije. Takodjer, ne znam cemu includanje svega onoga; izbacio sam nepotrebno.

 Nije problem sto ne kuzim sve te strng kratice ali me zanimalo u cemu je greska,btw. u cemu je razlika između size_t i int ?

Include su mi ostali od proslog zadatka.

 Razlika je u tomu jer je size_t uint32 integer tip, što se iz priloženog koda vidi.

Taj tip koristiti samo za veličinu objekta jer  operator sizeof vraća size_t tip, za aritmetičke operacije i petlje ne koristiti size_t.

 

U donjem kodu je primjer što se dogodi kad se size_t koristi za aritmetičke operacije i petlje. Kod korištenja ovog unsigned tipa

ako dobiijemo negativan rezultat kojeg unsigned tip ne može prikazati, postoji opasnost od krivog izračuna i beskonačne petlje.

 

 

#include <stdio.h>


int main()
{
   int a = -5;
   size_t b = -5;
   printf_s(" % d %zu\n", a, b);

   size_t x = sizeof(short);
   size_t y = sizeof(long);
   size_t z = x - y;
   printf_s("%zu", z);
   for (size_t i = 5; i >= 0; i--)
      printf_s("%zu", i);
}

Poruka je uređivana zadnji put pon 5.9.2016 21:10 (Floki).
8 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
Floki kaže...
Dino-san kaže...
ShadoW kaže...
Dino-san kaže...

ljudi moze jedna brzinska pomoc.Neznam u cemu je gresku kad pritisnem f9 .Windows mi izbaci gresku i trazi problem da ga rijesi koji ne daje rezultate

 

evo koda:

 U C-u ti se sa jednostrukim navodnicima oznacava char, a sa dvostrukim string; Ono sto si ti napravio je pokuso zgurat string u char, sto on zapravo ne moze tako spremit;

to je prva stvar, druga stvar je sto u strcspn saljes jedan char, a trebas slat string, ili ti polje charova:

 

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

void main(){
   char ime_prezime[25];
   char ime[25];
   char bjelina[] = " ";
   size_t mjesto;
   
   printf("upisite svoje ime i prezime:\n");
   gets(ime_prezime);
   
   mjesto = strcspn(ime_prezime, bjelina); //pregledava znak u stringu
   strncpy(ime, ime_prezime, mjesto); //kopira ili duplicira string
   
   ime[mjesto] = NULL;
   
   printf("drago mi je da sam te upoznao, %s.\n",ime_prezime);
   printf("smijem li te zvati %s?\n",ime);
}

 

evo ti popravljeno, ako trebas pojasnjene reci pa objasnim detaljno sve

edit: i daj pls poradi na razmacima a ne da ih stavljas bezveze da to bude malo urednije. Takodjer, ne znam cemu includanje svega onoga; izbacio sam nepotrebno.

 Nije problem sto ne kuzim sve te strng kratice ali me zanimalo u cemu je greska,btw. u cemu je razlika između size_t i int ?

Include su mi ostali od proslog zadatka.

 Razlika je u tomu jer je size_t uint32 integer tip, što se iz priloženog koda vidi.

Taj tip koristiti samo za veličinu objekta jer  operator sizeof vraća size_t tip, za aritmetičke operacije i petlje ne koristiti size_t.

 

U donjem kodu je primjer što se dogodi kad se size_t koristi za aritmetičke operacije i petlje. Kod korištenja ovog unsigned tipa

ako dobiijemo negativan rezultat kojeg unsigned tip ne može prikazati, postoji opasnost od krivog izračuna i beskonačne petlje.

 

 

#include <stdio.h>


int main()
{
   int a = -5;
   size_t b = -5;
   printf_s(" % d %zu\n", a, b);

   size_t x = sizeof(short);
   size_t y = sizeof(long);
   size_t z = x - y;
   printf_s("%zu", z);
   for (size_t i = 5; i >= 0; i--)
      printf_s("%zu", i);
}

Skusio sam int ukljucuje i negativne a size_t unsigned bez predznaka.

Malo sam na internetu googlao i vidio da integer kao %i ima unsigned %u 

što bi bilo isto %u i size_t ,samo što one imaju različite funkcije,ako sam u pravu.

Carry on
16 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
Dino-san kaže...
Floki kaže...
Dino-san kaže...
ShadoW kaže...
Dino-san kaže...

ljudi moze jedna brzinska pomoc.Neznam u cemu je gresku kad pritisnem f9 .Windows mi izbaci gresku i trazi problem da ga rijesi koji ne daje rezultate

 

evo koda:

 U C-u ti se sa jednostrukim navodnicima oznacava char, a sa dvostrukim string; Ono sto si ti napravio je pokuso zgurat string u char, sto on zapravo ne moze tako spremit;

to je prva stvar, druga stvar je sto u strcspn saljes jedan char, a trebas slat string, ili ti polje charova:

 

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

void main(){
   char ime_prezime[25];
   char ime[25];
   char bjelina[] = " ";
   size_t mjesto;
   
   printf("upisite svoje ime i prezime:\n");
   gets(ime_prezime);
   
   mjesto = strcspn(ime_prezime, bjelina); //pregledava znak u stringu
   strncpy(ime, ime_prezime, mjesto); //kopira ili duplicira string
   
   ime[mjesto] = NULL;
   
   printf("drago mi je da sam te upoznao, %s.\n",ime_prezime);
   printf("smijem li te zvati %s?\n",ime);
}

 

evo ti popravljeno, ako trebas pojasnjene reci pa objasnim detaljno sve

edit: i daj pls poradi na razmacima a ne da ih stavljas bezveze da to bude malo urednije. Takodjer, ne znam cemu includanje svega onoga; izbacio sam nepotrebno.

 Nije problem sto ne kuzim sve te strng kratice ali me zanimalo u cemu je greska,btw. u cemu je razlika između size_t i int ?

Include su mi ostali od proslog zadatka.

 Razlika je u tomu jer je size_t uint32 integer tip, što se iz priloženog koda vidi.

Taj tip koristiti samo za veličinu objekta jer  operator sizeof vraća size_t tip, za aritmetičke operacije i petlje ne koristiti size_t.

 

U donjem kodu je primjer što se dogodi kad se size_t koristi za aritmetičke operacije i petlje. Kod korištenja ovog unsigned tipa

ako dobiijemo negativan rezultat kojeg unsigned tip ne može prikazati, postoji opasnost od krivog izračuna i beskonačne petlje.

 

 

#include <stdio.h>


int main()
{
   int a = -5;
   size_t b = -5;
   printf_s(" % d %zu\n", a, b);

   size_t x = sizeof(short);
   size_t y = sizeof(long);
   size_t z = x - y;
   printf_s("%zu", z);
   for (size_t i = 5; i >= 0; i--)
      printf_s("%zu", i);
}

Skusio sam int ukljucuje i negativne a size_t unsigned bez predznaka.

Malo sam na internetu googlao i vidio da integer kao %i ima unsigned %u 

što bi bilo isto %u i size_t ,samo što one imaju različite funkcije,ako sam u pravu.

 Evo ti primjer koji dokazuje da su unsigned int, unsigned long i size_t potpuno isti integer tipovi na mom 64 bitnom stroju.

Da bi to dokazao, koristio sam integer overflow, a na konzolu printao sa cout objektom standard output streama iz C++ da ne bi došlo do casta, što u printf može doći ako se za unsigned integer tipove koriste %d ili %i specifikatori umjesto %u specifikatora

 

#include <iostream>

using namespace std;


int main()
{
   unsigned int a = 5;
   unsigned int b = 6;
   cout << a - b << endl;
   unsigned long c = 5;
   unsigned long d = 6;
   cout << c - d << endl;
   size_t e = 5;
   size_t f = 6;
   cout << e - f << endl;
}

Poruka je uređivana zadnji put čet 8.9.2016 12:26 (Floki).
11 godina
offline
Re: Programiranje u C-u - od svega pomalo
Floki kaže...

 Evo ti primjer koji dokazuje da su unsigned int, unsigned long i size_t potpuno isti integer tipovi na mom 64 bitnom stroju.

Da bi to dokazao, koristio sam integer overflow, a na konzolu printao sa cout objektom standard output streama iz C++ da ne bi došlo do casta, što u printf može doći ako se za unsigned integer tipove koriste %d ili %i specifikatori umjesto %u specifikatora

 

 

 

To znači da kompajliraš za 64-bitni sustav s nečime što nije proizveo Microsoft, za nešto što nije proizveo Microsoft:

https://blogs.oracle.com/nike/entry/ilp64_lp64_llp64

 

Kod size_t, jedina nekakva garancija je veličina najmanje 16 bita (tako bi trebalo biti i na 8-bitnim sustavima), sve ostalo ovisiti će o HW platformi, operativnom sustavu...

 

size_t i ssize_t definirani su u sys/types.h

Za traženje gdje je to definirano, u modernim editorima to znači desni klik na "size_t" tip i "Go to definition".

16 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
Djuro von Prekoplotovich kaže...
Floki kaže...

 Evo ti primjer koji dokazuje da su unsigned int, unsigned long i size_t potpuno isti integer tipovi na mom 64 bitnom stroju.

Da bi to dokazao, koristio sam integer overflow, a na konzolu printao sa cout objektom standard output streama iz C++ da ne bi došlo do casta, što u printf može doći ako se za unsigned integer tipove koriste %d ili %i specifikatori umjesto %u specifikatora

 

 

 

To znači da kompajliraš za 64-bitni sustav s nečime što nije proizveo Microsoft, za nešto što nije proizveo Microsoft:

https://blogs.oracle.com/nike/entry/ilp64_lp64_llp64

 

Kod size_t, jedina nekakva garancija je veličina najmanje 16 bita (tako bi trebalo biti i na 8-bitnim sustavima), sve ostalo ovisiti će o HW platformi, operativnom sustavu...

 

size_t i ssize_t definirani su u sys/types.h

Za traženje gdje je to definirano, u modernim editorima to znači desni klik na "size_t" tip i "Go to definition".

 Kao što vidiš iz slika dilema riješena, srednja slika definicije tipa size_t koja je u ifdef else uvjetu objašnjava sve, za X64 aplikaciju size_t je 64 bitni integer, a za X86 aplikaciju size_t je 32 bitni integer.

Poruka je uređivana zadnji put čet 8.9.2016 14:44 (Floki).
11 godina
offline
Re: Programiranje u C-u - od svega pomalo
Floki kaže...
Djuro von Prekoplotovich kaže...
Floki kaže...

 Evo ti primjer koji dokazuje da su unsigned int, unsigned long i size_t potpuno isti integer tipovi na mom 64 bitnom stroju.

Da bi to dokazao, koristio sam integer overflow, a na konzolu printao sa cout objektom standard output streama iz C++ da ne bi došlo do casta, što u printf može doći ako se za unsigned integer tipove koriste %d ili %i specifikatori umjesto %u specifikatora

 

 

 

To znači da kompajliraš za 64-bitni sustav s nečime što nije proizveo Microsoft, za nešto što nije proizveo Microsoft:

https://blogs.oracle.com/nike/entry/ilp64_lp64_llp64

 

 Kao što vidiš iz slika dilema riješena, srednja slika definicije tipa size_t koja je u ifdef else uvjetu objašnjava sve, za X64 aplikaciju size_t je 64 bitni integer, a za X86 aplikaciju size_t je 32 bitni integer.

 

Ma, pričao sam o odnosu unsigned long inta i size_t.

Nema garancije oko odnosa njihovih veličina na različitim platformama.

A ti si prije toga naveo " Evo ti primjer koji dokazuje da su unsigned int, unsigned long i size_t potpuno isti integer tipovi na mom 64 bitnom stroju.", zbog čega sam mislio da ta tvoja 64-bitna aplikacija radi na nečemu što nisu Windowsi.

Microsoft je odabrao jedan model rada radi kompatibilnosti sa starijim softwareom, dok Unix, Linux i ostali koriste nešto drugo.

 

Ono što treba naučiti u nastavi je da su tipovi koji završavaju na _t (size_t, time_t, sighandler_t) zapravo alias odrađen preko typedef-a i nema garancije koji tip podatka i koje veličine stoji iza tog aliasa.

time_t je na gotovo svim OS-ovima i hardverskim platformama 32-bitni signed int, a nedavno sam radio na nečemu gdje je to 32-bitni unsigned int.

 

Korištenje tipova iz inttypes.h (odnosno, stdint.h) rješava većinu glavobolja oko portabilnosti i nekome može pojednostaviti shvaćanje ovakvih problema, no nažalost to se ne koristi u nastavi, nego tek kada se počne raditi na stvarnim projektima.

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

Pozdrav!

Kolega je dobio zadatak u C-u na faksu a ja sam jako zahrđao (nikad se nisam baš previše ni zanimao) pa nemogu naći rješenje..Zadatak glasi ovako:


Omogućiti korisniku unos matrice kao reda znamenki, gdje su stupci odvojeni razmakom, a redovi znakom točka-zarez. Pri pokretanju se unosi matrica u zadanom obliku, a nakon pritiska na Enter matrica se ispisuje. Program treba prepoznati znamenke matrice, dinamički alocirati memoriju za matricu, te matricu ispisati a ekran. Nakon ispisa moze se upisati exit koji označava zavrsetak programa

 

Matrica se upisuje u obliku:


[ 1 2 3 ; 7 8 9 ; 1000 1 0 ]

 

a ispisuje

 

1      2      3

7      8      9

1000     1      0

 

Dimenzije matrice se prepoznaju iz ulaznog stringa, mogu biti bilo koji pozitivan integer

Brojevi neće biti veći od 65536

Samo cijeli brojevi

Način sremanja matrice nije određen. ali mora biti dinamički alocirana, te se nakon ispisa memorija mora osloboditi

 

Hvala!

Ovo sam probao ali baš uopće ne funkcionira dobro :D 

 

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

int main(void) {

char temp;
char ispis = '\0';
char *string;
string = (char *) malloc (sizeof(int));



fgets(string, sizeof(string) , stdin);
printf("%s", string);

for (int i=0; i<strlen(string); i++){

temp = *(string + i);

if(temp!=' '){

ispis = temp;
}

else if (temp = ' '){

printf(" ");
ispis = '\0';

}

else if(temp = ';'){

printf("\n");


}

printf("%c", ispis);

}

return 0;

}

 

 

 
0 0 hvala 0
16 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Za taj striktno zadani format upisa to se može ovako napraviti.

Pošto unosim char niz, a višeznamenkaste brojeve od strln nemam neke koristi, pa za izračun broja brojeva koristim broj razmaka i broj semicolona.

Dalje je rutina kad se dokopam broja brojeva, za taj broj alociram int niz, nakon što napravim int brojeve od char znakova za brojeve, stavim ih u int niz i njega ispišem kao matricu.

 

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



int main()
{
   int * matrica;
   int brojRazmaka = 0, brojRedova = 1, brojBrojeva, broj=0, index = 0, test = 0;
   char niz[100] = "[ 1 2 3 ; 7 8 9 ; 1000 1 0 ]";
   for (int i = 0;  niz[i] != 0; i++)
   {
      if (niz[i] == 32)
      {
         brojRazmaka++;
      }
      else if (niz[i] == 59)
      {
         brojRedova++;
      }
   }
   brojBrojeva = (brojRazmaka / brojRedova - 1) * brojRedova;
   matrica = (int*)malloc(sizeof(int)*brojBrojeva);
   
   for (int i = 0; niz[i] != 0; i++)
   {
      while (niz[i] >= 48 && niz[i] <= 57)
      {
         broj = broj * 10 + (niz[i++]-48);
         test = 1;
      }
      if (test == 1)
      {
         matrica[index++] = broj;
         broj = 0;
         test = 0;
         i--;
      }
   }

   for (int i = 0; i<brojBrojeva; i++)
   {
      if (i % (brojRazmaka/brojRedova-1) == 0) printf("\n");
      printf("%d\t", matrica[i]);
   }
   free(matrica);
   return 0;
}

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

Nije vezano samo uz C, ali ne znam gdje bih pitao

 

Kao podatak primimo 2*N točaka (njihove x, y koordinate, dakle govorimo o 2D sustavu). Moramo odrediti jednadžbu pravca kojem se s obje strane nalazi jednak broj zadanih točaka.

 

Moja ideja je bila da precrtamo sve točke na y-os pa odredimo yk kojem se jednak broj točaka nalazi iznad i ispod

Onda bi pravac y=yk zadovoljavao uvijete zadatka*

 

*Ne mora biti istina ako nekoliko točaka ima isti y

 

Zbog * mislio sam generirati neki nasumični pravac(1), precrtati sve točke na njega i onda pronaći yk, xk 

Traženi pravac prolazio bi kroz yk, xk i bio bi okomit na nasumično gen. pravac(1)

 

Posljednji algoritam zapravo ima istu grešku kao i prvi (jer graf možemo rotirati pa dobijemo istu stvar)

Ovo je napisano na brzinu. Predvečer ću ljepše opisati problem

 

Stvar je u tome što imam osjećaj da postoji bolji algoritam koji neće imati * problem

Pomoć? 

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

Umjesto nasumično, iz zadanog skupa točaka odaberi dvije i provuci pravac kroz njih - ovo ti garantira bar dvije različite ortogonalne projekcije na taj pravac. Ako nakon projekcije ostalih točaka iskrsne problem koji si uočio jednostavno odaberi drugi par točaka i ponovi postupak.

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

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

 

 

main()
{
   int ctr, numMovies, rating, favRating, leastRating;
   char movieName[40], favorite[40], least[40];

 

   favRating = 0;
   leastRating = 0;

 


   do {
       printf("How many movies have you seen this year? ");
       scanf(" %d", &numMovies);
       if (numMovies < 1)
       {
         printf("No movies! How can you rank them?\nTry again!\n\n");
       } 
      } while (numMovies < 1);

 

   for (ctr = 1; ctr <= numMovies; ctr++)

{
       printf("\nWhat was the name of the movie? (1-word titles only!) ");
       scanf(" %s", movieName);
       printf("On a scale of 1 to 10, what would you rate it? ");
       scanf(" %d", &rating);
       if (rating > favRating)
       {
          strcpy(favorite, movieName);
          favRating = rating;
       }
       if (rating < leastRating)
       {
          strcpy(least, movieName);
          leastRating = rating;
       }
}

 

printf("\nYour Favorite Movie was %s.\n", favorite);
printf("\nYour Least-favorite Movie was %s.\n", least);


return 0;
}

 

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

Ovaj markirani dio me tišti, ne kužim koja je logika u tom kodu. Btw prilikom izvršenja programa umjesto najlošijeg filma izbaci mi točku nekakvu, neznam di je greška.

 

 
0 0 hvala 0
11 godina
offline
Re: Programiranje u C-u - od svega pomalo
general_šu kaže...

 

main()
{
   int ctr, numMovies, rating, favRating, leastRating;
   char movieName[40], favorite[40], least[40];

 

   favRating = 0;
   leastRating = 0;

 

 

 

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

Ovaj markirani dio me tišti, ne kužim koja je logika u tom kodu. Btw prilikom izvršenja programa umjesto najlošijeg filma izbaci mi točku nekakvu, neznam di je greška.

 

 

Greška ti je u tome što if (rating < leastRating) ne prolazi uvjet, jer je leastRating 0, a ti unosiš broj od 1 do 10.

Nizovi s nazivima filmova su ti neinicijalizirani, pa je zbog toga ispisivao smeće u kombinaciji s prethodnom greškom.

Također ne provjeravaš je li uneseni broj u validnim granicama (1 do 10).

A i što se događa ako uneseš dva filma i daš im jednaku ocjenu?

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

I još jedna stvar:

 

Ovo nije ispravno.

main()

 

 

Za vas školarce, main funkcija vraća int.

I moraš definirati argument(e) main funkcije, u C++ možda nije potrebno, no u C-u jest.

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

Generale što ako ima samo jedan film, ako svi filmovi imaju istu ocjenu i ako ima više najviših i najnižih ocjena.

Očito trebaš algoritam za određivanje max i min elementa u nizu.

Ja sam ti dao algoritam za određivanje max i min elementa niza i prijedlog ispisa rezultata a ti napiši kod za unos nizova i uvjete za upis broja elemenata niza i visinu ocjena.

 

#include <stdio.h>


int main()
{
   int min, max, brojFilmova = 5, i;
   char filmovi[][5] = { "abc", "bcd", "cde", "def", "efg" };
   int ocjene[] = { 1, 7, 5, 1, 3 };
   
   max = ocjene[0];
   min = ocjene[0];
   for (i = 1; i < brojFilmova; i++)
   {
      if (max < ocjene[i]) max = ocjene[i];
      else if (min > ocjene[i]) min = ocjene[i];
   }
   if (max == min)
   {
      printf("Svi filmovi jednako popularni:\n");
      for (int i = 0; i < brojFilmova; i++)
         printf("%s\n", filmovi[i]);
   }
   else
   {
      printf("Najpopularniji filmovi:\n");
      for (int i = 0; i < brojFilmova; i++)
         if(ocjene[i] == max)
            printf("%s\n", filmovi[i]);
      printf("\nNajmanje popularni filmovi:\n");
      for (int i = 0; i < brojFilmova; i++)
         if (ocjene[i] == min)
            printf("%s\n", filmovi[i]);
   }
   return 0;
}

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

Popravio sam. Trebalo je na početku umjesto leastRating = 0, stavit leastRating = 10.

Problem je samo što program nije učinkovit ako se na svim filmovima stavi isti rating i to što korisnik može upisati i ocjenu veću od 10.

 

EDIT: I dalje ne razumijem čemu služi varijabla ctr. Mislim vidljivo je u kodu gdje se koristi, ali ne razumijem što to znači, što predstavlja ne kužim. Vjerojatno nekakva pomoćna varijabla bez koje se ne može izvršiti "for" petlja. Šta ja znam.

 

       if (rating > favRating)
       {
          strcpy(favorite, movieName);
          favRating = rating;
       }
       if (rating < leastRating)
       {
          strcpy(least, movieName);
          leastRating = rating;
       }

 

I ovaj gore isječak iz moga koda totalno ne razumijem rating > favRating pa nakon toga favRating = rating. Strcpy isto čemu to favorite pa movieName. Neam pojma. Jel može neko liniju po liniju prevesti na hrvatski. Šta je kojom linijom autor htio reći?

 

 

Poruka je uređivana zadnji put čet 22.9.2016 0:51 (general_šu).
 
0 0 hvala 0
11 godina
offline
Re: Programiranje u C-u - od svega pomalo
general_šu kaže...

 (1) Popravio sam. Trebalo je na početku umjesto leastRating = 0, stavit leastRating = 10.

 

(2) Jel može neko liniju po liniju prevesti na hrvatski. Šta je kojom linijom autor htio reći?

 

 

 

(1) Za usporedbe veći-manji koristi za inicijalne vrijednosti brojeve koji nisu u rasponu traženih vrijednosti. fav je dakle 0, least je 11.

 

(2) Startaj debugger i idi liniju po liniju i gledaj tijek izvršavanja koda i vrijednosti varijabli.

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

A šta je ctr varijablom? 

 
0 0 hvala 0
11 godina
offline
Re: Programiranje u C-u - od svega pomalo
general_šu kaže...

A šta je ctr varijablom? 

 

Prouči kako funkcionira "for" petlja.

 

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

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

main()


{
int i;

char msg[25];

 

printf("Type up to 25 character and then press Enter...\n");


for (i = 0; i < 25; i++)
{
  msg[i] = getchar();
    if (msg[i] == '\n')
    { 
      i--;
      break;
    }
}

putchar('\n');

 

for (; i >= 0; i--)
  {
    putchar(msg[i]);
  }

putchar('\n');


return (0);
}

 

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

Jel može neko objasnit što radi žuti dio koda?

Kako getchar() može biti jednak jednom stringu i kako može string biti jednak simbolu za prelazak u novi red?

 

Poruka je uređivana zadnji put pet 30.9.2016 23:58 (general_šu).
12 godina
offline
Programiranje u C-u - od svega pomalo

Sprema znak u polje znakova (char-ova), ako dođe do znaka za kraj retka ('\n') vrati index (i) na prethodni znak u polju, i pomoću break izađe iz petlje. Nakon toga se u novom retku na ekranu ispisuju znakovi u obrnutom redoslijedu nego si ih upisao. getchar() je funkcija koja učitava jedan znak ; ako ti upišeš više znakova, ona će vratiti samo jedan znak. E sada, da bi shvatio kako učita ostale znakove i sprema ih u polje treba objašnjenje. Sve što ti utipkaš preko tipkovnice se pohranjuje u međuspremink (buffer). Taj dio ti ne vidiš jer je to implementirano pomoću stdio.h biblioteke. getchar() je funkcija koja je implementirana unutar string.h. Ono što ti ne vidiš je to da getchar() uvijek uzme jedan znak iz međuspremnika i vrati njegovu vrijednost, a prije nego vrati tu vrijednost poveća index međuspremnika za 1, tako da prilikom sljedećeg poziva getchar() vrati novi znak iz međuspremnika i tako sve dok ne dođe do '\n'.
String je niz znakova, ali ti koristis funkciju za učitavanje jednog znaka. Za uspoređivanje niza znakova (stringova) se koriste druge funkcije. Ja se nadam da sada razumiješ što radi žuti dio koda. Ako imaš još pitanja u PM pošalji.   

Poruka je uređivana zadnji put sub 1.10.2016 1:15 (Master11).
Moj PC  
1 0 hvala 0
7 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Jel ovo racuna podatke za pravokutnik (opseg,povrsina i stranice) ? Treba se koristiti funkcijom za udaljenost dviju tocaka u pravokutnom koordinatnom sustavu. Ili treba jos nesto nadodati ? Ovo je više za neki četverokut.

 

#include<stdio.h>
#include<math.h>
float o;
float udaljenost(float a,float b,float c,float d)
{
float dulj;
dulj=sqrt(pow(c-a,2)+pow(d-b,2));
return dulj;
}
float opseg(float d1,float d2,float d3,float d4)
{
o=d1+d2+d3+d4;
return o;
}
float povrsina(float d1,float d2, float d3,float d4)
{
float s,p;
s=o/2;
p=sqrt(s*(s-d1)*(s-d2)*(s-d3)*(s-d4));
return p;
}
void main()
{
float x1,x2,x3,x4,y1,y2,y3,y4,d1,d2,d3,d4,p;
printf("Upisite koordinate tocke A");
scanf("%f,%f",&x1,&y1);
printf("Upisite koordinate tocke B");
scanf("%f,%f",&x2,&y2);
printf("Upisite koordinate tocke C");
scanf("%f,%f",&x3,&y3);
printf("Upisite koordinate tocke D");
scanf("%f,%f",&x4,&y4);
d1=udaljenost(x1,y1,x2,y2);
d2=udaljenost(x2,y2,x3,y3);
d3=udaljenost(x3,y3,x1,y1);
o=opseg(d1,d2,d3,d4);
p=povrsina(d1,d2,d3,d4);
printf("\n\nDuljina stranica pravokutnika su d1=%.2f, d2=%.2f, d3=%.2f, d4=%.2f",d1,d2,d3,d4);
printf("\nOpseg je %.2f \nPovrsina je %.2f",o,p);
getch();
}

Poruka je uređivana zadnji put ned 16.10.2016 17:24 (lawofattractioncro).
 
0 0 hvala 0
12 godina
offline
Programiranje u C-u - od svega pomalo

Trebaš prije poziva funkcija za opseg i površinu provjeriti da li se radi o pravokutniku. I to bi bilo najbolje s do while petljom provjeravati dok se ne unesu točke koje bi označavale pravokutnik.

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

Da, ali tih tocaka ima bezbroj. Moze biti pravokutnik sa dosta koordinata pa ne razumijem kako to malo skratiti sa do while-om. Sto da upisem, moze primjer ?

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

Da, ali tih tocaka ima bezbroj. Moze biti pravokutnik sa dosta koordinata pa ne razumijem kako to malo skratiti sa do while-om. Sto da upisem, moze primjer ?

 Stranice pravokutnika su okomite

Odnosno ako zamisliš stranice pravokutnika kao pravce znaš da moraju biti okomiti

Onda znaš da umnožak koeficijenata okomitih pravaca daje -1, a da su koef. paralelnih jednaki

 

Ti imaš 4 točke -> dakle računaš 4 pravca -> provjeravaš postoje li dva para paralelnih pravaca -> provjeravaš postoje li dva para okomitih pravaca

Ako to sve postoji znači da je u pitanju četverokut

 

No morat ćeš odrediti preciznost (zbog toga što računala nisu potpuno točna kod izvođenja matematičkih operacija)

tako da ćeš zapravo odrediti neki interval unutar kojeg ćeš reći da je nešto isto (ne znam kako bih drugačije opisao)

You have to be odd to be number one
14 godina
offline
Re: Programiranje u C-u - od svega pomalo

Moze jednostavno izracunati dijagonale preko pitagore, ako su iste, onda je pravokutnik.

Lack of money is the root of all evil. George Bernard Shaw
Nova poruka
E-mail:
Lozinka:
 
vrh stranice