Pomoć oko konverzije char u int

1

Pomoć oko konverzije char u int

offline
  • Pridružio: 14 Apr 2019
  • Poruke: 5

Treba mi pomoć oko rešavanja problema ovakvog tipa. Znam za konverziju tipa char u int ali ne mogu u ovom kokretnom primeru da sastavim sintaksu koja bi radila. Evo koda u c++:

#include <cstdlib>
#include <iostream>
#include <cmath>

using namespace std;
int main()
{
int x1, x2, s;
char a[3]={'1', '0', '2'};


cout << "Unesite 2 jednocifrena broja: ";
cin>>x1>>x2;

if ((x1-x2)>0)
{
cout<<"a="<<'1'<<endl;
}
if ((x1-x2)<0)
{
cout<<"a="<<'0'<<endl;
}
if ((x1-x2)==0)
{
cout<<"a="<<'2'<<endl;
}

// Kako ove znakove '1', '0' ili '2' (char) pretvoriti u broj (u int) da bi se moglo dalje racunati?
//Npr. ovako:

s=2+a;
cout <<"s="<<s<<endl;

cout <<endl;

system("PAUSE");
return 0;
//izbacuje error: invalid conversion from 'char*' to 'int' [-fpermissive]|
}



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14154
  • Gde živiš: Niš

U datom primeru promenljiva a je niz karaktera (još se zove i string). Kako si mislio da izvršavaš binarne aritmetičke operacije nad brojem i nizom karaktera (brojeva)? Dakle sa jedne strane ti je broj, a sa druge niz brojeva. Šta bi očekivao da operator + uradi u tom slučaju?

Dobro bi bilo da okačiš i opis problema, odnosno tekst zadatka. Ovako možemo samo da nagađamo...



offline
  • Pridružio: 14 Apr 2019
  • Poruke: 5

Hvala na interesovanju i trudu

Problem je to što sam već napisao. Umesto znakova 1, 0 ili 2 može stajati npr, +,-,0 kao u funkciji signum. To nije bitno. Treba dakle rezultat iz uslova (for) koji je neki znak, dakle '1' (ili u drugoj varijanti '+'), pretvoriti zaista u broj 1, itd. To je potrebno da bi se kasnije ti brojevi mogli ubaciti u formulu za izračunavanje rednog broja varijacije sa ponavljanjem klase k od n elemenata. Npr. u s=(a*9)+(b*3)+(c*1)+1. U ovooj formuli 9 je od 3 na 2, 3 je od tri na jedan, a 1 je od tri na nula.
Nadam se da sam razjasnio. Uostalom to nije bitno. Bitno je konverzija char u int. Kada prepravim program ovako kako sledi za sva tri slučaja kada je x1>x2, x1<x2 i x1=x2 uvek dobije da je s=99. Dakle, treba rezultat s učiniti zavisnim od vrednosti brojeva x1, x2 i x3. U perspektivi bi iksova bilo više i vršila bi se analiza dva međusobna člana niza iksova.

#include <cstdlib>
#include <iostream>
#include <cmath>
#include <string>
using namespace std;
int main()
{
int x1, x2, s;
char a;

cout << "Unesite 2 jednocifrena broja: ";
cin>>x1>>x2;

if ((x1-x2)>0)
{
cout<<"a="<<'1'<<endl;
}
if ((x1-x2)<0)
{
cout<<"a="<<'0'<<endl;
}
if ((x1-x2)==0)
{
cout<<"a="<<'2'<<endl;
}

// Kako ove znakove '1', '0' ili '2' (char) pretvoriti u broj (u int) da bi se moglo dalje racunati?
//Npr. ovako:

s=2+'a';

cout <<"s="<<s<<endl;

cout <<endl;

system("PAUSE");
return 0;
//izbacuje error: invalid conversion from 'char*' to 'int' [-fpermissive]|
}

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14154
  • Gde živiš: Niš

Dakle želiš da da karakter '1' pretvoriš u celi broj ekvivalentan njemu, odnosno u 1? To radiš tako što od vrednosti karaktera koji imaš oduzmeš vrednost karaktera '0'. Dakle, sledeća relacija je tačna: '1' - '0' == 1.

offline
  • Pridružio: 14 Apr 2019
  • Poruke: 5

Napisano: 14 Apr 2019 20:39

Hvala na odgovoru. Znam ja to. Ide ovako
int a = 50; // integer a
char y = '1'; // character y
a = a - y;
cout << "a = " << a << endl;

ali ne znam to da primenim u programu.

Dopuna: 14 Apr 2019 20:43

Ili ovako

char a[] = "105";

int converted = 0;

int arraysize = strlen(a);

int i = 0;
for (i = 0; i < arraysize ; i++)
{
converted = converted *10 + a[i] - '0';
}

cout<<""<<converted<<endl;

ali kako to primeniti u konkretnom problemu?

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14154
  • Gde živiš: Niš

Nisi još uvek definisao problem, a i prilično si konfuzan.

Da li je ono što ti pravi problem pretvaranje niza karaktera u ekvivalentan broj? Ako je to, to se rešava lako. Samo treba da iteriraš kroz niz karaktera, pretvoriš tekući karakter u cifru i dodaš je na sumu koja treba da predstavlja konačni broj koji najpre pomnožiš sa deset. Primer:

a = "102"
broj = 0

1. iteracija - uzima se prva cifra koja je 1
broj = broj *10 + 1, što daje 1

2. iteracija - uzima se druga cifra koja je 0
broj = broj*10 + 0, što daje 10

3. iteracija - uzima se treća cifra koja je 2
broj = broj*10 + 2, što daje 102

offline
  • Pridružio: 14 Apr 2019
  • Poruke: 5

Napisano: 14 Apr 2019 21:35

Ako pokreneš program sa početka

#include <cstdlib>
#include <iostream>
#include <cmath>

using namespace std;
int main()
{
int x1, x2, s;
char a;

cout << "Unesite 2 jednocifrena broja: ";
cin>>x1>>x2;

if ((x1-x2)>0)
{
cout<<"a="<<'1'<<endl;
}
if ((x1-x2)<0)
{
cout<<"a="<<'0'<<endl;
}
if ((x1-x2)==0)
{
cout<<"a="<<'2'<<endl;
}

s=2+'a';
cout <<"s="<<s<<endl;

cout <<endl;

system("PAUSE");
return 0;
}

za x1=3 i x2=3 dobijem rezultat s=99, a rezultat treba da je 4 jer se kod istih brojeva (x1==x2) dodeljuje broj 2, pa je 2+2=4.
Dakle, kako prepraviti moj početni kod da daje ispravan rezultat kod sva tri slučaja, veće, manje i jednako.

Dopuna: 14 Apr 2019 21:36

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14154
  • Gde živiš: Niš

Ajmo ovako - izraz s=2+'a'; će apsolutno uvek da da vrednost 99. Sabiraš dve konstante.

Dakle, verovatno si neželjeno zapisao konstantu 'a' umesto promenljive a. Zatim, nikada i nigde nisi promenio vrednost te promenljive. To što si ti na standardnom izlazu ispisao da je a=2 nema aposlutno nikakvih dodirnih tačaka sa tvojom trenutnom situacijom u kodu i vrednošću promenljive a u memoriji.

I još jednom, hajde da ne gledamo u kuglu, nego definiši već jednom problem. Wink

offline
  • Pridružio: 14 Apr 2019
  • Poruke: 5

problem je kako da niz znakova "a=2" pretvorim u promenjivu a kojoj je vrednost 2, ili 1 ili 0 kod drugih vrednosti x1 i x2? Tu se slažemo. Kako to konkretno primeniti i napisati u mojem kodu?

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14154
  • Gde živiš: Niš

I dalje ne daješ opis problema koji rešavaš. Šta će ti uopšte promenljiva a koja je tipa char?? Stavi neka bude tipa int, i samo joj dodeli vrednost sa a=2; tamo gde ti je to potrebno. Što uopšte radiš sa karakterima??

Ko je trenutno na forumu
 

Ukupno su 574 korisnika na forumu :: 42 registrovanih, 7 sakrivenih i 525 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 1567 - dana 15 Jul 2016 19:18

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: _commandos_, A.R.Chafee.Jr., Andrej Jovanovic, Apok, aramis s, Atomski čoban, babaroga2, Botovac, cicus91, commando nord, crnitrn, doktor1964, Duh sa sekirom, dzoni19, Eyes Wide Shut, Filip Ilic, Gama, ivan979, ivica976, Jester, KoRaketa, Kubovac, lacko, ljuba.b, MaksicZoran, Marko Marković, mgaji21, MIG-3, milos.cbr, ostoja2, pein, RecA2, renoje2, robertino, samsung, Slobodan Filipović, slonic_tonic, tmanda323, topalovicdj, wizzardone, |_MeD_|, 1107