Am incercat de curand sa fa problema expresie9 de pe pbinfo ,dar nu prea m-am descurcat, am reusit sa iau 47 de pcte ,fiindca am rezolvat corect prima cerinta ,dar pe a doua chiar nu am habar cum sa o fac.La indicatii scrie"Această problemă nu are nevoie de un algoritm special de rezolvare, este legată de evaluarea unor expresii.". Ma poate cineva ajuta sa inteleg cum functioneaza evaluarea expresiilor ce contit siruri de caractere ,multumesc.
{
int comparisonIndex = 0;
for (int currentIndex = 0; currentIndex < expression.size(); ++currentIndex)
if (expression[currentIndex] == '<' || expression[currentIndex] == '>')
{
comparisonIndex = currentIndex;
break;
}
{
int currentIndex = 0;
long long int value = 0;
string result;
while (currentIndex < expression.size())
{
if (expression[currentIndex] >= 'a' && expression[currentIndex] <= 'z')
{
while (expression[currentIndex] >= 'a' && expression[currentIndex] <= 'z')
{
result += expression[currentIndex];
++currentIndex;
}
}
for (char digit : result)
{
int number = digit - 96;
if (number > 10)
{
temp *= 10;
}
temp = temp * 10 + (digit - 96);
}
value += temp;
result.clear();
++currentIndex;
}
return value;
}
{
string subString = expression.substr(0, comparisonIndex);
long long int leftSum = eval(subString); // Sum on the left side of the comparison sign
subString = expression.substr(comparisonIndex);
long long int rightSum = eval(subString); // Sum on the right side of the comparison sign
if ((expression[comparisonIndex] == '<' && leftSum < rightSum) || (expression[comparisonIndex] == '>' && leftSum > rightSum))
return 1;
return 0;
}
}
Răspunsuri la întrebare
Nu am sa iti scriu aici programul, am sa iti dau o idee cum ai putea sa il rezolvi.
Ca sa convertesti literele (a, b, c...) in nr. de ordine corespunzatoare (1, 2, 3...), trebuie sa afli valoarea ASCII a fiecarui caracter. Asta o poti face stergand caracterul NULL de la finalul unui sir de caractere.
In C/C++ caracterul "a" este un sir format din 2 caractere a + \0 <- caracterul null. daca stergi caracterul null \0 si afisezi caracterul 'a' o sa iti arate valoarea ASCII.
deci:
char litera[] = "a" == char litera[2] = 'a\0'
(daca folosesti " " caracterul null este adaugat automat. daca folosesti ' ' trebuie sa adaugi tu caracterul null la finalul sirului)
incearca sa faci o bucla 'for' ca sa aflii valorile ASCII la toate literele
ex:
for(char litera='a'; litera<='z'; litera++)
{
cout << litera - '\0' << endl
}
sau mai poti folosi:
cout << (int)litera << endl;
Daca nu intelegi ceva, nu ezita sa imi spui.
Bafta :)
Daca ai nevoie de pus comentarii de genul "folosesc variabilele 'a' si 'b' unde a = prima litera din sir" nu ti-ai numit corect variabilele. Numeste-o firstLetterOfSubString sau ceva asemanator. Oricum, e bine ca iti comentezi codul si motivele pentru care ai facut x sau y.
Va trebui s-o modifici, caci nu returneaza numere mai mari decat long long int.