Am sa postez un acest topic unele programe care pot fi utile in rezolvarea diverselor probleme legate de matematica (la nivel de liceu). Trebuie precizat ca nu este indicata rezolvarea directa a problemelor cu ajutorul acestor programe ci verificarea rezultatului sau in luarea unor considerente.
Acesta este un program care calculeaza suma elementelor unei matrici (asta constand in diagonala principala, secundara, si triunghiurile superioare sau (si) inferioare)
#include<iostream> //Program care calculeaza diferite sume dintr-o matrice patratica using namespace std; int i,q,k=0,j,m,n,s1=0,s2=0,s3=0,x,s4=0,s5=0,s6=0; int v[100][100]; int main() { cout<<"n="; cin>>n; cout<<"m="; cin>>m; x=m; for(i=0; i<=n; i++) for(j=0; j<=m; j++) { cout<<"v["<<i+1<<"]["<<j+1<<"]="; cin>>v[i][j]; } for(i=0; i<=n; i++) { for(j=i+1; j<=m; j++) { s1+=v[i][j]; } } cout<<"Suma elementelor de deasupra diagonalei principale este: "<<s1<<"\n"; for(j=0; j<=m; j++) for(i=j+1; i<=n; i++) { s2+=v[i][j]; } cout<<"Suma elementelor de sub diagonala principala este: "<<s2<<"\n"; x--; for(i=0; i<n; i++) { for(j=0; j<=x; j++) { s3+=v[i][j]; } x--; } cout<<"Suma elementelor de deasupra diagonalei secundare este: "<<s3<<"\n"; x=1; for(j=m; j>=1; j--) { for(i=x; i<=n; i++) { s4+=v[i][j];} x++; } cout<<"Suma elementelor de sub diagonala secundara este: "<<s4<<"\n"; for(i=0; i<=n; i++) { for(j=0; j<=m; j++) { if(j==i) s5+=v[i][j]; } } cout<<"Suma elementelor de pe diagonala principala este: "<<s5<<"\n"; i=0; for(j=m; j>=0; j--) { s6+=v[i][j]; i++; } cout<<"Suma elementelor de pe diagonala secundara este: "<<s6<<"\n"; return 0; }
[/code]
Program care verifica daca un numar (scris intr-o baza data) este divizibil cu 2,3,4 si (sau) 5. Programul lucreaza cu fisiere iar in fisierul de intrare se precizeaza numarul si baza in care este scris.
#include<fstream> using namespace std; ifstream fin("NR.IN"); ofstream fout("NR.OUT"); int b,nr,k=0; bool ok2,ok3,ok4,ok5; //logic int suma(int x) { int q,s=0; //subprogram (functie) care aduna cifrele numarului while(x) { q=x%10; s=s+q; x=x/10; } return (s); } int sumaip(int x) //subprogram (functie) care intoarce diferenta dintre suma cifrelor de ordin { int s1,s2,q; // impar si suma cifrelor de ordin par while(x) { q=x%10; if(q%2==0) s1=s1+q; if(q%2==1) s2=s2+q; x=x/10; } return (s2-s1); } int sumadu(int x) //subprogram (functie) care intoarce suma dintre ultima cifra si dublul penultimei { int q,p; //cifre. Este necesar la criteriul de divizibilitate cu 4 while(x) { q=x%10; x=x/10; p=x%10; } return ((p*2)+q); } int ver2(int b, int x) { if((b%2==1)&&(suma(x)%2==0)) //subprogram care verifica conditiile criteriului de divizibilitate cu 2 return (1); else return (0); } int ver3(int b, int x) { int k; for(k=4; k<=b; k=k+3) { if((b==k)&&(suma(x)%3==0)) //subprogram care verifica conditiile criteriului de divizibilitate cu 3 return (1); else return (0); } for(k=2; k<=b; k=k+3) { if((b==k)&&(sumaip(x)%3==0)) return (2); else return (0); } } int ver4(int b, int x) { int k; for(k=5; k<=b; k=k+4) { if((k==b)&&(suma(x)%4==0)) return (1); //subprogram care verifica conditiile criteriului de divizibilitate cu 4 else return (0); } for(k=6; k<=b; k=k+4) { if((b=k)&&(sumadu(x)%4==0)) return (2); else return (0); } for(k=3; k<=b; k=k+4) { if((b==k)&&(sumaip(x)%4==0)) return (3); else return (0); } } int ver5(int b, int x) { int k; for(k=6; k<=b; k=k+5) { if((b==k)&&(suma(x)%5==0)) //subprogram care verifica conditiile criteriului de divizibilitate cu 5 (partial) return (1); else return (0); } } int main() { fin>>b; fin>>nr; if((b%2==0)&&((nr%10)%2==0)||(ver2(b,nr)==1)) //verifica daca numarul este divizibil cu 2 ok2=true; else ok2=false; if((b%3==0)&&((nr%10)%3==0)||(ver3(b,nr)==1)||(ver3(b,nr)==2)) //verifica daca nr. este divizibil cu 3 ok3=true; else ok3=false; if((b%4==0)&&((nr%10)%4==0)||(ver4(b,nr)==1)||(ver4(b,nr)==2)||(ver4(b,nr)==3)) //verifica daca nr. este divizibil cu 4 ok4=true; else ok4=false; if((b%5==0)&&((nr%10)%5==0)||(ver5(b,nr)==1)) //verifica daca nr. este divizibil cu 5 ok5=true; else ok5=false; if(ok2==true) fout<<"2 "; if(ok3==true) fout<<"3 "; if(ok4==true) fout<<"4 "; if(ok5==true) fout<<"5 "; if((ok2==false)&&(ok3==false)&&(ok4==false)&&(ok5==false)) fout<<"NU"; return 0; }
Program care converteste un numar scris intr-o baza data, in alta baza data.
using namespace std; ifstream fin("CONV.IN"); ofstream fout("CONV.OUT"); int b1,b2,nr,d=1,x,q,z,nnr; bool ok; int main() { fin>>b1; fin>>b2; fin>>nr; z=nr; x=z; while(nr) { q=nr%10; if(q>=b1) ok=true; nr=nr/10; } q=0; if(ok==true) fout<<"Numar incorect"; else { q=z%b2; if(q>0) nnr=q; z=z/b2; while(z>0) { q=z%b2; d=d*b2; nnr=nnr+q*d; if(nnr==x) { nnr=nnr-q*d; nnr=nnr+z; } z=z/b2; } fout<<nnr; } return 0; }
Cam atat deocamdata. Revin cu alte programe cand o sa le consider potrivite pentru acest subiect.
Sper sa va fie de folos.
P.S.
1. Programele sunt create de mine.
2. Nu le utilizati pentru a rezolva anumite
probleme in care sunt restrictii referitoare la timpul de executie deoarece
nu se incadreaza in intervalul de timp. Mai trebuie sa lucrez la logica. Dar
pentru utilizari individuale nu este necesara executarea programului intr-un anumit interval de timp (la acest nivel cel putin).
3. Programele pot fi compilate in MinGW Developer Studio (recomandat)
Program care calculeaza ultima cifra a unei puteri (generalizare), de exemplu a la puterea b.
Unde U.C. inseamna ultima cifra a numarului respectiv.