PC Ekspert Forum

PC Ekspert Forum (https://forum.pcekspert.com/index.php)
-   Web dizajn, programiranje i ostalo (https://forum.pcekspert.com/forumdisplay.php?f=39)
-   -   /C/prost broj (https://forum.pcekspert.com/showthread.php?t=156882)

Pringelzz 22.08.2009. 18:12

/C/prost broj
 
Ej ekipa,trebo bi pomoc malu oko C-a,znaci treba upisat neki broj,te ispitat je li isti prost(djeljiv samo sa 1 i samim sobom),ak neko ima ideje,pls :D:fala:

Bubba 22.08.2009. 18:16

Citiraj:

Autor Pringelzz (Post 1413345)
Ej ekipa,trebo bi pomoc malu oko C-a,znaci treba upisat neki broj,te ispitat je li isti prost(djeljiv samo sa 1 i samim sobom),ak neko ima ideje,pls :D:fala:

Gdje si zapeo?

Pringelzz 22.08.2009. 18:37

#include
#include
main(){
int a,i,br=0;
printf("\nUpisi broj:");
scanf("%d",&a);
for(i=2;i {
if(a%i==0)
br++;
if(br!=0)
printf("\nBroj nije prost");
else printf("\nBroj je prost");
system("pause");
}}

al ne reagira bas,izbaci cmd kod ispisa rezultata...

Roso 22.08.2009. 18:54

Ovo sam iskopa iz svojih starih mailova koje smo slali kad bi završili vježbu, čini mi se da je to :)
Code:

#include
void main()
{
        int i,j;
        bool prost;
        printf("\n");
        for(i=1;i<=100;i++)
        {
                prost=true;
                for(j=2;j                 {
                        if((i%j)==0)
                                prost=false;
                }
                if(prost==true)
                        printf(" %d", i);
        }
        printf(" \n\n");
}


Pringelzz 22.08.2009. 19:05

e fala care,punoo hvala :)

Bubba 22.08.2009. 19:26

Citiraj:

Autor Pringelzz (Post 1413362)
#include
#include
main(){
int a,i,br=0;
printf("\nUpisi broj:");
scanf("%d",&a);
for(i=2;i {
if(a%i==0)
br++;
if(br!=0)
printf("\nBroj nije prost");
else printf("\nBroj je prost");
system("pause");
}}

al ne reagira bas,izbaci cmd kod ispisa rezultata...

"Reagira", ali nazalost prilicno lose.

Evo ti nekoliko opaska:

Opcenito:

- svi recentni C standardi zahtijevaju eksplicitno navodjenje funkcije main, a i opcenito je to prilicno dobra navika. Navedi povratni tip (integer, po standardu) te argument funkcije (u svom slucaju - void).
Code:

int main (void)
. Takodjer, tvoja funkcija main nista ne vraca, iako bi trebala, cak i ovako implicitno navedena. Fali ti return.
- izbjegavaj, osim ako nemas jako dobar razlog, koristenje funkcije system. Ti ga u ovom konkretnom slucaju nemas ni pod razno i kao takva ti je potpuno nepotrebna. Uz sve to, nisi naveo ni potrebnu knjiznicu za tu funkciju - stdlib.h
- kod ti je "na oko" ruzan. Iako je "stil" pisanja koda personalan, tvoj je u svakom slucaju ruzan i necitljiv. Pazi na to, pogotovo ako trazis pomoc u nekom vecem komadu koda.

A sada konkretno, prisao si samom problemu prilicno lose. S matematicke strane, u ovakvom jednostavnom algoritmu dovoljno je da provjeris je li broj prost tako da imas iteracija do njegovog korijena. Ako pak ne zelis implementirati (ili ne smijes) korjenovanje, dovoljno je provjeriti ostatke pri dijeljenju do njegove polovice. Ako mislis da je to trivijalno i nepotrebno, pogledaj ovo (Tualatin 1.4 GHz):
Code:

bubba@korea:~/threads$ time ./a.out
Unesite broj: 2147483647
Broj 2147483647 je prost.

real    0m59.879s
user    0m59.316s
sys    0m0.052s

bubba@korea:~/$ time ./a.out
Unesite broj: 2147483647
Broj 2147483647 je prost.

real    0m0.211s
user    0m0.008s
sys    0m0.000s

U prvom slucaju, provjera je ista tvojoj (do samog broja - 1), dok je u drugom ista provedena samo do korijena tog broja. Pozamasna razlika, jelda?

Programerski, nisi bas usvojio svo to petljanje i ifovanje do kraja. Razmisli o rjesavanjeu na slijedeci nacin; kreni provjeravati ostatke pri dijeljenu u for petlji, pa ako dobijes ostatak 0, broj je djeljiv i nema potrebe provjeravati dalje jer sigurno nije prost. Ako broj kroz citavu petlju ne bude dijeljiv, onda je sigurno prost.

Obrati takodjer paznju da su prosti brojevi po definiciji prirodni, pa mozes koristiti, kako bi povecao opseg provjere, i unsigned intregere.

Pogledaj ovaj kod:

Code:

#include
int main (void)
{
int broj, i;
printf ("Unesite broj: ");
scanf ("%d", &broj);
for (i = 2 ; i <= broj / 2 ; i++)
if (broj % i == 0)
{
printf ("Broj %d nije prost.\n", broj);
return 0;
}
printf ("Broj %d je prost.\n", broj);
return 0;
}

Odnosno malo rafiniraniju verziju:

Code:

#include
#include
int main (void)
{
unsigned int broj, i;
printf ("Unesite broj: ");
scanf ("%u", &broj);
for (i = 2 ; i <= (int)(sqrt(broj)) ; i++)
if (!(broj % i))
{
printf ("Broj %u nije prost.\n", broj);
return 0;
}
printf ("Broj %u je prost.\n", broj);
return 0;
}

HTH.

Pringelzz 28.08.2009. 21:44

lol,thx na savjetima,al ne citas bas dobro,kao prvo stavio sam stdlib.h,nisi vidio valjda...drugo naravno da je stil pisanja los kad ga je tak paste-o :S

agudjaV 14.03.2014. 09:53

Pozdrav,

Ja imam jedan problem sa slicnim algoritmom, zadatak glasi da se ispisu svi prosti brojevi u nekom unesenom intervalu, tj. unosi se broj od kojeg pocinje da ispisuje proste brojeve i broj do kojeg ih ispisuje. E sad to sam uradio, sada pokusavam ispisem najmanji i najveci prost broj u tom intervau ?
Tu nastaje problem, najveci sam uspio, ali najmanji ne mogu nikako, pokusao sam da napravim novu petlju koja ide od krajnjeg intervala do pocetnog pa da min dobije vrijednost yadnjeg prostog broja ali nece da radi, jel ima neko ideju, ako treba poslacu program koji sam pisao.

Unaprijed hvala!

Bubba 18.03.2014. 08:54

Citiraj:

Autor agudjaV (Post 2562539)
Pozdrav,

Ja imam jedan problem sa slicnim algoritmom, zadatak glasi da se ispisu svi prosti brojevi u nekom unesenom intervalu, tj. unosi se broj od kojeg pocinje da ispisuje proste brojeve i broj do kojeg ih ispisuje. E sad to sam uradio, sada pokusavam ispisem najmanji i najveci prost broj u tom intervau ?
Tu nastaje problem, najveci sam uspio, ali najmanji ne mogu nikako, pokusao sam da napravim novu petlju koja ide od krajnjeg intervala do pocetnog pa da min dobije vrijednost yadnjeg prostog broja ali nece da radi, jel ima neko ideju, ako treba poslacu program koji sam pisao.

Unaprijed hvala!

Gdje ti je kod?

depay22 05.03.2016. 11:04

c
 
Imam problem sa 1 zadatkom.Potrebno je ucitati 100 cijelih brojeva i za svaki ispisati koliko ima znamenki.Od korisnika traziti upis cijelog broja sve dok upisuje brojeve koji nisu cijeli.
#include
int main(){
float br;
int i, n = 0;
for (i = 1; i <= 100; i++){
do{
printf("Upisi %d. broj", i);
scanf("%f", &br);
} while (!(br == (int)br));

while (br !=0){
br / 10;
n++;
}
printf("\nBroj ima %d znamenki", n);
}
return 0;
}

zeleee 05.03.2016. 19:37

Citiraj:

Autor depay22 (Post 2899371)
Imam problem sa 1 zadatkom.Potrebno je ucitati 100 cijelih brojeva i za svaki ispisati koliko ima znamenki.Od korisnika traziti upis cijelog broja sve dok upisuje brojeve koji nisu cijeli.
#include
int main(){
float br;
int i, n = 0;
for (i = 1; i <= 100; i++){
do{
printf("Upisi %d. broj", i);
scanf("%f", &br);
} while (!(br == (int)br));

while (br !=0){
br / 10;
n++;
}
printf("\nBroj ima %d znamenki", n);
}
return 0;
}

probaj koristit modulo za izracun znamenki (tipa if(br%10 >1) znamenka =1) prouci malo kako funkcionira pa probaj pomocu toga

depay22 06.03.2016. 15:55

Citiraj:

Autor zeleee (Post 2899566)
probaj koristit modulo za izracun znamenki (tipa if(br%10 >1) znamenka =1) prouci malo kako funkcionira pa probaj pomocu toga

Pa modul se inace koristi kad treba ispisat odredenu znamenku broja,a u ovom mom zadatku to nije potrebno,zar ne??

depay22 06.03.2016. 16:44

Citiraj:

Autor zeleee (Post 2899566)
probaj koristit modulo za izracun znamenki (tipa if(br%10 >1) znamenka =1) prouci malo kako funkcionira pa probaj pomocu toga

A evo pronaso sam si gresku treb sam umjesto br/10; napisat br=br/10;

zeleee 07.03.2016. 01:06

Citiraj:

Autor depay22 (Post 2899849)
A evo pronaso sam si gresku treb sam umjesto br/10; napisat br=br/10;

isto tako radi, samo moras dobro posloziti tipove podataka da ti vracaju dobre brojeve, pomocu modula jednostavno radis kao sto sam naveo ako je br%10 manji od 1 to znaci da ima jednu znamenku, onda if else ako je br%100 ima 2 i tako dalje, ovo tvoje je jednostavnije dosta, samo kazem moze se dogoditi da tipa ukoliko je ostatak 0.5 a program to zaokruzi na 1 dodat ce ti jos jedan br++ i na kraju ces imati krivi broj (ps. nisam testiro program, govorim na pamet ali opet)

acmevagabundo 07.03.2016. 16:45

Šta nije modulo za ostatak kod dijeljenja? Ne znam da sa njime možeš odrediti broj znamenki. Recimo broj 50 ima dvije znamenke, a 50%10 je nula, dakle manje od 1 i po tebi ima jednu znamenku.

rodney 07.03.2016. 17:45

Citiraj:

Autor zeleee (Post 2900031)
...samo kazem moze se dogoditi da tipa ukoliko je ostatak 0.5 a program to zaokruzi na 1 dodat ce ti jos jedan br++ i na kraju ces imati krivi broj (ps. nisam testiro program, govorim na pamet ali opet)

Neće bit ostatak 0.5 zato što provjerava da li se upisani broj može "castat" u integer.

@acmevagabundo
Može se i koristeći modulo odrediti koliko broj ima znamenki.
Neka je "broj" uneseni broj, ako je broj%(10^x)=broj, tada broj ima x znamenki (10^x predstavlja "10 na x", potenciju..).

Npr. 25 = 25%10^2 => 25 ima dvije znamenke..

depay22 21.04.2016. 21:30

Znakovni nizovi
 
Jel moze neko rijesit zadatak?
Ucitati recenicu i ispisati najduzu rijec.

rodney 21.04.2016. 21:50

Sigurno da može.

sinisa1989 23.04.2016. 08:11

Citiraj:

Autor rodney (Post 2917373)
Sigurno da može.

:roller::dobar:

zwer 23.04.2016. 17:56

Citiraj:

Autor depay22 (Post 2917367)
Jel moze neko rijesit zadatak?
Ucitati recenicu i ispisati najduzu rijec.

Budes ti rijesio. Ako zapnes, Bubba ce pomoc. On ti je dobri samaritanac za ove koji zapnu s konkretnim problemom i ne mogu nac gresku u kodu. I zna programirat koliko vidim.

Ove druge koji misle da ce im pisati zadace, obicno zakuca u pod s kreativnim uvredama koje ih dirnu toliko duboko da se kane i Excela/Worda, kamoli C(++)-a. A nerijetko si u suzama namapiraju u hosts datoteci ovako: "127.0.0.1 forum.pcekspert.com" da im ne padne na pamet vise pitat tu :D :chears:

Bubba 24.04.2016. 12:53

Bas ste svi šupci. Evo momak, vaćaj:

http://i.imgur.com/M4a5LCQ.png

John Creasy 24.04.2016. 13:49

Citiraj:

Autor Bubba (Post 2918054)
Bas ste svi šupci. Evo momak, vaćaj:

http://i.imgur.com/M4a5LCQ.png


priznaj da je ovo djelo skrivene ogorčenosti, jer si sam imao vlastitog iskustva sa seenom na fejsbuku zbog pripadnice suprotnog 'pola!

Bubba 24.04.2016. 17:34

Citiraj:

Autor John Creasy (Post 2918065)
priznaj da je ovo djelo skrivene ogorčenosti, jer si sam imao vlastitog iskustva sa seenom na fejsbuku zbog pripadnice suprotnog 'pola!

http://www.prankmenot.com/images/24-04-2016/1IvHcC.pnghttps://image.spreadshirtmedia.com/i...ernet-meme.png

darkydark 24.04.2016. 19:59

Siri laži neistine i obmane. AMD drivere nikad nisam reinstalirao!!!

Sent from my D5803 using Tapatalk

depay22 27.04.2016. 19:16

#include
#include
int main(){
char rec[100];
int i, n, max = 0,br=0;
printf("Upisi recenicu\n");
gets(rec);
n = strlen(rec);
for (i = 0; i < n; i++){
if (rec[i] != " "&& rec[i]!='\0'){
br++;
}
if (rec[i] == ' '){
if (br > max){
max = br - 1;
}
br = 0;
}
if (rec[i] == '\0'){
if (br > max){
max = br - 1;
}
}
}
printf("\nNajdulja rijec ima %d slova", max);
return 0;
}

evo radi dobro jedino ako posljedna rijec ima najvise slova onda neradi dobro.Neznam kako dalje

depay22 27.04.2016. 19:17

Citiraj:

Autor depay22 (Post 2919587)
#include
#include
int main(){
char rec[100];
int i, n, max = 0,br=0;
printf("Upisi recenicu\n");
gets(rec);
n = strlen(rec);
for (i = 0; i < n; i++){
if (rec[i] != " "&& rec[i]!='\0'){
br++;
}
if (rec[i] == ' '){
if (br > max){
max = br - 1;
}
br = 0;
}
if (rec[i] == '\0'){
if (br > max){
max = br - 1;
}
}
}
printf("\nNajdulja rijec ima %d slova", max);
return 0;
}

evo radi dobro jedino ako posljedna rijec ima najvise slova onda nevalja.Neznam kako dalje


pci_e3x 27.04.2016. 22:16

LOL @ Bubba


Citiraj:

Autor depay22 (Post 2919587)
#include
#include
int main(){
..
evo radi dobro jedino ako posljedna rijec ima najvise slova onda neradi dobro.Neznam kako dalje

dat* recenica :D


Ako ti ovaj if prode:
Code:

if (rec[i] != " "&& rec[i]!='\0'){
- onda ona dva ispod sigurno ne prolaze, povezi to s 'else if', bezveze trosis dragocjene resurse cpu-a :D
- ukloni provjeru s '\0' jer si napravio ovo:
n = strlen(rec); **
a tebi for ide do "i < n"

**ne hvata ti zadnju rijec jer provjera ide do zadnjeg znaka, ne ukljucujuci '\0', tako da je i zbog toga provjera s '\0' nepotrebna jer nikada nece provjeriti.
Vise o strlen:
http://www.tutorialspoint.com/c_stan...ion_strlen.htm

ako stavis:
n = strlen(rec) + 1;
onda provjera s '\0' ima smisla.


moze i ovako:

budem postao link ponovo kada sam popravis i rjesis (da me inace nebi Bubba zatukao :bonker: )

*https://i.ytimg.com/vi/jAqFGhHDyiA/hqdefault.jpg

depay22 01.05.2016. 23:12

Hvala sad sam skombo i radi :)

#include
#include
int main(){
char rec[100];
int i, n, max = 0, br = 0;
printf("Upisi recenicu\n");
gets(rec);
n = strlen(rec);
for (i = 0; i <=n; i++){
if (rec[i] != ' '&&rec[i]!='\0'){
br++;
}
if (rec[i] == ' '){
if (br > max){
max = br;
}
br = 0;
}
if (rec[i] =='\0'){
if (br > max){
max =br;
}
}
}
printf("\nNajdulja rijec ima %d slova", max);
return 0;
}

depay22 15.05.2016. 23:16

#include
int main(){
char znk[6], br[6], mala[6], velika[6], ost[6];
int i;
for (i = 0; i < 6; i++){
printf("\nUpisi %d.znak", i + 1);
scanf(" %c", &znk[i]);
if (znk[i] >= 'a'&&znk[i] <= 'z'){
mala[i] = znk[i];
velika[i] = 'a';
br[i] = 'a';
ost[i] = 'a';
}
else if (znk[i] >= 'A'&&znk[i] <= 'Z'){
mala[i] = 'A';
velika[i] = znk[i];
br[i] = 'a';
ost[i] = 'a';
}
else if (znk[i] >= '0'&&znk[i] <= '9'){
mala[i] = 'A';
velika[i] = 'a';
br[i] = znk[i];
ost[i] = 'a';
}
else{
mala[i] = 'A';
velika[i] = 'a';
br[i] = 'a';
ost[i] = znk[i];
}
}
printf("\nMala slova iz prvog polja:");
for (i = 0; i < 6; i++){
if (mala[i] != 'A'){
printf("\n%c", mala[i]);
}
}
printf("\nVelika slova iz prvog polja:");
for (i = 0; i < 6; i++){
if (velika[i] != 'a'){
printf("\n%c", velika[i]);
}
}
printf("\nZnamenke iz prvog polja:");
for (i = 0; i < 6; i++){
if (br[i] != 'a'){
printf("\n%c", br[i]);
}
}
printf("\nOstali znakovi iz prvog polja:");
for (i = 0; i < 6; i++){
if (ost[i] != 'a'){
printf("\n%c", ost[i]);
}
}
return 0;
}
Dali se ovo da jednostavnije rijesit.Zadatak glasi da se ucita 6 znakova i da se razvrstaju u zasebno polje mala slova velika slova znamenke i ostali znakovi.

rodney 16.05.2016. 19:46

Prvo malo prouči https://en.wikipedia.org/wiki/Indent_style
Da taj kod bude lakši za čitat.
Zatim možeš sve provjere obavit u jednoj petlji:
Code:

for i.....n
    if (uvjet1)
        {...}
    else if (uvjet2)
        {...}
    ....

I možeš inicijalizirat ta polja sa NULL, da ne koristiš 'a' kao poseban znak, tada bi morao dodijeliti vrijednost samo u ono polje koje treba, a ostala ostaviš na NULL.


Sva vremena su GMT +2. Sada je 20:59.

Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 1999-2024 PC Ekspert - Sva prava pridržana ISSN 1334-2940
Ad Management by RedTyger