Pomoć u programiranju (ispravljanje koda)

poruka: 43
|
čitano: 6.972
|
moderatori: XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
14 godina
neaktivan
offline
Pomoć u programiranju (ispravljanje koda)

#include<iostream>

#include<vector>

 

using namespace std;

void ispis(int &n,int &fmin,int &fmax)

{

vector<int>faktor;

if(n==1) throw "xxx";

 

if(n<0) n=(-1)*n;

 

for(int i(2);i<n;i++)

{cout<<"1";

while (n>1)

{

if (n%i==0)

{

faktor.push_back(i);

n/=i;

cout<<"2";

}

i++;

 

}

}

 

   fmax=faktor[0];

   fmin=faktor[0];

   for(int i(0); i<faktor.size(); i++){

   if(fmax<faktor[i]) fmax=faktor[i];

     if(fmin>faktor[i]) fmin=faktor[i];

     cout<<"3";

   }

     if (faktor.size()==0)

     cout<<"Uneseni broj nema prostih faktora"<<endl;

}

int main()

{

   int n,fmin,fmax;

   try {

   cout<<"Ova funkcija ispisuje najveci i najmanji prosti faktor unesenog broja."<<endl;

   cout<<"Unesite broj: n= ";

   cin>>n;

   ispis(n,fmin,fmax);

   if(fmin==fmax)

   cout<<"Uneseni broj ima samo jedan prosti faktor koji mu je i minimum i maksimum: "<<fmin<<endl;

   else

   cout<<"Za uneseni broj najmanji prosti faktor je "<<fmin<<",a najveci je "<<fmax<<endl;

   }catch(...)

   {

     cout<<"GRESKA! Uneseni broj ne podlijeze trazenoj analizi"<<endl;}

   return 0;

}

 

 

 

Korektno mi treba da radi za sve brojeve.Ne vidim  neku gresku ali ne radi za neke brojeve pa ako mozete pomoci :-)

 
0 0 hvala 0
16 godina
neaktivan
offline
Re: Pomoć u programiranju (ispravljanje koda)

Koliko ja vidim greška je u tome što ne ubacuješ u polje samo proste faktore, i imaš puno dupliciranja. Puno bi bolje bilo koristiti SET nego vector (iako nije nužan niti jedan spremnik, dovoljna su 2 inta). On će automatski i sortirati, pa ako ubacuješ samo proste brojeve, front i back će ti odmah dati tražene faktore. I nešto si zeznuo kod poretka petlji u funkciji...

 

p.s. ako broj ima samo jedan prosti faktor, onda je on sam prost, pa bi to bila bolja poruka.

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
Poruka je uređivana zadnji put pet 1.4.2011 19:19 (Luuka).
16 godina
neaktivan
offline
Re: Pomoć u programiranju (ispravljanje koda)

Evo jednog kodića da se igraš :D

 

#include<iostream>
#include<set>
#include<cmath>

using namespace std;

bool prost(const int& n)
{
     for(int i=2;i<sqrt(n);++i)
       if (n%i==0) return false;
    
     return true;
}

void prosti_faktori(int& n, int& mini, int& maxi)
{
     set<int> faktori;
     set<int>::iterator prvi,zadnji;
    
     for (int i=2;i<=n;++i)
       if ( n%i==0 && prost(i) ) faktori.insert(i);
      
     prvi=faktori.begin();
     zadnji=faktori.end();
     zadnji--; 
     mini=*prvi;
     maxi=*zadnji;
}

void prosti_faktori_bez_seta(int& n, int& mini, int& maxi)
{  
     for (int i=2;i<=n;++i)
       if ( n%i==0 && prost(i) ) { mini=i; break; }
      
     for (int i=n;i>=2;--i)
       if ( n%i==0 && prost(i) ) { maxi=i; break; }
}


int main()
{
    int n,maxi,mini;
   
    do
    {
        cout<<"Ucitaj n: ";
        cin>>n;
       
    }while(n<=1);
   
    prosti_faktori_bez_seta(n,mini,maxi);
   
    if (mini==maxi) cout<<"Broj "<<n<<" je prost!"<<endl;
     else cout<<"Najmanji prosti faktor broja "<<n<<" je "<<mini<<", a najveci "<<maxi<<endl;
 
    //system("pause");
    return 0;   
}

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
14 godina
neaktivan
offline
Re: Pomoć u programiranju (ispravljanje koda)

ne mogu koristit set.....stvaro ne znam sta cu mu vise.hvala na sugestiji za  komentar

 

16 godina
neaktivan
offline
Re: Pomoć u programiranju (ispravljanje koda)

A možeš i pomoću vectora...

 

 void prosti_faktori(int& n, int& mini, int& maxi)
{
     vector<int> faktori;
    
     for (int i=2;i<=n;++i)
       if ( n%i==0 && prost(i) ) faktori.push_back(i);
     
     mini=faktori[0];
     maxi=faktori[faktori.size()-1];
}

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
14 godina
neaktivan
offline
Re: Pomoć u programiranju (ispravljanje koda)

U slobodno vrijeme ;-) ovaj moram poslati do ponoci a ne vidim bas izlaz kako da ga rijesim a ni kolege sa fakulteta ne znaju bas :-(   odeeee meni zadaca

16 godina
neaktivan
offline
Re: Pomoć u programiranju (ispravljanje koda)
elektrotehnika kaže...

U slobodno vrijeme ;-) ovaj moram poslati do ponoci a ne vidim bas izlaz kako da ga rijesim a ni kolege sa fakulteta ne znaju bas :-(   odeeee meni zadaca

Pa dao sam ti 3 verzije rješenja, sa setom, vektorom i bez ijednog spremnika. Na tebi je samo da se odlučiš koja verzija ti je najljepša.

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
14 godina
neaktivan
offline
Re: Pomoć u programiranju (ispravljanje koda)

imam malu digresiju...naime iz funkcija ne vraca samo proste faktore...kankretan tastni primjer je 1995917; 529 je 23*23...moze jos samo to da probate mi objasniti kako da napisem

16 godina
neaktivan
offline
Re: Pomoć u programiranju (ispravljanje koda)
elektrotehnika kaže...

imam malu digresiju...naime iz funkcija ne vraca samo proste faktore...kankretan tastni primjer je 1995917; 529 je 23*23...moze jos samo to da probate mi objasniti kako da napisem

Moje isprike, zeznuo sam funkciju prost, treba ići  i<=sqrt(n), a ne samo i<sqrt(n).

 

Drugo je ok :D

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
14 godina
neaktivan
offline
Re: Pomoć u programiranju (ispravljanje koda)

Hvala najljepsa...spasili ste me :-)

16 godina
neaktivan
offline
Re: Pomoć u programiranju (ispravljanje koda)
elektrotehnika kaže...

Hvala najljepsa...spasili ste me :-)

Možeš mi slobodno reć "ti", nisam ja tak star :D

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
14 godina
neaktivan
offline
Pomoć u programiranju (ispravljanje koda)

Mozete li mi,molim vas,pogledati zasto mi ne unosi pravilno prvi clan matrice?

 

#include <stdio.h>
#include <stdlib.h>
int main()
{
int m,n,i,j,c,max;
printf("\n Unesite dimenzije matrice:\n");
scanf("%d",&n);
if (n<0 || n>50)
{
do
{
printf("\n Broj redova je u intervalu 0-50.Unesite ponovo:\n");
scanf("%d",&n);
}
while (n<0 || n>50);
}
scanf("%d",&m);
if (m<0 || m>50)
{
do
{
printf("\n Broj kolona je u intervalu 0-50.Unesite ponovo:\n");
scanf("%d",&m);
}
while (m<0 || m>50);
}
int matrica[n][m];
printf("\n Unesite matricu:\n");
for (i=0;i<n;i++)
{
for (j=0;j<m;j++)
{
scanf("%d",&matrica[i][j]);
}
}
matrica[0][0]=max;
for (i=0;i<n;i++)
{
for (j=0;j<m;j++)
{
if (matrica[i][j]>max)
{
max=matrica[i][j];
c=j;
}
}
}
int nova_matrica[n][m-1];
for (i=0;i<n;i++)
{
for (j=0;j<(m-1);j++)
{
if (j!=c) nova_matrica[i][j]=matrica[i][j];
else break;
}
}
printf("\n Unijeli ste matricu :\n");
for (i=0;i<n;i++)
{
printf("\n");
for (j=0;j<m;j++)
{
printf(" %d ",matrica[i][j]);
}
}
printf("\n Maksimalni element je %d i nalazi se u %d koloni.",max,c);
printf("\n Nova matrica :\n");
for (i=0;i<n;i++)
{
printf("\n");
for (j=0;j<(m-1);j++)
{
printf(" %d ",nova_matrica[i][j]);
}
}
return 0;
}

 

 

 

 
0 0 hvala 0
17 godina
offline
Pomoć u programiranju (ispravljanje koda)

max = matrica[0][0]; - ovdje ti je bila greška
for (i=0;i<n;i++)
{
       for (j=0;j<m;j++)
      {
           if (matrica[i][j]>max)
          {
                max=matrica[i][j];

          }

       }

}


Inače, ovaj kod ti ne može raditi , ako želiš ovako deklarirati matricu int matrica[n][m]; moraš m i n navesti kao const int vrijednosti u programu

ili to ili dinamička alokacija preko malloc-a.

(to je što se tiče traženja max elementa u matrici)

za ovu drugu matricu, sredi malo kod da bude pregledan i objasni što hoćeš postići s njom.

Pretpostavljam da hoćeš dobiti novu matricu koja ima jedan stupac manje nego stara. U tom slučaju ti ne treba nikakvo tramakivanje sa pomoćnom varijablom c, dovoljno je ovo:

int nova_matrica[n][m-1];
for (i=0;i<n;i++)
{
    for (j=0;j<(m-1);j++)
    {
       nova_matrica[i][j] = matrica[i][j];
    }
}

Poruka je uređivana zadnji put čet 3.11.2011 14:32 (Floki).
 
0 0 hvala 0
Nova poruka
E-mail:
Lozinka:
 
vrh stranice