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: 14809
  • 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: 14809
  • 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: 14809
  • 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: 14809
  • 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: 14809
  • 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 849 korisnika na forumu :: 36 registrovanih, 10 sakrivenih i 803 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 9k38, amaterSRB, Andrija357, Atomski čoban, babaroga, Boris BM, bufanje, CikaKURE, coaaco, Dimitrise93, FileFinder, FOX, Georgius, kunktator, Leonov, Lieutenant, loon123, mercedesamg, Mi lao shu, milos.cbr, moldway, nemkea71, nenad81, nikoli_ca, pera bager, powSrb, robert1979, royst33, ruma, sasa87, vathra, vladulns, x9, zbazin, ZetaMan, šumar bk2