#include <stdio.h>
#include <conio.h>
main()
{
clrscr();
double a,b;
printf(„a=”);scanf(„%lf”,&a);
printf(„b=”);scanf(„%lf”,&b);
if(a!=0)
printf(„x=%g”,-b/a);
else
if(a==0)
printf(„Ecuatie nedeterminata!”);
else
printf(„Ecuatia nu are solutie!”);
getch();
return(0);
}
Vreau ca programul sa scrie un mesaj de eroare atunci cand in loc de numere la a si b introduc litere.
o varianta e strunctura:
#include <stdio.h>
#include <conio.h>
main()
{
clrscr();
double a,b;
if(scanf(„%lf %lf”,&a,&b)!=2)
printf(„Date eronate!”);
else
if(a!=0)
printf(„x=%g”,-b/a);
else
if(a==0)
printf(„Ecuatie nedeterminata!”);
else
printf(„Ecuatia nu are solutie!”);
getch();
return(0);
}
Dar pierd valoarea estetica adica nu mai afiseaza
a=
b=
de la printf
Aveti vreo idee?
Eu tot nu inteleg de ce nu vor astia (din cate imi amintesc esti la o facultate, ceva) sa treaca mai departe cu standardul. Asta s-a invechit demult. In cateva luni nu o sa mai gasesti compilatoare compatibile cu acest cod.
Problema ar putea fi rezolvata in mai multe moduri.
Primul ar fi sa citesti numerele sub forma de caractere, sa verifici daca sunt numere, adica sa nu fie litere (exista o functie pentru asta, numita isdigit() care se afla in header-ul ctype.h), apoi, daca sunt numere, le transformi in variabile de tip intreg prin utilizarea functiei atoi abrevierea de la „ascii to integer” adica de la sir de caractere, la intreg.
O sa implementez un pic mai tarziu, acum sunt ocupat.
Din cate am inteles folosim programul asta pentru ca profesorii nu au licenta pentru un model mai avansat de c/c++🙂 ).
Nici mie nu imi place sa folosesc versiunea asta de program e ca o persoana batrana si greoaie.Dar astea sunt conditiile ne adaptam:).
Nu ai nevoie de nici o licenta. Nu-i o explicatie valida.
Poti folosi linistit gcc (open-source) sau Visual C++ Express Edition 2008/2010 (freeware).
Ai si o gramada de IDE-uri gratuite: CodeBlocks, CodeLite, Eclipse, NetBeans, Qt Creator, etc.
Singura explicatie este incompetenta si inertia sistemului de invatamant.
Cine ti-a spus ca trebuie neaparat licente ?
Am revenit cu implementarea:
Imi cer scuze pentru intarziere dar nu am putut sa-mi fac timp decat acum.
Codul este scris pe standardul normal (nu pe cel nou – C++0x), deci nu e compatibil cu standardul in care lucrezi tu – nu am compilator compatibil. O sa-ti explic cum sta treaba, poate reusesti si tu sa implementezi ceva asemanator.
O sa incepem cu functia main().
In aceasta functie, declar 2 variabile de tip sir de caractere (matrice de caractere), care ne vor ajuta la memorarea, sub forma de siruri, a numerelor noastre. Urmeaza citirea efectiva a numerelor – sub forma de siruri, utilizand functia cin.getline(). Dupa care verific in acel if valoarea unei functii care se numeste gate(). Aceasta functie este de tip boolean, adica returneaza doar valorile fals sau adevarat (false , true). In cadrul acesteia, verific daca sirul de caractere transmis ca parametru este format integral din cifre, caz in care returneaza valoarea adevarat, in caz contrar, returneaza valoarea fals. Daca functia returneaza valoarea true, variabila a, care este te tip real – float memoreaza valoarea numarului aflat in sir, convertit la tipul de data respectiv – adica float. Aceasta convertire s-a realizat prin utilizarea functiei atof (ascii to float), care converteste un sir de caractere intr-un numar real.
Acelasi lucru se intampla si cu variabila b, iar la final se afisaza -b/a.
Pentru a intelege acest program, trebuie sa fii la curent cu functiile utilizate, asta insemnand: tipul de parametrii pe care ii accepta, valorile ce pot fi returnate (si in ce circumstante) si header-ul in care se afla; notiunea de subprogram.
In standardul in care trebuie sa scrii codul, e un pic mai complicat pentru ca acele citiri ale sirurilor cam pun probleme in general pentru ca nu lucreaza cum trebuie cu buffer-ul, asta din informatiile rudimentare pe care le am.
Dar in orice caz, o sa reusesti!
xor_NTG