C++ program mi ne radi

poruka: 20
|
čitano: 2.683
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
15 godina
neaktivan
offline
C++ program mi ne radi

Program:

//Required stuff//
#include <iostream>
using namespace std;
//Start program//
int n,b;                  //FAQ: n is entered number, b is the base of result//
int i, y=0;               //FAQ: i, y are integers which helps program to work//
//In case of using letters for base 10 or more//
char x[16], r[200];       //FAQ: x are the numbers, r is the result number//     
//Start working//
int main()
{
    //Define numbers//
    x[0]='0';
    x[1]='1';
    x[2]='2';
    x[3]='3';
    x[4]='4';
    x[5]='5';
    x[6]='6';
    x[7]='7';
    x[8]='8';
    x[9]='9';
    x[10]='A';
    x[11]='B';
    x[12]='C';
    x[13]='D';
    x[14]='E';
    x[15]='F';
    //Scan number and base of result//
    printf("Enter number: ");
    scanf("%d", &n);
    printf("\nEnter base of result (16 maximum): ");
    scanf("%d", &b);
    //Put the number in that base//
    do
    {
          i=n%b;
          n=n/b;
          y++;
          r[y]=x[i];
    } while (n!=0);
    //Print result//
    strrev(r);
    printf("\nResult: %s\n", r);
    //End program//
    system("pause");
    return 0;
} //Press any key to continue . . .//

 

 

Program prebacuje brojeve iz dekadskog u neki drugi brojevni sustav sa odabranom bazom...

Postoji greška negdje ne mogu je nać jel možete pomoć pls :))

Poruka je uređivana zadnji put sub 8.5.2010 21:02 (calex3).
 
0 0 hvala 0
16 godina
neaktivan
offline
RE: C++ program mi ne radi

Prvo kažeš y++, pa onda r[y]. I nemaš '\0' na kraju r-a da bi strrev znao to preokrenut.

 

Uz to, čemu globalne varijable?

Poruka je uređivana zadnji put sub 8.5.2010 21:56 (Luuka).
15 godina
neaktivan
offline
RE: C++ program mi ne radi

da broj ce biti zapisan u obrnutom poretku ali zato koristim strrev(r) koji okrece string..... ne znam sto su globalne varijable pocetnik sam samo  me zanima zasto ne ispise nista na kraju :/

 

kopiraj kod i provjeri... ja mislim da je greska ovdje r[y]=x[i] jer ostalo inace radi ok ....

Poruka je uređivana zadnji put sub 8.5.2010 21:59 (calex3).
16 godina
neaktivan
offline
RE: C++ program mi ne radi

Kasnije sam skužio strrev ;)

 

A ne ispiše ništa jer nema \0 na kraju, pa %s ne zna kako ispisati taj niz znakova.

 

A globalne varijable su ove varijable izvan main-a, potpuno nepotrebno ovdje.

15 godina
neaktivan
offline
RE: C++ program mi ne radi

znaci trebam "Result: %s\0", r ?

ok ubacit cu int i char unutar  int main()

16 godina
neaktivan
offline
RE: C++ program mi ne radi

#include <iostream>
using namespace std;

int main()
{
    int n,b;                 
    int i, y=0;              

    char x[16], r[200]; 

    x[0]='0'; x[1]='1'; x[2]='2'; x[3]='3';
    x[4]='4'; x[5]='5'; x[6]='6'; x[7]='7';
    x[8]='8'; x[9]='9'; x[10]='A'; x[11]='B';
    x[12]='C'; x[13]='D'; x[14]='E'; x[15]='F';
   
    //Scan number and base of result//
    printf("Enter number: ");
    scanf("%d", &n);
    printf("\nEnter base of result (16 maximum): ");
    scanf("%d", &b);
  
    if (b<0 || b>16) //ako baza nije dobra, izadji iz programa
    {
        printf("Wrong base!! \n");
        system("pause");
        exit(1);
    }
   
    do
    {
      i=n%b;
      n=n/b;
      r[y]=x[i];  //tu smo okrenuli poredak, jer inace je prvo zapisao na index 1, a ne 0
      y++;
    } while (n!=0);
   
   
    r[y]='\0'; //oznacimo kraj zapisa broja n u bazi b
    strrev(r);
    printf("\nResult: %s\n", r);

    system("pause");
    return 0;
}

 

 

Evo ti, sad radi... a u nizu znakova r moramo zadnji znak staviti na \0, to je tzv "prazni znak" i služi samo za označavanje kraja stringa. Još jedna promjena je okrenut redoslijed y++ i r[y]=x[i] jer bi krenuo zapisivat od r[1], a ne od y[0].

 

Btw, zašto iostream i using namespce kad se radi o čistom c-ovskom kodu? Nema ničeg c++-ovskog tu.

Poruka je uređivana zadnji put sub 8.5.2010 22:09 (Luuka).
15 godina
odjavljen
offline
RE: C++ program mi ne radi

za dodat tterminator stringa na kraj stringa:

 

strcmp(r,'\0');


EDIT: vidim kolega me prestigao

Poruka je uređivana zadnji put sub 8.5.2010 22:08 (Jakovp).
15 godina
neaktivan
offline
RE: C++ program mi ne radi

Evo idem probat hvala puno :)))

 

//Required stuff//
#include <iostream>
using namespace std;
//Start program//
int main()
{
    //Declearing stuff//
    int n, b;                 //FAQ: n is entered number, b is the base of result//
    int i, y=0;               //FAQ: i, y are integers which help program to work//
    //In case of using letters for base 10 or more//
    char x[16], r[200];       //FAQ: x are the numbers, r is the result number//     
    //Define numbers//
    x[0]='0';   x[4]='4';   x[8]='8';   x[12]='C';    
    x[1]='1';   x[5]='5';   x[9]='9';   x[13]='D';
    x[2]='2';   x[6]='6';   x[10]='A';  x[14]='E';
    x[3]='3';   x[7]='7';   x[11]='B';  x[15]='F';           
    //Scan number and base of result//
    printf("Enter number: ");
    scanf("%d", &n);
    printf("\nEnter base of result (16 maximum): ");
    scanf("%d", &b);
    while((b<1)||(b>16))
    {
    printf("\nWrong base! Re-enter please: ");
    scanf("%d", &b);
    }
    //Put the number in that base//
    do
    {
          i=n%b;
          n=n/b;
          r[y]=x[i];
          y++;
    } while (n!=0);
    r[y]='\0';
    //Print result//
    strrev(r);
    printf("\nResult: %s\n", r);
    //End program//
    system("pause");
    return 0;
}   //Press any key to continue . . .//

Evo ga radi :))) Hvala ....jel mogu kako dat reputaciju ili nešto ode na ovom forumu :)))

Btw ne znam zasto using iostream i std novi sam u c++ ...idem u prvi srednje a ovo se radi u drugome pa sam preko interneta naucio nesto ali ne dovoljno

 

Poruka je uređivana zadnji put sub 8.5.2010 22:18 (calex3).
16 godina
neaktivan
offline
RE: C++ program mi ne radi

Skripta, 1.dio

Skripta, 2.dio

 

Tu si pogledaj, pa malo po malo... nemoj odmah skakat na ovakve primjere bez da znaš što su globalne varijable, kako baratat s nizom znakova i slično... korak po korak.

 

@Jakov - strcmp je za uspoređivanje stringova. Strcat je za ljepčljenje na kraj, a mislim da tu to niti neće proć jer program ne zna di je kraj stringa ;-) Treba ručno ubacit taj \0 :D

 

 

Poruka je uređivana zadnji put sub 8.5.2010 22:25 (Luuka).
15 godina
neaktivan
offline
RE: C++ program mi ne radi

Imam takvih puno tutoriala npr. skenirane knjige o c++ itd. ... (nisan zapravo nikojeg procita pa zato ne znam te neke stvari)

Ok hvala stari ;)

sad cu jos samo dodat negativne brojeve koristeci abs od upisanog broja i dodavanje minusa na kraju .....

Poruka je uređivana zadnji put sub 8.5.2010 22:30 (calex3).
16 godina
neaktivan
offline
RE: C++ program mi ne radi

Ovo kaj sam ti ja dao su službeni materijali s mog faxa, sve jako lijepo objašnjeno :D Baš onako, korak po korak, da se sve lijepo skuži... i dosta kodova i dodatnih zadataka... sretno s učenjem dalje :D

15 godina
neaktivan
offline
RE: C++ program mi ne radi

OK ;))

jel postoji funkcija koja mice decimalni dio i uzima cijeli dio kao integer... i funkcija koja radi isto ali da uzima ddecimalni kao integer???

16 godina
neaktivan
offline
RE: C++ program mi ne radi

E to se moraš malo igrat :D

 

Ako includeaš cmath ( #include<cmath> na početak koda ), postoje fje trunc i round, prva samo odreže decimalni dio, a druga zaokruži na cjelobrojno, kako smo navikli. Npr trunc(3.5)=3 , a round(3.5)=4.

Uz to, možeš koristit cast operator. Cast nam služi za pretvorbu tipova. Primjer : (int)3.5 će dati 3. (dakle konvertira realan broj 3.5 u prirodni 3).

 

A za decimalni dio se moraš poigrat (množit pa gledat neke ostatke pri dijeljenju itd).

Poruka je uređivana zadnji put sub 8.5.2010 22:59 (Luuka).
15 godina
neaktivan
offline
RE: C++ program mi ne radi

OK i mislija sam da je trunc() i round() ... :D

Za decimalni...

Smislija sam način i gotov sam s njime ali ću sutra isprobat ....na papiru radi savršeno :D

Sutra cu ti poslat kod ^^

laku noć ljudi....

Poruka je uređivana zadnji put sub 8.5.2010 23:46 (calex3).
16 godina
neaktivan
offline
RE: C++ program mi ne radi

E tu ima malih problema :D

Naime, kod vađenja decimalnog dijela problem stvara prikaz broja u računalu. Naime, svaki broj je prikazan do neke svoje točnosti, i onda je iza njega neko smeće... npr 2.5 bi bilo prikazano kao 2.50000000000000000005678395766.

Zato onakvo rješavanje ko na papiru ne prolazi. Onako kako bi na ruke bi bilo ovak nešto:

 

double x=3.456;
    int cjelobrojni_dio=(int)x;
    double dec=x-cjelobrojni_dio;
   
    while ( dec-(int)dec != 0 )
      dec*=10;
         
    int decimalni_dio=(int)dec;

 

ali na računalu to ide u beskonačnu petlju :D

 

Najlakše za napravit bi bilo ograničit broj decimala na npr 4, i onda napravit ovo:

 

double x=3.456;
    int cjelobrojni_dio=(int)x;
    int dec=int((x-cjelobrojni_dio)*100000);
   
    while (dec%10==0)
          dec/=10;

 

Kao što ćeš vidjeti kod ispisa, decimalni dio neće biti skroz egzaktan, nego ćeš umjesto 456 dobiti 45599 :D

 

Papir nije isto ko računalo ;-)

Poruka je uređivana zadnji put ned 9.5.2010 0:10 (Luuka).
15 godina
neaktivan
offline
RE: C++ program mi ne radi

Evo moga koda...I upravo mi se to dogadalo....greska tj. neda mi da stavim array od int i[] manji od 18 ja mislim :D

//Required stuff//
#include <iostream>
#include <cmath>
using namespace std;
//Start working//
int main()
{
    float a;
    int y=0, i[20], x=0;
    scanf("%f", &a);
    while ((a-trunc(a))>0)
    {
          a=(a-trunc(a))*10;
          y++;
          i[y]=trunc(a);
    }
    do
    {
          x++;
          printf("%d", i[x]);
    } while (x<y);

    printf("\n");
    //End program//
    system("pause");
    return 0;
}

 

Ipak ne idem leć :D

Poruka je uređivana zadnji put ned 9.5.2010 0:15 (calex3).
16 godina
neaktivan
offline
RE: C++ program mi ne radi

Ne trebaš u polje spremat... vidi ono moje gore, prođi kroz oba koda "na ruke", sa konkretnim primjerom, pa vidi kaj se događa... ne trebaju polja uvijek :D

15 godina
neaktivan
offline
RE: C++ program mi ne radi

Malo glupo ali što su polja??? :D

 

ajaj nema veze sad stvarno idem leć sutra cu nastavit sa ovim shvatija sam šta si mi pokaza gori onaj kod .... :)

 

 

 

Poruka je uređivana zadnji put ned 9.5.2010 0:48 (calex3).
16 godina
neaktivan
offline
RE: C++ program mi ne radi

Polje ti nazivaš array ;)

15 godina
neaktivan
offline
RE: C++ program mi ne radi

//Required stuff//
#include <iostream>
#include <math.h>
using namespace std;
//Start program//
int main()
{
    //Setting up stuff//
    char x[20];
    int n[200], b, p, i, r;
    //Define numbers//
    n['0']=0;    n['4']=4;    n['8']=8;    n['C']=12;
    n['1']=1;    n['5']=5;    n['9']=9;    n['D']=13;
    n['2']=2;    n['6']=6;    n['A']=10;    n['E']=14;
    n['3']=3;    n['7']=7;    n['B']=11;    n['F']=15;
    //Print text//
    printf("Enter number: ");
    //Scan entered number//
    scanf("%s", x);
    //Is it negative//
    if (x[0]=='-') p=1;
    else p=0;
    //Print and scan base of entered number//
    printf("Enter base of that number: ");
    scanf("%d", &b);
    //
    strrev(x);
    //Is it negative//
    if(p==1) i=(strlen(x)-1);
    else i=strlen(x);
    r=0;
    //Calculating the result//
    do
    {
       i--;
       n[i]=n[x[i]];
       r=r+(n[i] * pow(b, i));
    } while (i!=0);
    //Is it negative//
    if(p==1) r=r*(-1);
    //Print result//
    printf("Result: %d\n", r);
    //Ending program//
    system("pause");
    return 0;
}   //Press any key to continue . . .//

1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice