Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
ULBS INFORMATICA

Index preturi

Boxa membrana tweeter infundata

Am nevoie de poze cu un curcubeu
 Whisky for Mac

Xiaomi 14 Gpay

Izolare zid exterior de scandura

Dezinstalare drivere W11 23H3
 Recomandare masina de spalat fiab...

BSOD din cauza Intel Audio DSP dr...

De ce sunt oamenii nostalgici

Cum vand casa fara factura Hidroe...
 Scor FICO minim

Tonometru compensat CAS?

polita RCA ONLINE

Termostat frigider - verificare
 

[TEMA] Ecuatii2

- - - - -
  • Please log in to reply
9 replies to this topic

#1
GlontzZz

GlontzZz

    Active Member

  • Grup: Members
  • Posts: 1,288
  • Înscris: 08.02.2014
Problema: http://www.infoarena...oblema/ecuatii2

Cod:
Spoiler

Reusesc sa scot numai 3 teste din 10. Nu am rezultatul corect pe celelalte. Sa mai fie cazuri speciale pe care nu le-am verificat, sau am gresit la implementare?

#2
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Nu inteleg ce scop are discriminarea stanga vs dreapta. Ai nevoie de un singur discriminant care are valoarea +1 in stanga egalului si -1 in dreapta egalului.

Initial ai doua pool-uri de valori, unul pentru cantitateX cu cantitatea de X-uri, si unul cu cantitatea numerica.

La citire unui numar n, adaugi n*discriminant in pool-ul corect, cantitateX sau cantitate. Decizi care e corect in functie de caracterul de dupa numar, daca el e x, atunci n se adauga in cantitateX, altfel in cantitate.

La final vei avea cantitateX si cantitate, si stii ca trebuie sa fie adevarat ca:

ax=b, unde a este cantitateX, iar b este cantitate.

In functie de valori, decizi daca e imposibil sau infinit, sau solutia numerica.

PS: sa nu uiti sa schimbi discriminant=-1 cand citesti caracterul =.

#3
GlontzZz

GlontzZz

    Active Member

  • Grup: Members
  • Posts: 1,288
  • Înscris: 08.02.2014
@OriginalCopy, incep acum sa o rezolv cum ai spus. Poate reusesc asa.

Intre timp, am reusit sa urc solutia precedenta la 70 de puncte.
Spoiler


#4
GlontzZz

GlontzZz

    Active Member

  • Grup: Members
  • Posts: 1,288
  • Înscris: 08.02.2014

View PostOriginalCopy, on 12 februarie 2016 - 19:47, said:

...

Cu ajutorul testelor si al debuggerului, am reusit sa o duc la 70 de puncte prin metoda spusa de tine. Mai departe, nu imi dau seama.

#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>

std::ifstream fin("ecuatii2.in");
std::ofstream fout("ecuatii2.out");

int n;
std::string ecuatie;
double cantitateX, cantitateNumerica;
int discriminant = 1, semn = 1;

void rezolva()
{
	int aux = 0;
	for (int i = 0; i < ecuatie.length(); i++)
	{
		switch (ecuatie[i])
		{
		case '-':
			cantitateNumerica += (aux * semn * discriminant);
			aux = 0;
			semn = -1;
			break;
		case '+':
			cantitateNumerica += (aux * semn * discriminant);
			aux = 0;
			semn = 1;
			break;
		case 'x':
			if (aux != 0)
				cantitateX += (aux * semn * discriminant);
			else if (aux == 0)
				cantitateX += (semn * discriminant);
			aux = 0;
			break;
		case '=':
			cantitateNumerica += (aux * semn * discriminant);
			aux = 0;
			semn = 1;
			discriminant = -1;
			break;
		default:
			aux = aux * 10 + (ecuatie[i] - '0');
			break;
		}
	}
	if (ecuatie[ecuatie.length() - 1] != 'x')
		cantitateNumerica += (aux * semn * discriminant);
}

// ax = b
// a = cantitateX
// b = cantitateNumerica

void afiseaza()
{
	std::cout << cantitateNumerica << " " << cantitateX << "\n";
	if (cantitateNumerica == cantitateX && cantitateNumerica == 0)
		fout << "infinit\n";
	else if (cantitateX == 0)
		fout << "imposibil\n";
	else if (cantitateNumerica == 0)
		fout << "0\n";
	else
		fout << std::setprecision(5) << cantitateNumerica / cantitateX * -1 << "\n";

}

int main()
{
	fin >> n;
	std::getline(fin, ecuatie, '\n');
	for (int numarEcuatii = 1; numarEcuatii <= n; numarEcuatii++)
	{
		cantitateX = 0;
		cantitateNumerica = 0;
		discriminant = 1;
		semn = 1;
		std::getline(fin, ecuatie, '\n');
		rezolva();
		afiseaza();
	}
	return 0;
}



#5
sftpdt

sftpdt

    Senior Member

  • Grup: Senior Members
  • Posts: 3,664
  • Înscris: 29.08.2013
fout << std::setprecision(5) << cantitateNumerica / cantitateX * -1 << "\n";


schimbă cu

fout << std::fixed << std::setprecision(5) << cantitateNumerica / cantitateX * -1 << "\n";



#6
GlontzZz

GlontzZz

    Active Member

  • Grup: Members
  • Posts: 1,288
  • Înscris: 08.02.2014
Multumesc frumos, sftpdt. Am luat 100. Ce diferenta face acel std::fixed? Nu se ocupa deja std::setprecision() de precizia de dupa virgula?

#7
sftpdt

sftpdt

    Senior Member

  • Grup: Senior Members
  • Posts: 3,664
  • Înscris: 29.08.2013

View PostGlontzZz, on 12 februarie 2016 - 22:05, said:

Nu se ocupa deja std::setprecision() de precizia de dupa virgula?

Ba da, dar dacă numărul are mai puţine zecimale decât vrei tu să afişezi, std::fixed completează cu 0 la final (sau cam aşa ceva, nu le am cu explicaţiile :lol:).

#8
GlontzZz

GlontzZz

    Active Member

  • Grup: Members
  • Posts: 1,288
  • Înscris: 08.02.2014
Ah, ok. Am inteles Posted Image  . Multumesc frumos pentru ajutor amandurora. Raman dator! :)

#9
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,423
  • Înscris: 10.08.2005

View PostGlontzZz, on 12 februarie 2016 - 22:05, said:

Multumesc frumos, sftpdt. Am luat 100. Ce diferenta face acel std::fixed? Nu se ocupa deja std::setprecision() de precizia de dupa virgula?

View Postsftpdt, on 12 februarie 2016 - 22:10, said:

Ba da, dar dacă numărul are mai puține zecimale decât vrei tu să afișezi, std::fixed completează cu 0 la final (sau cam așa ceva, nu le am cu explicațiile Posted Image).
ai asteptat 5 minute un raspuns pe care il puteai gasi in doua
cout << setprecision(5) << 15.0 / 2 << endl;
cout << setprecision(5) << 15.0 / 4 << endl;
cout << setprecision(5) << 15.0 / 8 << endl;
cout << fixed << setprecision(5) << 15.0 / 2 << endl;
cout << fixed << setprecision(5) << 15.0 / 4 << endl;
cout << fixed << setprecision(5) << 15.0 / 8 << endl;

Quote

7.5   
3.75
1.875
7.50000   
3.75000   
1.87500


#10
VladBtz

VladBtz

    Active Member

  • Grup: Members
  • Posts: 1,702
  • Înscris: 24.09.2014

View PostMarianG, on 13 februarie 2016 - 07:27, said:

ai asteptat 5 minute un raspuns pe care il puteai gasi in doua


http://www.cplusplus...p/setprecision/

Anunturi

Second Opinion Second Opinion

Folosind serviciul second opinion ne puteți trimite RMN-uri, CT -uri, angiografii, fișiere .pdf, documente medicale.

Astfel vă vom putea da o opinie neurochirurgicală, fără ca aceasta să poată înlocui un consult de specialitate. Răspunsurile vor fi date prin e-mail în cel mai scurt timp posibil (de obicei în mai putin de 24 de ore, dar nu mai mult de 48 de ore). Second opinion – Neurohope este un serviciu gratuit.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate