Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Loše programiranje-ima i toga

[es] :: Art of Programming :: Loše programiranje-ima i toga

[ Pregleda: 4327 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Humanoid
Hrvatska

Član broj: 10689
Poruke: 63
*.cmu.carnet.hr.

ICQ: 170788654


Profil

icon Loše programiranje-ima i toga26.11.2005. u 19:52 - pre 224 meseci
Kolega me zamolio da mu pomognem neke zadatke,ja sam to učinio,a kolega je nakon uploada koda programa na fakultetski server dobio samo 116/300 bodova. Zanimaju me koje su moje najveće greške prilikom pisanja sljedećih programčića:

Zadatak 1.

Napisati program koji će učitati broj članova reda n, a zatim provjeriti je
li n prirodan broj
iz intervala [1, 400]. Ukoliko nije, ispisati poruku "n nije valjan" i
završiti program, a
ukoliko je n valjan, izračunati "pi" pomoću sljedećeg reda:

(PI*PI)/8=1/(1*1)+1/(3*3)+1/(5*5)+...+1/(2*i+1)(2*i+1)+...

Program mora ispisati izračunati broj "pi" zaokružen na 12 decimala.

Code:

 #include<stdio.h>
 #include<math.h>
 int main()
 {
 int n, i;
 float pi, r;
 r=0;
 printf("Upisite broj članova reda:\n");
 scanf("%d",&n);
  if((n<1)||(n>400))
   printf("n nije valjan\n");
  else{
      for(i=0;i<=n;i++){
      r=r+(1.f/((2*i+1)*(2*i+1)));}
      pi=sqrt(8*r);
      printf("pi iznosi %.12f",pi);}
 return 0;
 }

Zadatak 2.

Napisati program koji će učitavati cijele brojeve sve dok se ne unese broj
manji ili jednak 2.
Program treba ispisati najveći prosti broj među učitanim brojevima. Ukoliko
nije učitan niti
jedan prosti broj veći od 2, potrebno je ispisati 0.*/

Code:

#include <stdio.h>
#include <math.h>

void main(){
int broj,najveci=0,prost,i;

printf("Upisuj brojeve!\n");
    do
    {
    scanf("%d",&broj);
      if (broj>2){
      prost=1;          
         for (i=2;i<=(int)(ceil(sqrt(broj)));i++){
            if (broj%i==0) {prost=0;break;} 
         } 
        if ((prost) && (broj>najveci)) najveci=broj;          
      }    
      }
    while (broj>2);

printf("Najveći prosti broj je %d\n.\n",najveci);
}


[Ovu poruku je menjao Humanoid dana 27.11.2005. u 18:52 GMT+1]
 
Odgovor na temu

McKracken
Vladimir Jovanovic
HuxleyDev

Član broj: 465
Poruke: 2941
*.sattvmeteor.co.yu.

ICQ: 203079925


+7 Profil

icon Re: Loše programiranje-ima i toga26.11.2005. u 21:58 - pre 224 meseci
Za pocetak je kod potpuno necitljiv. Nazubi ga :)
 
Odgovor na temu

MrLimeni
Montenegro

Član broj: 27761
Poruke: 100
*.crnagora.net.



Profil

icon Re: Loše programiranje-ima i toga26.11.2005. u 23:07 - pre 224 meseci
oces reci
da stavi
[ code ]
[ /code ] tagove
... Mu .... Mu ...
 
Odgovor na temu

Humanoid
Hrvatska

Član broj: 10689
Poruke: 63
*.cmu.carnet.hr.

ICQ: 170788654


Profil

icon Re: Loše programiranje-ima i toga27.11.2005. u 19:34 - pre 224 meseci
Stavljeno.Pretpostavljao sam da svaki programer ima doma barem jedan normalni editor
 
Odgovor na temu

noviKorisnik
Dejan Katašić
Novi Sad

Član broj: 13216
Poruke: 4533
*.dialup.neobee.net.

Sajt: www.novikorisnik.net


+5 Profil

icon Re: Loše programiranje-ima i toga27.11.2005. u 20:28 - pre 224 meseci
Hajde detalj do dva o ovom drugom zadatku...
Code:

    najveci = 2;
    do
    {
    scanf("%d",&broj);
      if (broj > najveci){
      prost=1;          
         for (i=2;i<=(int)(ceil(sqrt(broj)));i++){
            if (broj%i==0) {prost=0;break;} 
         } 
        if (prost) najveci=broj;          
      }    
      }
    while (broj>2);

if (najveci == 2) najveci = 0;

printf("Najveći prosti broj je %d\n.\n",najveci);

 
Odgovor na temu

_owl_

Član broj: 318
Poruke: 1043
*.vdial.verat.net.



+3 Profil

icon Re: Loše programiranje-ima i toga27.11.2005. u 23:57 - pre 224 meseci
Sta se desava ako se unesu dva prosta broja od koji je drugi uneti manji od prvog??
Mogao si da napravis funkciju koja proverava da li je broj prost ili ne, koja racuna aproksimaciju za pi (lepo je kada je program dobro struktuiran), i recimo onu koja pamti najveci uneti prost broj.


Owl
 
Odgovor na temu

BraMom
Branimir Momcilovic
Niš, Prokuplje

Član broj: 51489
Poruke: 38
*.vdial.verat.net.



Profil

icon Re: Loše programiranje-ima i toga28.11.2005. u 13:23 - pre 224 meseci
Naleteo sam na seriju clanaka koja nasiroko opisuje slican problem, cak su i zadaci slicni (Eratostenovo sito), meni je bilo bas interesantno da citam...

Prvi clanak, tj. najstariji, je poslednji na strani "Opening Disaster", obavezno procitaj bar njega i "Crash Diet".

http://www.sdmagazine.com/columnists/martin/

[Ovu poruku je menjao BraMom dana 28.11.2005. u 14:24 GMT+1]
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
c-bg-d-p3-47.BVCOM.NET.



+1064 Profil

icon Re: Loše programiranje-ima i toga06.01.2006. u 10:48 - pre 222 meseci
"int n, i;
......
scanf("%d",&n); "

scanf ne garantuje da ce varijabla biti inicijalizovana. Vraca broj inicijalizovanih
parametara ili EOF te tako u slucaju pogresnog inputa tvoj program
ima undefined behavior. Koliko vidim to vazi i za drugi primer.

Pozdrav!

RETURN VALUE

Upon successful completion, these functions return the number of successfully matched and assigned input items; this number can be 0 in the event of an early matching failure. If the input ends before the first matching failure or conversion, EOF is returned. If a read error occurs the error indicator for the stream is set, EOF is returned, and errno is set to indicate the error.
 
Odgovor na temu

kime1
Srbija

Član broj: 13275
Poruke: 939
*.22.EUnet.yu.



+2 Profil

icon Re: Loše programiranje-ima i toga07.01.2006. u 01:41 - pre 222 meseci
U prvom primeru ne proveravaš da li je n ceo broj,samo da li je u rasponu 0-400,(trebalo bi da ga učitaš kao float pa if (n%1==0) then ok).
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
c-bg-d-p3-47.bvcom.net.



+1064 Profil

icon Re: Loše programiranje-ima i toga08.01.2006. u 12:24 - pre 222 meseci
Citat:
kime1: U prvom primeru ne proveravaš da li je n ceo broj,samo da li je u rasponu 0-400,(trebalo bi da ga učitaš kao float pa if (n%1==0) then ok).


Ne moze tako zato sto je % integer operacija, a takodje floating point
se ne mogu porediti na jednakost sa nulom ili bilo cime drugim.
U stvari trebalo bi ovako:

float n;
do
{
fflush(stdin);
printf("unesite broj:\n");
fflush(stdout);
}while(scanf("%f",&n)!=1);
if(fabs(fmod(n,1))<FLT_EPSILON)puts("int");
else puts("float");

napomena : scanf("%d" .... iz originalnog programa ne radi zato sto se recimo 2.4 truncatuje na 2, a za bilo kakav input sto nije broj scanf vraca 0 ili EOF ostavljajuci
n neinicijalizovan.

Pozdrav!
 
Odgovor na temu

kime1
Srbija

Član broj: 13275
Poruke: 939
*.119.eunet.yu.



+2 Profil

icon Re: Loše programiranje-ima i toga11.01.2006. u 23:16 - pre 222 meseci
da,onda bi moglo ((int)n==n) ili nešto slično,sigurno ima već neki šablon...
 
Odgovor na temu

[es] :: Art of Programming :: Loše programiranje-ima i toga

[ Pregleda: 4327 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.