25 dec. 2011

Cel mai mic multiplu comun

O varianta simpla pentru problema celui mai mic multiplu comun.

#include <iostream>

using namespace std;

int main() {
 int a, b, divizor, putereA, putereB, rezultat = 1;

 cin >> a;

 cin >> b;

 int maxDiv = a / 2;
 int sqrtB = b / 2;

 if (maxDiv < sqrtB) {
  maxDiv = sqrtB;
 }

 for (divizor = 2; divizor <= maxDiv; divizor++) {
  if (a % divizor == 0 && b % divizor == 0) {
   putereA = 0;
   putereB = 0;
   while (a % divizor == 0) {
    a = a / divizor;
    putereA++;
   }

   while (b % divizor == 0) {
    b = b / divizor;
    putereB++;
   }
   if (putereA > putereB) {
    while (putereA > 0) {
     rezultat = rezultat * divizor;
     putereA--;
    }
   } else {
    while (putereB > 0) {
     rezultat = rezultat * divizor;
     putereB--;
    }
   }
  } else {
   if (a % divizor == 0) {
    while (a % divizor == 0) {
     a = a / divizor;
     rezultat = rezultat * divizor;
    }
   } else {
    if (b % divizor == 0) {
     while (b % divizor == 0) {
      b = b / divizor;
      rezultat = rezultat * divizor;
     }
    }
   }
  }
 }
 cout << "rez=" << rezultat;
 return 0;
}

O versiune mai rafinata a programului de mai sus
#include <iostream>

using namespace std;

void getDiv(int &a, int d, int &r) {
 r = 0;
 while (!(a % d)) {
  a = a / d;
  r++;
 }
}

void addRez(int &rez, int &a, int d) {
 while (!(a % d)) {
  a = a / d;
  rez = rez * d;
 }
}

int main() {
 int a, b, divizor, putereA, putereB, rezultat = 1;

 cin >> a;
 cin >> b;

 int maxDiv = a > b ? a : b;
 maxDiv /= 2;

 for (divizor = 2; divizor <= maxDiv; divizor++) {
  if (a % divizor || b % divizor) {
   getDiv(a, divizor, putereA);
   getDiv(b, divizor, putereB);

   if (putereA > putereB) {
    while (putereA) {
     rezultat = rezultat * divizor;
     putereA--;
    }
   } else {
    while (putereB) {
     rezultat = rezultat * divizor;
     putereB--;
    }
   }
  } else {
   if (!(a % divizor)) {
    addRez(rezultat, a, divizor);
   } else {
    if (!(b % divizor)) {
     addRez(rezultat, b, divizor);
    }
   }
  }
 }
 cout << "rez= " << rezultat;
 return 0;
}
propuneri de enunturi

24 dec. 2011

Setare variabila in Path in Windows 7

Pentru a folosi MinGW in windows cu un GUI precum Eclipse, trebuie setata variabila gcc in Path-ul de la windows. Dupa ce instalati MinGW executati pasii urmatori:
  1. Click pe Start
  2. Click dreapta pe Computer
  3. Din meniul contextual dati click pe Properties 
  4. Click pe 'Advanced system settings' din coltul stanga sus (Control panel Home img). 
  5. Control Panel Home
  6. Se va afisa fereatra 'System propertis'
  7. Click pe Tab-ul 'Advanced'
  8. Click pe Enviroment Variables
  9. Enviroment variables
  10. Pentru a adauga MinGW in Path selectati variabila de sistem Path si selectati 'Edit...'. Apoi adaugati in valoarea acelei variabile calea catre MinGW.
Salvati toate modificarile.

Acum puteti folosi compilatorul gcc in Eclipse folosind MinGW.

21 dec. 2011

editare char array

Se citeste de la tastatura un sir s, de lungime cel mult 80 de caractere. Numim umbra sirului s, sirul obtinut prin urmatoarele operatii asupra sirului s:
  1. transformarea tuturor literelor mari in litere mici si invers
  2. dublarea caracterului punct
  3. inlocuirea tuturor celorlalte caractere speciale cu caracterul '#'
  4. eliminarea tuturor cifrelor

#include <iostream>

using namespace std;

char str[100];

void replaceLetter(int i) {
 str[i] += (str[i] > 96) ? (-32) : 32;
}

void addPct(int i) {
 for (int j = 99; j > i; j--) {
  str[j] = str[j - 1];
 }
}

void removeDigit(int i) {
 for (int j = i; j < 99; j++) {
  str[j] = str[j + 1];
 }
}

int main() {
 //ab23Am.,t5F:-Ku
 cin >> str;

 int i = 0;
 while (str[i] != '\000' && i < 100) {
  if ((str[i] > 64 && str[i] < 91) || (str[i] > 96 && str[i] < 123)) {
   replaceLetter(i);
   i++;
  } else {
   if (str[i] == 46) {
    addPct(i);
    i += 2;
   } else {
    if (str[i] >= '0' && str[i] <= '9') {
     removeDigit(i);

    } else {
     str[i] = '#';
     i++;
    }
   }
  }
 }
 cout << str;
}

18 dec. 2011

Inversare partea intreaga cu zecimale

enunt: Sa se inverseze partea intreaga cu partea zecimala a unui numar real.
exemplu: pentru 12.34 se va afisa 34.12

#include <stdio.h>
int main(int argc, char *argv[])
{
 double daux = 12.34;
 int integr = daux;
 int iaux = integr;
 double zaux;
 double zecim = integr;
 
 int a=daux;
 while(a != daux){
  daux = daux * 10;
  a = daux;
  integr = integr * 10;
 }
 zecim = daux-integr;
 
 zaux = iaux;
 while(iaux){
  iaux = iaux / 10;
  zaux = zaux / 10;
 }
 
 printf("numar=%f",zecim+zaux);
 
 return 0;
}
propuneri de enunturi

4 dec. 2011

Sortarea cifrelor unui numar

Programul urmator sorteaza cifrele unui numar intreg


#include <iostream>

using namespace std;

/*
 * functia sort - bubble sort simplificat
 *
 * primeste vectorul pentru sortare si dimensiunea folosita
 *
 * returneaza adresa vectorului sortat
 */
int* sort(int n[], int size) {
 bool f = true;
 int tmp;

 //cat timp mai sunt interschimbari
 while (f) {
  f = false;
  // verifica daca mai sunt intersichimbari
  for (int i = 1; i < size; i++) {
   if (n[i - 1] > n[i]) {
    tmp = n[i - 1];
    n[i - 1] = n[i];
    n[i] = tmp;
    f = true;
   }
  }
 }
 return n;
}

int main() {
 // vectorul care va tine cifrele
 int v[10];
 // n - numarul dat
 int n;
 // numarul de cifre
 int i = 0;

 cin >> n;

 // cat timp n mai are cifre
 // le parcurgem si le punem in vector
 while (n != 0) {
  v[i] = n % 10;
  n = n / 10;
  i++;
 }

 //sortam vectorul
 sort(v, i);

 for (int j = 0; j < i; j++) {
  cout << v[j] << ',';
 }
 return 0;
}
propuneri de enunturi

Numar suspect

Un numar e suspect daca e sufixul patratului sau.


#include <iostream>

using namespace std;

int main() {

 int n, i = 0, ii, total = 0;
 cin >> n;

 while (total < n) {
  i++;
  ii = i * i;
  int val = i;
  bool f = true;
  while (i != 0) {
   int ci = i % 10;
   int cii = ii % 10;

   i = i / 10;
   ii = ii / 10;

   if (ci != cii) {
    f = false;
    break;
   }
  }
  i = val;
  if (f) {
   cout << val << ", ";
   total++;
  }
 }
 return 0;
}

1 dec. 2011

CMMDC

Folosind algoritmul lui Euclid calculez cel mai mare divizor comun


#include <iostream>

using namespace std;

int main() {
 int a, b;
 cin >> a;
 cin >> b;
 while (a != b) {
  if (a > b)
   a = a - b;
  else
   b = b - a;
 }
 cout << "cmmdc= " << a;
 return 0;
}
propuneri de enunturi

28 nov. 2011

Fibonacci number

Sirul lui Fibonacci, primele 30 de numere din acest sir
#include <iostream>

using namespace std;

int main() {

 int u = 0;
 int v = 1;
 int i, t;

 for (i = 2; i <= 30; i++) {
  t = u + v;
  u = v;
  v = t;
  cout << t << ", ";
 }
 return 0;
}

25 nov. 2011

Cifra maxima

Acest program calculeaza cifra maxima dintr-un numar


#include <iostream>

using namespace std;

int main() {
 // declaram variabilele, n - numar, max - cifra maxima
 int n, max;

 // initializam maximul cu valoarea minima
 max = 0;

 // citim n
 cin >> n;

 // cat timp n != 0, verificam ultima cifra,
 //daca este mai mare decat maximul actual, modificam maximul
 while (n != 0) {
  if (n % 10 > max) {
   max = n % 10;
  }
  // parcurgem cifrele lui n
  n = n / 10;
 }
        
        // afisam cifra
 cout << max;

 return 0;
}
propuneri de enunturi

Palindrom

Acest program verifica daca un numar este palindrom

#include <iostream>

using namespace std;

int main() {
 // declaram vriabilele,
 // n - numar initial, invers - numarul construit,
 // temp - variapila de manevra
 // (variabilele pot avea denumiri lungi, cuvinte si chiar fraze)
 int n, invers, temp;

 // citim n
 cin >> n;

 // initializam inversul
 invers = 0;

 // copiem in temp valoarea lui n
 temp = n;

 //construim inversul (vezi ultima cifra si suma cifrelor)
 while (temp != 0) {
  invers = invers * 10 + temp % 10;
  temp = temp / 10;
 }

 // verificam daca numarul este palindrom
 if (n == invers) {
  cout << "palindrom";
 } else {
  cout << "nu este palindrm";
 }

 return 0;
}
consola

propuneri de enunturi

Suma cifrelor

Un program care calculeaza suma cifrelor unui numar

#include <iostream>

using namespace std;

int main() {
 // declaram variabilele, n - numar, s - suma
 int n, s;

 // initializam variabila s cu 0
 s = 0;

 // citim n de la consola
 cin >> n;

 // calculam suma

 //atat timp cat numarul este diferit de 0 (mai are cifre)
 while (n != 0) {

  // variabilei s i se adauga ultima cifra din n
  // (ex: n = 123, s = s + 3)
  s = s + n % 10;

  // lui n i se sterge ultima cifra
  // (ex: 123 / 10 = 12 - impartire intreaga)
  n = n / 10;
 }
  // afisam suma
  cout << s;

 return 0;
}
consola

Structura while in c++

Un exemplu simplu pentru calculul simplu a sumei dintr-un interval, aceste program este echivalent cu acesta

#include <iostream>

using namespace std;

/**
 * acest program calculeaza suma numerelor dintr-un interval
 */
int main() {

 // declaram vriabilele i - index, a - limita aleatoare, s - o suma
 int i, a, s;

 // initializam suma cu 0
 s = 0;

 // initializam valoarea limita
 a = 10;

 // initializam contorul
 i = 1;

 // executam o bucla for pentru a calcula suma din intervalul [ 1 , 10 )
 while (i < a) {
  s = s + i;
  i++;
 }

 // afisam suma
 cout << s;

 return 0;
}
consola

Structura for in c++

Acest program prezinta structura repetitiva FOR


#include <iostream>

using namespace std;

/**
 * acest program calculeaza suma numerelor dintr-un interval
 */
int main() {

 // declaram vriabilele i - index, a - limita aleatoare, s - suma
 int i, a, s;

 // initializam suma cu 0
 s = 0;

 // initializam valoarea limita
 a = 10;

 // executam o bucla for pentru a calcula suma din intervalul [ 1 , 10 )
 for (i = 1; i < a; i++) {
  s = s + i;
 }

 // afisam suma
 cout << s;

 return 0;
}
consola


Ultima cifra dintr-un numar in c++

Aceasta
#include <iostream>

using namespace std;

int main() {
 // declaram vriabila <a>
 int a;
 // initializam variabila <a>
 a = 123;
 // afisam <a> mod 10
 // restul impartirii lui <a> la 10
 cout << a % 10;
 // returnam 0
 return 0;
}
consola

Afisarea unui numar in c++

Afisam o valoare cunoscuta

#include <iostream>

using namespace std;

int main() {
 int a;
 a = 1;
 cout << a;
 return 0;
}

Citirea unui numar in c++

Pentru a citi o valoare in c++ folosim functia cin .
In programul de mai jos am declarat o variabila de tipul int apoi am citit-o din consola
#include <iostream>

using namespace std;

int main() {
 int a;
 cin >> a;
 return 0;
}

Instalare Eclipse

Creaţi un folder nou în c:\ cu numele "cpp", copiaţi acolo Eclipse CDT, şi dezarhivaţi-l. Creaţi alt fişier în folderul cpp numit "workspace".
Structura de foldere ar trebui sa fie urmatoarea:

Deschideţi aplicaţia c:\cpp\eclipse\eclipse.exe


Selectaţi spaţiul de lucru "c:\cpp\workspace"

Aceasta este prima fereastra Eclipse

dați click pe săgeata din dreapta pentru a intra în editor

Acesta este editorul eclipse în care vom scrie programele.

Instalare MinGW

Pentru a instala MinGW trebuie să il copiaţi local de la adresa http://sourceforge.net/projects/mingw/files/latest/download?source=files (ultima versiune disponibilă).

Dupa ce copiaţi local fişierul, îl deschideţi şi urmaţi paşii:












Setaţi mediul de lucru (Win XP)

Mediul de lucru recomandat este sa folosiţi compilatorul MinGW şi un GUI potrivit pentru dezvoltare rapidă a programelor, recomand Eclipse.

Paşi necesari pentru a seta rapid mediul de lucru:
1. Copiaţi local şi instalaţi MinGW (detalii )
2. Setati MinGW in variabila Path din windows ( detalii )
3. Copiaţi local şi instalaţi local Eclipse cdt (detalii )

Asta este tot deocamdată.