Orar semigroup #2

Orar semigroup #2

Archive for 2012

S-a vrut arhitect, dar s-a realizat în alt domeniu

Un tânăr din Cluj plecat în Silicon Valley vrea să revoluţioneze modul în care utilizatorii interacţionează pe retele sociale. A început deja, cu o aplicaţie pentru iPhone prin care utilizatorii se pot conecta prin opinii pe care le împărtăşesc pe diverse subiecte.

A lucrat un an pentru un fond de venture capital care finanţa antreprenori în IT, după care şi-a fondat propria companie şi a dezvoltat propriul produs, Knotch, care vrea să schimbe modul în care utilizatorii de smartphone-uri reacţionează la mediul din jur. Inedit la această aplicaţie este faptul că părerile sunt exprimate nu într-un mod binar - cum este Facebook cu butonul de "like" şi nici într-o scală de doar 5 stele, ci în culori. "Ideea de bază a acestei aplicaţii este că te duci prin lume cu telefonul şi îţi exprimi părerile despre orice", spune Gânscă pentru Info X A.  

"Asta oferim noi, o platformă unde poţi să îţi "măsori" şi să îţi exprimi opiniile, ca un termometru de sentimente". A investit împreună cu echipa sa de trei persoane aproximativ 100.000 de dolari în dezvoltarea aplicaţiei. "Atât doar că dacă vrem să creştem echipa va trebui să strângem câteva milioane de dolari, ceea ce e foarte greu în Silicon Valley, pentru că e un spaţiu aglomerat de produse. Dar asta voi face la vară, voi strânge această sumă", spune încrezător acesta.

Deocamdată aplicaţia este disponibilă doar pentru iPhone. "Vrem să o dezvoltăm şi pentru telefoane Android, dar am făcut multă cercetare şi am constatat că utilizatorii de iPhone petrec mult mai mult timp pe telefon decât cei cu telefoane Android", explică Gânscă. "Pentru mine e foarte important să dau ceva înapoi locului care m-a creat. Putem recruta şi din altă parte, din India sau America, dar preferăm de la Cluj".

"Intenţia noastră a fost aceea de a crea o scală universală pe care oamenii să o înţeleagă indiferent de limba sau cultura lor"
, spune Gânscă.

marți, 25 decembrie 2012 by DlMuresan
Categories: , , | Leave a comment

Aruncarea pe verticală

În colaborare cu D0del

#include "graphics2.h"
#include <iostream>
#include <windows.h>
#include <math.h>
#include<fstream>
using namespace std;
int main()
{ifstream f("date");
int driver, mod;
initgraph(&driver, &mod, "", 1300, 800);
double x,v,a,t,xmax,g,i=0,xx;
v=15;
settextstyle(1,HORIZ_DIR,3);
char vv[10];
itoa(v,vv,10);
strcat(vv," m/s");
outtextxy(760,700,vv);
x=0;t=0;a=10;
xmax=30*v*v/20;
cout<<"H max "<<xmax/30<<" m"<<endl<<endl;
cout<<"Timp de urcare/coborare "<<v/a<<" s"<<endl<<endl;

line(750,0,750,1000);
line(0,750,1000,750);
while(x<xmax && x>=0)
{t=t+0.01;
x=(-5*t*t+20*t)*30;
if(x>=0){xx=x;
cout<<x<<"  ";
i++;
setcolor(3);
circle(500,700-x,50);
delay(10);
setcolor(0);
circle(500,700-x,50);
}
}
setcolor(3);
circle(500,700-xx,50);
setcolor(15);
line(500,700-x,755,700-x);
char q[10],qq[10];
double pp=xmax/30-(int)xmax/30;
itoa(xmax/30,q,10);
itoa(pp*1000,qq,10);
strcat(q,".");
strcat(q,qq);
outtextxy(760, 700-x,q);

double ti=v/a;
strcat(q," m( ");
strcat(q,itoa(ti,qq,10));
strcat(q,".");
strcat(q,itoa((ti-(int)ti)*
100,qq,10));
strcat(q,"s )");
settextstyle(1,HORIZ_DIR,2);
outtextxy(760, 700-x,q);

delay(2000);
setcolor(0);
circle(500,700-xx,50);
if(v<21){
t=0;x=xmax;
while(x>=-7)
{t=t+0.01;
x=x-(5*t*t)*30;
if(x>=-7){xx=x;
cout<<x<<"  ";
i++;
setcolor(3);
circle(500,700-x,50);
delay(20);
setcolor(0);
circle(500,700-x,50);
}
}}
cout<<endl<<" "<<i;
setcolor(3);
circle(500,700-xx,50);


while( !kbhit() );
closegraph();
return 0;
}

joi, 13 decembrie 2012 by DlMuresan
Categories: , , , | Leave a comment

11 dec

#include<iostream>
#include<fstream>
#include<iomanip>
using namespace std;
int main()
{int n,l,k,a[10][10],i,j;
ifstream f("date.in");
f>>n;
for(i=1;i<=n;i++)
    for(j=1;j<=n;j++)
        f>>a[i][j];
cout<<"Diagonala principala"<<endl;
for(i=1;i<=n;i++)
    cout<<a[i][i]<<" ";
cout<<endl<<"Diagonala secundara"<<endl;
for(i=1;i<=n;i++)
    cout<<a[i][n+1-i]<<" ";
cout<<endl<<"Rama matricii"<<endl;
cout<<a[1][1]<<" "<<a[1][n]<<" "<<a[n][1]<<" "<<a[n][n]<<endl;
for(i=2;i<n;i++)
    cout<<a[i][1]<<" "<<a[1][i]<<" "<<a[i][n]<<" "<<a[n][i]<<" "<<endl;
f>>k;
cout<<endl<<"Coloana "<<k<<endl;
for(i=1;i<=n;i++)
    cout<<a[i][k]<<" ";
cout<<endl<<"Interschimbarea diagonalelor"<<endl;
for(i=1;i<=n;i++)
    swap(a[i][i],a[i][n+1-i]);
for(i=1;i<=n;i++)
    {cout<<endl;
    for(j=1;j<=n;j++)
        cout<<setw(3)<<a[i][j];}
f>>l;
cout<<endl<<"Linia "<<l<<" ordonata crescator"<<endl;
for(i=1;i<n;i++)
    for(j=i+1;j<=n;j++)
        if(a[l][i]>a[l][j])
            swap(a[l][i],a[l][j]);
for(i=1;i<=n;i++)
    cout<<a[l][i]<<" ";
cout<<endl<<"Elementele mai mici decat vecinii"<<endl;
for(i=0;i<=n;i++)
{a[0][i]=INT_MAX;
a[i][0]=INT_MAX;
a[n+1][i]=INT_MAX;
a[i][n+1]=INT_MAX;}
for(i=1;i<=n;i++)
    for(j=1;j<=n;j++)
        if(a[i][j]<a[i-1][j] && a[i][j]<a[i+1][j] && a[i][j]<a[i][j-1] && a[i][j]<a[i][j+1])
            cout<<a[i][j]<<" ";
cout<<endl<<"Regiunea nord"<<endl;
for(i=1;i<=n;i++)
    for(j=1;j<=n;j++)
        if(i<j && i+j<=n)
            cout<<a[i][j]<<" ";
}

marți, 11 decembrie 2012 by DlMuresan
Categories: | Leave a comment

Rareş B. vs. Mita M

Elev MITA MUREŞAN parcurge drumul Popoviciu - Floreşti pentru meditaţii la disciplina obligatorie Matematică din cadrul examenului de Bacaloriat. Beneficiarul este elev RAUL BACIU, denumit mai departe şi "Prostu ăsta", "Prostalău" sau "Pruncuţul".

La plecarea din Floreşti, elev MITA MUREŞAN este dus către lumea civilizată (reprezentată de oraşul Cluj-Napoca) de către maior RAREŞ BACIU (la volan) cu o maşină Suzuki Ignis. În dreapta, fomeie MARA BACIU.

Şi are loc următorul Dialog între maior RAREŞ BACIU (care e în concediu) şi elev MITA MUREŞAN (în căutare de maşină pe motorină). Intervine scurt şi fomeie MARA BACIU (care e şi ea în concediu, draga de ea):

maior RAREŞ BACIU: Ia zi mă, tu eşti cel mai betonel din clasa?
elev MITA MUREŞAN: Păi, ştiţi, cam da...
R: No zi bă, îşi ia Raul ăsta al meu BACU?
Că io l-am lăsat în pula lui ăştia 3 ani de zile.
Numa la bani si la pi2de i-o stat capu.
M: ...şi la Dota, că am văzut că are cam 5 ore pe zi jucate.
R: Da, exact, şi la dota, mă-sa de prost!
fomeie MARA BACIU: Cavalerule, vezi vezi cum pula mea vorbeşti!
R: Taci tu, bemi-ai pula!
Deci zi bă, îşi ia BACU?
Da nu mă minţi, că de mă minţi îţi omor familia dacă o prind într-un Logan.
M: Să ştiţi că şi Raul are obsesii cu omorât familii în Logane.
R: Zi bă odată, îşi ia ăsta BACU?
M: Păi, ştiţi, nu prea şi-l ia la Mate.
R: Bine bă, ia zi cât să-ţi dau să vii 2 ore pe săptămână pâna-n iulie?
M: Pi, lăsaţi că nu cer io bani.
R: Zi bă odată că altfel te ridic io de la şcoala şi te aduc cu forţa la mirosu de găinaţ de aici din Floreşti.
M: Pi, cum să vă zic, nu-mi trăbă bani.
Da, ştiţi, mi-am luat carnetu acu 2 săptămâni şi nu prea am maşină.
Nu-mi puteţi da Suzukiu până la BAC? Sau până îmi iau io ceva maşină?
R: Ba da bă, că io oricum am vrut să-mi iau alta, să-i las Passatu la MARA şi Suzukiu la Pruncuţu meu drag şi scump. Da nu i-l mai las dacă zici că-i aşa de prostalău să nu-şi ia BACU. Păi şi io mi l-am luat, bă! Futu-l în gură!
M: No ce fain... numa să-i puneţi motor dizăl ca să pornească draga de ea cu aprindere prin comprimare.
R: Bă tu-ţi baţi joc de mine?
M: Păi nu, da credeam că...
R: Eşti prost bă, da dacă mi-l pui la punct pe prostu ăsta, apăi boier te fac.
M: No ce fain... deci îmi lăsaţi maşina de amu şi vă întoarceţi cu FANY?
R: Nu bă, da de mâine ţi-o aduc la scară.
M: Ok. Pi, ştiţi, prostu ăsta nu cred că-şi ia nici la proba aia a 3-a la alegere.
Nu plusaţi cu Passatu şi vi-l rezolv de tot să ştiţi una şi bună?
R: Serios?
M: Da, şi dacă cumva săriţi cu X5-u ăla din curte, vă zic şi ce secrete de la şcoală vă ascunde şi cât fumează pe zi şi cum o fute de bani şi nu numai de bani pe NATY, că am auzit că-i bună bucata.

luni, 3 decembrie 2012 by DlMuresan
Categories: , | Leave a comment

Subiecte BAC 20 noiembrie

Subprogramul sub, cu trei parametri, primeşte prin intermediul parametrilor:
– v un tablou unidimensional cu cel mult 100 de componente ce memorează numere întregi de cel mult 4 cifre fiecare;
– n un număr natural nenul mai mic sau egal cu 100 ce reprezintă numărul efectiv de componente ale tabloului primit prin intermediul parametrului v;
– a un număr întreg cu cel mult 4 cifre.
Subprogramul sub returnează numărul componentelor tabloului primit prin intermediul parametrului v ale căror valori sunt strict mai mici decât valoarea parametrului a.
Exemplu: pentru valorile n=5, v=(1,21,9,21,403), a=20 ale parametrilor, în urma apelului, subprogramului sub va returna valoarea 2.
a) Scrieţi definiţia completă a subprogramului sub.
b) Să se scrie un program C/C++ care să citească de la tastatură un număr natural nenul n (n≤100) şi n numere întregi, fiecare având cel mult 4 cifre, şi care, folosind apeluri utile ale subprogramului sub, să afişeze pe ecran mesajul DA dacă oricare două dintre cele n numere întregi citite sunt distincte două câte două, sau mesajul NU în caz contrar.
Exemplu: pentru n=6 şi cele n numere citite de la tastatură: 47 183 69 8 134 -56
se va afişa pe ecran mesajul DA

#include<iostream>
#include<fstream>
using namespace std;
int sub(int v[], int n, int a)
{int i,j=0;
for(i=0;i<n;i++)
    if(v[i]<a)
        j++;
return j;}

int main()
{int n,v[100],i,a,vv[100];
cin>>n;
for(i=0;i<n;i++)
    cin>>v[i];
for(i=0;i<n;i++)
    vv[i]=sub(v,n,v[i]);
for(i=0;i<n-1;i++)
    for(int j=i+1;j<n;j++)
        if(vv[i]==vv[j])
            {cout<<"NU";return 0;}
cout<<"DA";
}

marți, 20 noiembrie 2012 by DlMuresan
Categories: | Leave a comment

19 noiembrie

Departamente, suma salariilor din fiecare, media, max si min din fiecare plus numarul de angajati
select department_name, sum(salary), trunc(avg(salary)), min(salary),max(salary),count(*) angajati from employees join departments using (department_id) group by department_name

select add_months(to_date('01-01-2012','dd-mm-yyyy'),4) from dual

select add_months(to_date('2012/02/02','yyyy-mm-dd'),4) from dual

select to_char(add_months(to_date('2012/02/02','yyyy-mm-dd'),4),'day,month,yyyy') from dual

Luna in cifre romane (rm sau RM)
select to_char(add_months(to_date('2012/02/02','yyyy-mm-dd'),4),'day,rm,yyyy') from dual


luni, 19 noiembrie 2012 by DlMuresan
Categories: , , | Leave a comment

16 noiembrie

select first_name, last_name,trunc(months_between(sysdate,hire_date)/12) "Ani de lucru" from employees

Fondul de salarii din fiecare departament dar doar pt angajatii mai vechi de 15 ani
select sum(salary) "Fond de salarii", department_name from employees e,departments d where e.department_id=d.department_id and trunc(months_between(sysdate,hire_date)/12)>15 group by department_name

Afiseaza doar departamentele in care lucraeza mai vechi de 15 ani cu fond de salarii de peste 15000
select sum(salary) "Fond de salarii", department_name from employees e,departments d where e.department_id=d.department_id and trunc(months_between(sysdate,hire_date)/12)>15 group by department_name having sum(salary)>15000

SELECT - coloane
FROM - tabele
WHERE - expresie logica
GROUP BY - coloan1, coloana 2
HAVING - expresie logica (conditie pe grupul definit)
ORDER - coloana1 (alias)

HAVING nu poate aparea fara GROUP BY


select sum(salary) "Fond de salarii", department_name from employees e,departments d where e.department_id=d.department_id and trunc(months_between(sysdate,hire_date)/12)>15 group by department_name having sum(salary)>=(select avg(salary) from employees)

select sum(salary) "Fond de salarii", department_name from employees e,departments d where e.department_id=d.department_id and trunc(months_between(sysdate,hire_date)/12)>1 group by department_name having count(*)>2

vineri, 16 noiembrie 2012 by DlMuresan
Categories: , | Leave a comment

Oracal v3 - 15 noiembrie

15 noiembrie

Suma salariilor din fiecare departament (CU GROUP BY)
select sum(salary), department_id from employees group by department_id

select sum(salary), department_id, first_name from employees group by department_id, first_name

Suma salariilor din fiecare departament (cu numele departamentului)
Sintaxa ANSI
select sum(salary), department_name from employees join departments using(department_id) group by department_name


Sintaxa Oracle
select sum(salary) "Fond de salarii", department_name from employees e,departments d where e.department_id=d.department_id group by department_name
(e si d - aliasurile tabelelor)


Self Joining (Angajati - Sefi)
ANSI: select e.first_name "angajat", m.first_name "sef" from employees e join employees m on(m.employee_id=e.manager_id)

select e.first_name "angajat", m.first_name "sef" from employees e join employees m on(m.employee_id=e.manager_id) where m.first_name='Steven' order by 2

ORACLE: select e.first_name, m.first_name from employees e, employees m where m.employee_id=e.manager_id order by 2


select e.first_name, m.first_name from employees e, employees m where m.employee_id=e.manager_id and m.first_name='Steven' order by 2

(2 - sef, 1 - angajat)



miercuri, 14 noiembrie 2012 by DlMuresan
Categories: , , | Leave a comment

Oracal v.2 - de pe Academy therory

Functie de inserare rand (instanta) intr-un tabel
(Sectiunea 12, Lectia 1, Slide 7)
insert into <table name> values (value1, value2, ...)
Value reprezinta atributele din coloanele existente (poate fi si null)

Adaugarea unei coloane noi la un tabel
S 12, L 2
alter table <table name> add (<column_name> <data type>)
Column name fara ' '



Stergerea unei coloane
alter table <table name> drop column <column name>

Stergerea unui rand
Delete from <table name> where <column name> = ' some value '

Proiectie - alegerea a uneia sau mai multor coloane

Selectie - alegerea a unuia sau mai multor randuri

select distinct department_id from employees - afiseaza valorile distincte din coloana department_id

select commission_pct, first_name from employees order by commission_pct - ordonare dupa comision
order apare ultimul in interogare

order by salary DESC - ordoneaza descrescator
fara DESC - ordoneaza crescator

In WHERE nu se pot pune alias-uri. Se pot pune decat in ORDER

select first_name, last_name, department_name
from employees e, departments d
where e.department_id (+)=d.department_id
order by department_name, first_name
cu (+) dupa coloana din where care e nula pt a o afisa, afiseaza si departamentul fara nume
Nu merge (+) la mai multe coloane pt oracle
Afiseaza direct numele departamentului pt fiecare angajat (in loc de id-ul departamentului)

Varianta ANSI pt acelasi lucru
select first_name, last_name, department_name from employees full outer join departments
using (department_id)
Cu left outer inainte de joi, afiseaza ce lipseste din stanga. Cu right outer, din dreapta.
Echivalentul (+) in ambele coloane este FULL OUTER JOIN

select department_name, count (department_id)
from employees join departments
using (department_id)
group by department_name
Numara cati angajati sunt in fiecare departament. Daca se aduna, rezulta angajatii in total.

miercuri, 7 noiembrie 2012 by DlMuresan
Categories: , , | 1 comment

Oracăl

Interogări SQL (click de 2 ori pe SQL langa APP BUILDER)
https://iacademy.oracle.com/pls/iacademy/f?p=4500:1003:3391007919958272::NO:::

Tipuri de date
- sir de caractere VARCHAR2
- numeric NUMBER (lungimea in cifre, cate zecimale) (5,2) - inseamna 10.00 (5 digits in total, din care "." si 2 zecimale)
- data calendaristica DATE (10-jun-1999)

Operatori
a) aritmetici + - * /
b) pentru siruri de caractere
|| concatenare
' ' delimitator pentru sir de caractere

ex. select 'ABCD' || 'SGTR' from dual

" " se folosesc pentru numele coloanei

ex. select 'ABCD' || ' SGTR' as "Concatenare" from dual

Exista si functie pentru concatenare: CONCAT(sir1,sir2) <=> sir1 || sir2

c) relationali =, <, >, !=, <=, >=

Structura unei tabele
DESCRIBE nume_tabel

ex.
describe employees
select first_name from employees where departmend_id = 90
Se selecteaza doar randu care trebuie sa fie executat (aici randu 2)

ex.
describe employees
select first_name as "NUME", last_name as "PRENUME" from employees where department_id != 90

Operatori specifici oracle (relationali)
BETWEEN ... AND ... (interval inchis)
IN(e1,e2,...) (apartenenta la multimea e1,e2,...)
LIKE

ex.
describe employees
select first_name as "NUME", last_name as "PRENUME",department_id,job_id from employees where department_id between 10 and 20

ex.
describe employees
select first_name as "NUME", last_name as "PRENUME",department_id,job_id from employees where department_id between 10 and 20 and job id = 'AD_ASST'

pt functia LIKE
_ si %

% inseamna ca acolo unde apare poate sa fie 0 sau mai multe caractere (orice caractere)
"Toate first name-urile care au pe prima pozitie k si in continuare oricate si orice caractere"
'k%'

ex.
describe employees
select first_name as "NUME", last_name as "PRENUME" from employees where (first_name) like 'K%'
Afiseaza numele care incep cu K si continua cu orice si oricate caractere
'%K%' - afiseaza numele care il contin pe K
exista functiile LOWER si UPPER care se pun inainte de (first_name)

_ inseamna spatiu liber
de ex: '_a%' - afiseaza numele care au a pe pozitia a doua si in continuare orice si oricate

ex.
describe employees
select first_name as "NUME", last_name as "PRENUME" from employees where (first_name) like '_a_'

ex de conditie compusa
describe employees
select first_name as "NUME", last_name as "PRENUME" from employees where (first_name) like '%a_' and first_name like 'P%'

Sectiunea 16 - Comparison operators - Slide 13
describe employees
select first_name as "NUME", last_name as "PRENUME", job_id as "ID_JOB" from employees where JOB_ID like '%AD\_P%' ESCAPE '\'
caracterul din ESCAPE poate fi si altul
Daca vrem sa cautam _ sau \ folosim pe post de ESCAPE alt caracter care nu ne intereseaza

d) Operatori pentru coloane nule
ex.
describe employees
select first_name as "NUME", last_name as "PRENUME", job_id as "ID_JOB", COMMISSION_PCT from employees where COMMISSION_PCT is NULL

e) Operatori logici: NOT AND OR

se foloseste is NULL pt coloane nule
se foloseste is not NULL pt coloane nenule

describe employees
select first_name as "NUME", last_name as "PRENUME", salary as "Salariu" from employees where department_id in (20,50) and commission_pct is NULL


describe employees
select first_name as "NUME", last_name as "PRENUME", salary as "Salariu" from employees where (department_id in (80,50) or department_id is null) and commission_pct is not NULL


Sa se scrie first name, last name, salariu si venitul (salariul + salariul inmultit cu comision)
functia NVL (expresi1,expresie2) returneaza expresie2 daca expresie1 este null si returneaza expresie1 daca expresie1 nu este null
Expresie 1 si expresie 2 de acelasi tip trebuie sa fie

describe employees
select first_name as "NUME", last_name as "PRENUME", salary as "Salariu", NVL(salary+salary*commission_pct,salary) as "venit" from employees


Sa se listeze fname lname comision (cat este in cifre sau 'Nu are' daca nu exista)
Functie TO_CHAR transforma expresie numerica in sir de caractere
describe employees
select first_name as "NUME", last_name as "PRENUME", NVL(to_char(commission_pct),'Nu are') as "Comision" from employees


Functia TO_NUMBER nu accepta litere
to_number('abc123') - invalid

Sa se scrie fname lname intr-o singura coloana "Nume si prenume" si o alta coloana "De cate zile este angajat"
describe employees
select first_name || ' ' || last_Name as "NUME SI PRENUME", trunc(sysdate-hire_date) as "Zile de cand lucreaza" from employees


SYSDATE - data curenta
trunc - functie pt convertire la intreg

Sa se afiseze de cati ani lucreaza
describe employees
select first_name || ' ' || last_Name as "NUME SI PRENUME", trunc((sysdate-hire_date)/365) as "Ani de cand lucreaza" from employees


describe employees
select first_name || ' ' || last_Name as "NUME SI PRENUME", trunc((sysdate-hire_date)/365) as "Ani de cand lucreaza", trunc(months_between(sysdate,hire_date)/12) as "Ani de cand lucreaza" from employees


select trunc(months_between(sysdate,to_date('1-nov-1994','dd-mon-yyyy'))/12) from dual

Functii pe siruri de caractere
UPPER
LOWER
expC - expresie caracter

INITCAP (expC) - transforma in majuscula prima litera din fiecare cuvant care apare expC (separator intre cuvinte e orice caracter non-litera)
Rezultatul e Prima mare si restul mici, indiferent de restul literelor
select initcap('ion vasile*vasile') from dual

CONCAT (sir1,sir2)

SUBSTR (expC,exp_numerica1,[exp_numerica2]) - (SIR,POZITIE,LUNGIME) - functia extrage din sir un subsir incepand de la pozitia POZITIE de lungime LUNGIME. Daca LUNGIME nu apare, extrage pana la sfarsit

[...] - parametru optional
select substr('abcd',2,1) rezultat b

Observatii
- Daca LUNGIME e mai mare decat lungimea sirului, nu da eroare, ci se opreste la sfarsit
- Daca POZITIE este negativ, pozitia se determina de la sfarsit numarand (afisarea se face normal, spre dreapta; doar se incepe cu numararea de la dreapta la stanga)
- ('abcd',-20,1) nu va afisa nimic (NULL)
select substr('abcd',-3,2) from dual

INSTR (sir,subsir,pozitie,apar) (ultimele 2 numerice) - returneaza pozitia subsirului in sir, cautarea facandu-se incepand cu pozitia poz a celei de a apar-a aparitie a lui. Daca nu exista, returneaza 0. Daca apar lipseste, indica prima aparitie. Daca lipseste si pozitie, o ia de la inceput cu cautarea in primul sir.

Se incepe cautarea de la a pozitie-a pozitie a primului sir.
select INSTR ('abcdecd','cd',4) from dual - afiseaza 6, pt ca se sare peste primele 4 litere din 'abcdecd'

LENGTH (sir) - returneaza lungimea sirului sir (returneaza numar)

Sa se afiseze first name si ultima litera din first name
select first_name , substr(first_name,length(first_name)) as "ultima litera" from employees
select first_name , substr(first_name,-1) as "ult lit" from employees

Sa se listeze toti angajatii care incep (Fname) cu litera a
select first_name as "NUME" from employees where lower(substr(first_name,1,1))='a'
select first_name as "NUME" from employees where substr(first_name,1,1)=:litera

=: cere litera dorita intr-o fereastra noua

Sa se afiseze toti angajatii care au combinatia de litere RT in first name
select first_name as "NUME" from employees where instr(first_name,'rt') !=0

Functii
LPAD (sir1,numar,sir2) - completeaza sir1 la stanga cu caractere din sir 2 pana ce sirul obtinut are lungiea numar
select LPAD('abcd',7,'b') from dual
Daca numar e mai mic decat lungimea sir1, se sterg caractere pana cand sir1 ajunge la lungimea numar

RPAD - similar, completeaza la dreapta sirului1

Sa se scrie first name completat la dreapta cu * pana la lungimea 40
select RPAD(first_name,40,'*') from employees

Functia TRIM sterge caracterul din sir daca e la inceput/sfarsit

TRIM (LEADING carac FROM sir) - de la inceput
TRIM (TRAILING carac FROM sir) - de la sfarsit
TRIM (BOTH carac FROM sir) - si de la inceput si de la sfarsit
TRIM (sir) - sterge spatiile si de la inceput si de la sfarsit
TRIM (carac FROM sir) - elimina un caracter si de la inceput si de la sfarsit
Functia sterge doar caracterele (inclusiv spatiile) de la inceputul/sfarsitul sirului

REPLACE (sir, subsir, sir nou) - inlocuieste toate aparitiile lui subsir din sir cu sir nou

Functii numerice

REMAINDER (x,y) - determina multiplul lui y cel mai apropiat de x si returneaza diferenta dintre x si acel multiplu
MOD (x,y) - restul impartirii lui x la y
SIGN (x) - returneaza semnul lui x (1 sau -1 in functie de pozitiv sau negativ sau 0)
CEIL (x) - returneaza cel mai mic nr intreg mai mare sau egal cu parametrul transmis (parte intreaga)
FLOOR (x) - cel mai mare nr intreg mai mic sau egal cu parametrul transims
ROUND (x,y) - returneaza valoarea lui x aproximata la y zecimale
Daca y>0, se merge spre dreapta la zecimala y+1 si o verifica in functie de 5
Daca y<0, se merge spre stanga cu y zecimale si se compara a y-a zecimala cu 5
select round (172.4454,-2) from dual - returneaza 200
Daca parametrul y lipseste, e ca si cum ar fi 0. Atunci se uita la prima zecimala si rotunjeste la unitati.
TRUNC (x) - converteste la intreg
TRUNC (x,y) - truncheaza nr x dupa y zecimale. y poate fi si negativ si se comporta la fel ca ROUND
select trunc(999992.55555,-4) from dual - returneaza 990000

Functii pt date calendaristice

ADD_MONTHS (expD,nr_luni) - adauga nr de luni la data din expD
Data se trece sub forma de sir de caractere '1-nov-2012'
MONTHS_BETWEEN (data1,data2) - data1 - data2

luni, 29 octombrie 2012 by DlMuresan
Categories: , , , | Leave a comment

Anunţ vânzare BLOG InfoXIIA!

Decât se vinde!

Acest blog a fost scos recent la vânzare de către al său proprietar. Dispune de următoarele facilităţi:
- sponsorizare PROFI (3450€/an lumină)
- coloană imobilă în partea stângă (asta înseamnă că puteţi scroll-a cât vă taie capu, că ce-i în stânga rămâne acolo)
- meniu dă meniu
- coloană forte îngustă pe partea dreaptă, ideală pentru banner-e înguste, nu?
- coloană centrală generoasă dpdv al lăţimii, ideală pentru ştiri de ultimă oră, dar şi pentru anunţuri şi înjurături
- link inclus în header (centru) către cel mai bun site de pronosticuri sportive din Mănăştur
- centrarea automată a conţinutului exclusivist în cadrul paginii

PREŢUL ieste negociabil, decât precizăm că se învârte în jurul valorii de 2800€ (TVA exclus)
La pachet, veţi primi în acelaşi timp cu achiziţionarea blogului şi un autovehicul marca DACIA, submarca LOGAN, o maşină ideală pentru tăt omu'. Aspectul nu e d-ăla de să-ţ faci poză lângă ea, da la nivel de performanţe se poate spune că rupe tăt. Loganu (care ie de culoare roşie) se prezintă astfel:
- 4 uşi cu deschidere manuală (unii ar zice chiar 5, cu cea de la portbagaj, care, apropo, e generos)
- mere bine pă benzină şi are un motor reversibil pe aproape o mie şase sute de centimetri cubi
- este singurul model din 2007 care are transmisie automată
- transmisia automată poate fi decuplată şi să se treacă pe transmisie vocală, deci semi-manuală
- a rulat 85 de mii de kilometri şi e înmatriculată în Cluj, oraş fain de tăt
- consum urban - 7, consum extraurban - 5, deci un cosnum mixt de 6, nu?
- are o tracţiune pe faţă genială, 90 de cai şi prinde maxâm 168 km/h
- singurul dezavantaj e decât că nu e orijinală, da io zic că merge şi aşa

BONUS: În maşina de mai sus (poreclită şi LIMU', de la limousine) a stat, atât pe scaunul din dreapta cât şi pe bancheta din spate, un uriaş nume al feşănului world-wide. Cred că se poate ghici despre cine e vorba.

Îi fain blogu, no. Hai luaţâ-l că maşina v-o dăm FREE!

joi, 4 octombrie 2012 by DlMuresan
Categories: , , , , , | 1 comment

Mure prodanca!

Abramburica a stabilit structura anului scolar care-ncepe amu'-amu'. Aceasta a fost publicata deja in Monitorul Oficial, sub forma unui ordin de ministru.

Palmierul Victor Pon-Ta a precizat ca anul scolar 2012-2013 va incepe la 17 septembrie (adică la 11 ani şi 6 zile de la 9/11).

Sezonul va avea 33 de saptamani de cursuri (cls. XII).

Structura Semestrul I 2012-2013
- Cursuri intre 17 septembrie 2012 si 21 decembrie 2013 (14 SĂPT)
- Vacanta de iarna intre 22 decembrie 2012 si 13 ianuarie 2013 (3 SĂPT)

Structura Semestrul al II-lea 2012-2013
- Cursuri intre 14 ianuarie 2013 si 5 aprilie 2013 (12 SĂPT)
- Vacanta de primavara intre 6 aprilie 2013 si 14 aprilie 2013 (1 SĂPT)
- Cursuri intre 15 aprilie 2013 si 31 mai 2013 (7 SĂPT)
- Vacanta de vara intre 22 iunie 2013 si 8 septembrie 2013 (11 SĂPT)

* Saptamana 1-5 aprilie 2013 din semestrul al doilea este saptamana dedicata activitatilor extracurriculare si extrascolare, in cadrul programului numit „Scoala altfel”, avand un orar specific.

* Tezele din semestrul I - pana la data de 30 noiembrie 2012.
* Tezele din semestrul II - pana la data de 25 mai 2013.

Cursurile claselor a XII-a se incheie la data de 31 mai 2013.

Haide "U" & Mure (cadu & prodanca)!

miercuri, 5 septembrie 2012 by DlMuresan
Categories: , , , , , , , | Leave a comment

5/11 - Arbori binari


#include<iostream>
#include<fstream>
using namespace std;
ifstream f("date");
struct nod{int info;
nod* st,*dr;};

nod* creare()
{int x;
f>>x;
if(x)
{nod*p=new nod;
p->info=x;
p->st=creare();
p->dr=creare();
return p;}
else return NULL;}

void RSD(nod* R)
{if(R)
{cout<<R->info;
RSD(R->st);
RSD(R->dr);}

}

void fii(nod* R, int x)
{if(R)
{if(x==R->info)
{if(R->st)
    cout<<R->st->info<<" ";
if(R->dr)
    cout<<R->dr->info<<" ";
}
fii(R->st,x);
fii(R->dr,x);
}
}

int suma(nod* R)
{
    if(R)
        return R->info+suma(R->st)+suma(R->dr);
    else return 0;
}

int main()
{nod* R;
R=creare();
RSD(R);
cout<<endl;
fii(R,3);
cout<<endl;
cout<<suma(R);
}

duminică, 10 iunie 2012 by DlMuresan
Categories: | 1 comment

6/8

#include<iostream>
using namespace std;

struct nod{int info;
nod* st,*dr;};

nod* creare()
{int x;
cin>>x;
if(x)
{nod*p=new nod;
p->info=x;
p->st=creare();
p->dr=creare();
return p;}
else return NULL;}

void RSD(nod* R)
{if(R)
{cout<<R->info;
RSD(R->st);
RSD(R->dr);}
}

int main()
{nod* R;
R=creare();
RSD(R);
}

joi, 7 iunie 2012 by DlMuresan
Categories: , , | Leave a comment

Liste dublu inlantuite

Sa se verifice daca un numar este palindrom (cifre citite de la tastatura/fisier) folosind o lista liniara dublu inlantuita.

#include<iostream>
#include<fstream>
using namespace std;
struct nod{int info;
nod *urm,*ant;};

void adaugare(nod* &ultim,int x)
{nod *p=new nod;
ultim->info=x;
ultim->urm=p;
p->ant=ultim;
p->urm=NULL;
ultim=p;}

void creare(nod* &prim, nod* &ultim)
{prim=new nod;
ultim=new nod;
prim->urm=ultim;
prim->ant=NULL;
ultim->urm=NULL;
ultim->ant=prim;
int x,i;
cin>>x;
while(x)
{i=x%10;
x=x/10;
adaugare(ultim,i);
}
}

void afisare(nod* prim, nod* ultim)
{nod *p=prim->urm;
if(prim->urm==ultim)
    cout<<"Lista vida";
else while(p!=ultim)
    {cout<<p->info<<" ";
    p=p->urm;}
}

int palindrom(nod* prim, nod* ultim)
{nod*p=prim->urm;
nod*q=ultim->ant;
while(q->urm!=p && q!=p)
{if(p->info!=q->info)
    return 0;
p=p->urm;
q=q->ant;
}
return 1;
}

int main()
{int x;
nod *prim,*ultim;
creare(prim,ultim);
afisare(prim,ultim);
if(palindrom(prim,ultim))
    cout<<"DA";
else cout<<"NU";
}

by DlMuresan
Categories: , | Leave a comment

5/30 - Joc carti

#include<fstream>
#include<iostream>
using namespace std;
struct nod{
    char culoare;
    nod* urm;};
   
void adaugare_coada(nod* &prim,nod* &ultim,char x)
{nod* p=new nod;
p->culoare=x;
p->urm=NULL;
if(prim==NULL)
    prim=p;
else ultim->urm=p;
ultim=p;}

void adaugare_stiva(nod* &vf, int x)
{nod* p;
p=new nod;
p->culoare=x;
p->urm=vf;
vf=p;}

void afisare(nod* vf)
{if(vf==NULL)
    cout<<"Stiva/Coada goala";
else
    while(vf!=NULL)
    {cout<<vf->culoare<<" | ";
    vf=vf->urm;}
    cout<<endl;
}
int main()
{nod *c1=NULL,*c2=NULL,*c=NULL,*uc1=NULL,*uc2=NULL;
ifstream f("date");
char x;
int n;
f>>n;
int i=0;
while(i<n/2)
    {f>>x;
    i++;
    adaugare_coada(c1,uc1,x);
    }
    while(f>>x)
        adaugare_coada(c2,uc2,x);
afisare(c1);
afisare(c2);
while(c1 && c2)
    {adaugare_stiva(c,c1->culoare);
    c1=c1->urm;
    if(c->culoare=='R')
        while(c)
            {adaugare_coada(c2,uc2,c->culoare);
            c=c->urm;}
    if(c1 && c2)
    {adaugare_stiva(c,c2->culoare);
    c2=c2->urm;
        if(c->culoare=='R')
            while(c)
                {adaugare_coada(c1,uc1,c->culoare);
                c=c->urm;}
    }
    }
}

marți, 29 mai 2012 by DlMuresan
Categories: , , , | Leave a comment

5/24

Se citesc nr dintr-un fisier. Sa se calculeze media aritmetica. Sa se insereze dupa fiecare nr, nr sau de cifre.

#include<iostream>
#include<fstream>
using namespace std;
struct nod{int info;
nod* urm;};

void adaugare(nod* &vf, double x)
{nod* p;
p=new nod;
p->info=x;
p->urm=vf;
vf=p;}

void afisare(nod* vf)
{if(vf==NULL)
    cout<<"Lista goala";
else
    while(vf!=NULL)
    {cout<<vf->info<<" | ";
    vf=vf->urm;}
    cout<<endl;
}

int nrcif(int x)
{int i=0;
while(x)
{i++;x=x/10;}
return i;}

void inserare(nod* vf,int x)
{nod* p=new nod;
p->info=x;
p->urm=vf->urm;
vf->urm=p;}

void stergere(nod* &vf)
{nod* p,*q=vf;
int k=0;
while(q->urm && k<10)
    {
        if(q->urm->info>9 && q->urm->info<100)
        {
        //cout<<q->urm->info;
        p=q->urm;
        q=q->urm->urm;
        delete p;}
        else q=q->urm;
        k++;
      
    }
}

int main()
{ifstream f("date.in");
nod* vf=NULL;
double i=0,s=0,x;
while(f>>x)
{i++;
adaugare(vf,x);
s=s+x;}
afisare(vf);
double m=s/i;
m=m*100;
m=(int)m;
m=m/100;
cout<<"Media: "<<m<<endl;
nod* p=vf;
while(vf!=NULL)
{inserare(vf,nrcif(vf->info));
vf=vf->urm->urm;}
afisare(p);
vf=p;
cout<<endl;
stergere(vf);
//afisare(vf);
}

joi, 24 mai 2012 by DlMuresan
Categories: | Leave a comment

5/23

Se citesc nr intregi care se aseaza intr-o stiva. Sa se creeze o coada cu nr neprime din stiva. Fiecare nr va fi urmat de nr sau de divizori.

#include<iostream>
#include<fstream>
using namespace std;
struct stiva{int info;
stiva* urm;};

struct coada{int info,nrdiv;
coada* urm;};

void adaugare_coada(coada* &prim,coada* &ultim,int x,int y)
{coada* p=new coada;
p->info=x;
p->nrdiv=y;
p->urm=NULL;
if(prim==NULL)
    prim=p;
else ultim->urm=p;
ultim=p;}

void adaugare_stiva(stiva* &vf, int x)
{stiva* p;
p=new stiva;
p->info=x;
p->urm=vf;
vf=p;}

void afisare_coada(coada* vf)
{if(vf==NULL)
    cout<<"Stiva/Coada goala";
else
    while(vf!=NULL)
    {cout<<vf->info<<" "<<vf->nrdiv<<" | ";
    vf=vf->urm;}
    cout<<endl;
}

int primm(int n)
{int d,i,ok=1;
if(n==1 || n==0)
    return 0;
for(d=2;d<=n/2;d++)
    if(n%d==0)
        ok=0;
return ok;}

int nrdiv(int x)
{int i=0;
for(int d=1;d<=x;d++)
    if(x%d==0)
        i++;
    return i;}

void afisare_stiva(stiva* vf)
{if(vf==NULL)
    cout<<"Stiva/Coada goala";
else
    while(vf!=NULL)
    {cout<<vf->info<<" | ";
    vf=vf->urm;}
    cout<<endl;
}

int main()
{coada* prim=NULL;
stiva* vf=NULL;
coada* ultim=NULL;
int x,n,i=0;
ifstream f("date");
while(f>>x)
    adaugare_stiva(vf,x);
afisare_stiva(vf);
while(vf)
{
    if(nrdiv(vf->info)>2)
        adaugare_coada(prim,ultim,vf->info,nrdiv(vf->info));
    vf=vf->urm;   
}
afisare_coada(prim);
}

marți, 22 mai 2012 by DlMuresan
Categories: , | Leave a comment

5/18

Se citesc dintr-un fisier nr. Sa se creeze o coada cu nr prime si o stiva cu cele neprime. Sa se inlocuiasca fiecare nr din coada cu nr de cifre ale lui. Sa se stearga din stiva nr pana la intalnirea unui nr de 2 cifre. Cate nr s-au sters? Sa se concateneze elementele din coada la sfarsitul stivei. Sa ase afiseze noua stiva.

#include<iostream>
#include<fstream>
using namespace std;
struct nod{int info;
nod* urm;};

void adaugare_coada(nod* &prim,nod* &ultim,int x)
{nod* p=new nod;
p->info=x;
p->urm=NULL;
if(prim==NULL)
    prim=p;
else ultim->urm=p;
ultim=p;}

void stergere(nod* &prim)
{nod* p;
p=prim;
prim=prim->urm;
delete p;
}

void adaugare_stiva(nod* &vf, int x)
{nod* p;
p=new nod;
p->info=x;
p->urm=vf;
vf=p;}

void afisare(nod* vf)
{if(vf==NULL)
    cout<<"Stiva/Coada goala";
else
    while(vf!=NULL)
    {cout<<vf->info<<" | ";
    vf=vf->urm;}
    cout<<endl;
}

int primm(int n)
{int d,i,ok=1;
if(n==1 || n==0)
    return 0;
for(d=2;d<=n/2;d++)
    if(n%d==0)
        ok=0;
return ok;}

int nrcif(int x)
{int i=0;
while(x)
{i++;x=x/10;}
return i;}

int main()
{ifstream f("date");
nod* prim=NULL;
nod* ultim;
nod* vf=NULL;
int x;
while(f>>x)
    if(primm(x))
        adaugare_coada(prim,ultim,x);
    else adaugare_stiva(vf,x);
cout<<"Coada"<<endl;
afisare(prim);
cout<<"Stiva"<<endl;
afisare(vf);

nod*p=prim;
while(p)
{p->info=nrcif(p->info);
p=p->urm;}
cout<<"Noua coada"<<endl;
afisare(prim);
int j=0;
while(vf)
{if(nrcif(vf->info)!=2)
    {stergere(vf);j++;}
else break;
}
cout<<"Noua stiva"<<endl;
afisare(vf);
cout<<"S-au sters "<<j<<" elemente din stiva"<<endl;
cout<<"Stiva concatenata cu coad"<<endl;
while(prim)
{adaugare_stiva(vf,prim->info);
prim=prim->urm;}
afisare(vf);
}

joi, 17 mai 2012 by DlMuresan
Categories: , | Leave a comment

5/17

Din fisierul text AVIOANE.TXT se citesc: n, codurile celor n avioane, urmate de o insiruire de DA si NU (date de conditiile atmosferice).
Afisati:

a) coada initiala

b) ordinea in care decoleaza avioanele si numarul de incercari de decolare ale fiecarui avion

Obs: avioanele care decoleaza se sterg din lista.

Ex: daca AVIOANE.TXT: 3 111 222 333 DA NU NU NU DA DA DA DA

Avioanele decoleaza in ordinea: 111 o incercare(prima)

333 2 incercari

222 3 incercari

#include<iostream>
#include<fstream>
using namespace std;
struct nod{
int cod,nr;
nod* urm;};

void adaugare(nod* &prim, nod* &ultim, int cod, int nr)
{nod* p=new nod;
p->cod=cod;
p->nr=nr;
p->urm=NULL;
if(prim==NULL)
    prim=p;
else ultim->urm=p;
ultim=p;}

void stergere(nod* &prim)
{nod* p;
p=prim;
prim=prim->urm;
delete p;
}

void afisare(nod* prim)
{if(prim==NULL)
    cout<<"Coada goala";
cout<<prim->cod<<" | din a "<<prim->nr<<"-a incercare"<<endl;
}

int main()
{int n,cod,nr,i;
ifstream f("date");
nod* prim=NULL;
nod* ultim=NULL;
f>>n;
while(n)
{f>>cod;
n--;
adaugare(prim,ultim,cod,0);
}

char a[3];
while(prim)
{f>>a;
    if(strcmp(a,"DA")==0)
        {prim->nr++;
        cout<<"Decoleaza ";
        afisare(prim);
        stergere(prim);}
        else {prim->nr++;
        adaugare(prim,ultim,prim->cod,prim->nr);
        stergere(prim);}
}
      
}
Fisier
3 111 222 333 DA NU NU NU DA DA

by DlMuresan
Categories: | Leave a comment

5/16

Se citesc notele unui elev intr-o coada. Afisati ce note nu a luat. Verificati daca a luat 10 dupa 4. Calculati media, stiind ca nota de la teza e pe ultima pozitie.

#include<iostream>
#include<fstream>
using namespace std;
struct nod{int info;
nod* urm;};

void adaugare(nod* &prim, nod* &ultim, int x)
{nod* p=new nod;
p->info=x;
p->urm=NULL;
if(prim==NULL)
    prim=p;
else ultim->urm=p;
ultim=p;}

void afisare(nod* prim)
{if(prim==NULL)
    cout<<"Coada goala";
else while(prim->urm)
{cout<<prim->info<<" | ";
prim=prim->urm;}
cout<<prim->info<<" (Teza)";
cout<<endl;
}

void zece(nod* prim)
{while(prim->urm!=NULL)
    if(prim->info==4 && prim->urm->info==10)
        {cout<<"A luat 10 dupa 4";
        break;}
    else {prim=prim->urm;}
    cout<<"Nu a luat 10 dupa 4";
}

float medie(nod* prim)
{float m,s;
int i=0;
while(prim->urm)
{s=s+prim->info;
i++;
prim=prim->urm;}
s=s/i;
s=s*100;
s=(int)s;
s=(float)s/100;
s=s*3+prim->info;
s=s/4;
s=s*100;
s=(int)s;
s=(float)s/100;
return s;}

int note(int x, nod* prim)
{while(prim!=NULL)
{if(prim->info==x)
    return 1;
prim=prim->urm;}
return 0;}

int main()
{ifstream f("date");
int x,k;
nod* prim=NULL;
nod* ultim=NULL;
while(f>>x)
    adaugare(prim,ultim,x);
afisare(prim);
cout<<"Nu a luat notele: ";
for(int i=1;i<=10;i++)
    if(note(i,prim)==0)
        cout<<i<<" ";
cout<<endl;
zece(prim);
cout<<endl<<"Media: "<<medie(prim);
}
Problema 9
#include<iostream>
#include<fstream>
using namespace std;
struct nod{char cuv[10],v1[10],v2[10],v3[10];
    int corect;
nod* urm;};

void adaugare(nod* &prim, nod* &ultim, char cuv[], char v1[], char v2[], char v3[], int corect)
{nod* p=new nod;
strcpy(p->cuv,cuv);
strcpy(p->v1,v1);
strcpy(p->v2,v2);
strcpy(p->v3,v3);
p->corect=corect;
p->urm=NULL;
if(prim==NULL)
    prim=p;
else ultim->urm=p;
ultim=p;}

void stergere(nod* &prim)
{nod* p;
p=prim;
prim=prim->urm;
delete p;
}

void afisare(nod* prim)
{if(prim==NULL)
    cout<<"Coada goala";
cout<<endl<<prim->cuv<<endl;
cout<<"1. "<<prim->v1<<endl;
cout<<"2. "<<prim->v2<<endl;
cout<<"3. "<<prim->v3<<endl;
cout<<"Raspuns: ";
}

int main()
{ifstream f("date");
int x,k,punctaj;
nod* prim=NULL;
nod* ultim=NULL;
char cuv[10],v1[10],v2[10],v3[10];
int p=0,r,corect;
cout<<"Punctaj pe intrebare: ";
cin>>k;
while(f>>cuv>>v1>>v2>>v3>>corect)
    adaugare(prim,ultim,cuv,v1,v2,v3,corect);
//afisare(prim);
while(prim)
{afisare(prim);
cin>>r;
if(r==prim->corect)
    {p=p+k;
    prim=prim->urm;}
else {p--;
adaugare(prim,ultim,prim->cuv,prim->v1,prim->v2,prim->v3,prim->corect);
stergere(prim);}
}
cout<<endl<<"Punctaj: "<<p;
}
Fişier
gras
fat
fatigue
faringe
1

lingau
guilty
grasul
tudy
2

logan
logy
car
airplane
3

dolgopolov
tennis_player
tennis_master
ukraineak_blatist
2

marți, 15 mai 2012 by DlMuresan
Categories: | Leave a comment

5/15 - Coada, Totti

Adaugare, Afisare, Stergere

#include<iostream>
#include<fstream>
using namespace std;
struct nod{int info;
nod* urm;};

void adaugare(nod* &prim, nod* &ultim, int x)
{nod* p=new nod;
p->info=x;
p->urm=NULL;
if(prim==NULL)
    prim=p;
else ultim->urm=p;
ultim=p;}

void afisare(nod* prim)
{if(prim==NULL)
    cout<<"Coada goala";
else while(prim)
{cout<<prim->info<<" | ";
prim=prim->urm;}
cout<<endl;
}

void stergere(nod* &prim, int k)
{nod* p;
while(k && prim)
    {p=prim;
prim=prim->urm;
delete p;
k--;}
}

int main()
{ifstream f("date");
int x,k;
nod* prim=NULL;
nod* ultim=NULL;
cin>>k;
while(f>>x)
    adaugare(prim,ultim,x);
afisare(prim);
adaugare(prim,ultim,2);
stergere(prim,k);
afisare(prim);
}

luni, 14 mai 2012 by DlMuresan
Categories: | Leave a comment

5/11

Se citesc dintr-un fisier text nr care se pun intr-o stiva. Cate cifre sunt in toate nr din stiva? Sa se construiasca o stiva cu nr prime. Sa se stearga elementele din stiva pana la prima aparitie a maximului. Sa se inverseze stiva.

#include<iostream>
#include<fstream>
using namespace std;
struct nod{
    int info;
    nod* urm;};
  
void afisare(nod* vf)
{if(vf==NULL)
    cout<<"Stiva goala";
else
    while(vf!=NULL)
    {cout<<vf->info<<" ";
    vf=vf->urm;}
}

void adaugare(nod* &vf, int x)
{nod* p;
p=new nod;
p->info=x;
p->urm=vf;
vf=p;}

int nrcif(int x)
{int i=0;
while(x)
{i++;x=x/10;}
return i;}

int prim(int n)
{int d,i,ok=1;
if(n==1 || n==0)
    return 0;
for(d=2;d<=n/2;d++)
    if(n%d==0)
        ok=0;
return ok;}

int main()
{ifstream f("date");
int x,s=0,m=0,mm=0;
nod* vf=NULL,*vf1=NULL,*p;
while(f>>x)
    adaugare(vf,x);
nod* pp=vf;
afisare(vf);
cout<<endl;
vf=pp;
while(vf!=NULL)
    {s=s+nrcif(vf->info);
    if(prim(vf->info))
        adaugare(vf1,vf->info);
    if(vf->info>m)
        m=vf->info;
    vf=vf->urm;}
cout<<s<<" cifre in stiva"<<endl;
afisare(vf1);
cout<<endl;
while(vf1!=NULL)
{    if(vf1->info>mm)
        mm=vf1->info;
    vf1=vf1->urm;}
int ok=1;

vf=pp;
while(vf!=NULL)
{if(vf->urm->info==m)
{    p=vf;
    vf=vf->urm;
    delete p;
    ok=0;}
if(ok==0)
    break;
vf=vf->urm;}

afisare(vf);
cout<<endl;
while(vf1!=NULL)
{if(vf1->info!=mm)
{    p=vf;
    vf1=vf1->urm;
    delete p;}
vf1=vf1->urm;}
afisare(vf1);
cout<<endl<<endl;
}

duminică, 13 mai 2012 by DlMuresan
Categories: | Leave a comment

5/10

Se citesc numere dintr-un fisier text. Scrieti o functie care verifica daca elementul din varful stivei mai apare in stiva. Afisati numarul de elemente pare din stiva. Stergeti elemente din stiva pana la intalnirea unui nr de 3 cifre (care nu se sterge).

#include<iostream>
#include<fstream>
using namespace std;
struct nod{
    int info;
    nod* urm;};
   
void afisare(nod* vf)
{if(vf==NULL)
    cout<<"Stiva goala";
else
    while(vf!=NULL)
    {cout<<vf->info<<" ";
    vf=vf->urm;}
}

void adaugare(nod* &vf, int x)
{nod* p;
p=new nod;
p->info=x;
p->urm=vf;
vf=p;}

void verif_vf(nod* vf)
{int x=vf->info,ok=0;
while(vf->urm!=NULL)
{if(vf->urm->info==x)
    ok=1;
vf=vf->urm;}
if(ok==1)
    cout<<x<<" (varful) mai apare in stiva";
else cout<<x<<" (varful) nu mai apare in stiva";
}

int nrpare(nod* vf)
{int i=0;
while(vf!=NULL)
{if(vf->info%2==0)
    i++;
vf=vf->urm;
}
return i;
}

void stergere(nod* &vf)
{nod* p;
while(vf->info>999 || vf->info<100)
{p=vf;
vf=vf->urm;
delete p;}
}

int main()
{nod* vf=NULL;
ifstream f("date");
int x;
while(f>>x)
    adaugare(vf,x);
afisare(vf);
cout<<endl;
verif_vf(vf);
cout<<endl;
cout<<nrpare(vf)<<" nr pare"<<endl;
stergere(vf);
afisare(vf);
}
Sa se inverseze o stiva.  //  NON-FINISHATA
#include<iostream>
#include<fstream>
using namespace std;
struct nod{
    int info;
    nod* urm;};
   
void afisare(nod* vf)
{if(vf==NULL)
    cout<<"Stiva goala";
else
    while(vf!=NULL)
    {cout<<vf->info<<" ";
    vf=vf->urm;}
}

void adaugare(nod* &vf, int x)
{nod* p;
p=new nod;
p->info=x;
p->urm=vf;
vf=p;}

void verif_vf(nod* vf)
{int x=vf->info,ok=0;
while(vf->urm!=NULL)
{if(vf->urm->info==x)
    ok=1;
vf=vf->urm;}
if(ok==1)
    cout<<x<<" (varful) mai apare in stiva";
else cout<<x<<" (varful) nu mai apare in stiva";
}

int nrpare(nod* vf)
{int i=0;
while(vf!=NULL)
{if(vf->info%2==0)
    i++;
vf=vf->urm;
}
return i;
}

void STADT_C(nod* &vf)
{nod* p;
while(vf->info>999 || vf->info<100)
{p=vf;
vf=vf->urm;
delete p;}
}

int main()
{nod* vf=NULL;
ifstream f("date");
int x;
while(f>>x)
    adaugare(vf,x);
afisare(vf);
cout<<endl;

int nr=0,i=1,j;
while(vf!=NULL)
{nr++;
vf=vf->urm;}
nod* p=vf;

while(i<nr/2 && vf!=NULL)
{j=1;
p=vf;
    while(j<nr-i)
        {p=p->urm;
        j++;}
    vf->urm=p->urm;
    vf->info=p->info;
    i++;
}
afisare(p);
}

joi, 10 mai 2012 by DlMuresan
Categories: | Leave a comment

5/9

Se citesc nr dintr-un fisier. Sa se creeze doua stive, una cu nr pare, alta cu nr impare. Sa se afiseze stivele. Sa se afiseze nr de elemente din fiecare stiva. Sa se adauge stiva elementelor pare la sfarsitul stivei celor impare.

#include<iostream>
#include<fstream>
using namespace std;
struct nod{
    int info;
    nod *urm;};
  
void afisare(nod* vf)
{if(vf==NULL)
    cout<<"Stiva goala";
while(vf!=NULL){
    cout<<vf->info<<" ";
    vf=vf->urm;}
}

int nr_el(nod* vf)
{int i=0;
while(vf!=NULL)
{i++;
vf=vf->urm;}
return i;
}

void concat(nod* vf1, nod* vf2)
{nod*p=vf1;
    while(p->urm != NULL)
        p=p->urm;
    p->urm=vf2;
}

void adaug(int x, nod* &vf)
{nod* p;
p=new nod;
p->info=x;
p->urm=vf;
vf=p;}

int main()
{nod *par=NULL,*impar=NULL;
ifstream f("date");
int x;
while(f>>x)
    if(x%2==0)
        adaug(x,par);
    else adaug(x,impar);
  
afisare(par);
cout<<endl<<nr_el(par)<<" elemente";
cout<<endl<<endl;
afisare(impar);
cout<<endl<<nr_el(impar)<<" elemente";
cout<<endl<<endl;
concat(impar,par);
afisare(impar);
}
2 copii dau cu zarul. Aruncarile fiecaruia se memoreaza in cate o stiva. Fiecare da cu zarul pana arunca 6. Cel care are mai multe puncte castiga. Afisati:
a) stiva fiecaruia

b) numarul de aruncari ale fiecaruia

c) castigatorul si punctele lui

#include<iostream>
#include<fstream>
using namespace std;
struct nod{
    int info;
    nod *urm;};
   
void afisare(nod* vf)
{if(vf==NULL)
    cout<<"Stiva goala";
while(vf!=NULL){
    cout<<vf->info<<" ";
    vf=vf->urm;}
}

int suma(nod* vf)
{int i=0;
while(vf!=NULL)
{i+=vf->info;
vf=vf->urm;}
return i;
}

void adaug(int x, nod* &vf)
{nod* p;
p=new nod;
p->info=x;
p->urm=vf;
vf=p;}

int main()
{nod *vf1=NULL,*vf2=NULL;
ifstream f("date");
int x;
f>>x;
while(x!=6)
{    adaug(x,vf1);
f>>x;}
f>>x;
while(x!=6)
{adaug(x,vf2);
f>>x;}
   
afisare(vf1);
cout<<endl<<suma(vf1)<<" puncte";
cout<<endl<<endl;
afisare(vf2);
cout<<endl<<suma(vf2)<<" puncte";
cout<<endl<<endl;
if(suma(vf1)>suma(vf2))
    cout<<"Copilul 1 cu "<<suma(vf1);
else if(suma(vf2)>suma(vf1))
    cout<<"Copilul 2 cu "<<suma(vf2);
else cout<<"=";
}

marți, 8 mai 2012 by DlMuresan
Categories: | Leave a comment

5/7

Scrieti o functie care concateneaza doua stive in prima stiva. (adresele varfurilor vor fi param. in functie)

#include<iostream>
#include<fstream>
using namespace std;
struct nod{
    int info;
    nod *urm;};
   
void afisare(nod* vf)
{while(vf!=NULL){
    cout<<vf->info<<" ";
    vf=vf->urm;}
}

void adaug(int x, nod* &vf)
{nod* p;
p=new nod;
p->info=x;
p->urm=vf;
vf=p;}

void creare(nod* &vf, char n[])
{ifstream f(n);
int x;
while(f>>x)
    adaug(x,vf);
}

void concat(nod* vf1, nod* vf2)
{nod*p=vf1;
    while(p->urm != NULL)
        p=p->urm;
    p->urm=vf2;
}

int main()
{nod *vf1=NULL,*vf2=NULL,*p;
creare (vf1,"date");
creare (vf2,"date2");
afisare(vf1);
cout<<endl;
afisare(vf2);
cout<<endl;
concat(vf1,vf2);
cout<<endl;
afisare(vf1);
}

Un fisier text contine mai multe linii de forma: POP x sau PUSH y, reprezentand operatii care trebuie executate asupra unei stive:
POP x => se scot din stiva x numere

PUSH y => se pune in stiva numarul y.

Sa se creeze o stiva asupra careia sa se efectueze toate operatiile specificate.

Sa se verifice daca la sfarsit stiva ramane vida. Obs. Daca nu se poate efectua operatia POP, programul se termina si se afiseaza EROARE.

#include<iostream>
#include<fstream>
using namespace std;
struct nod{
    int info;
    nod *urm;};

void adaug(int x, nod* &vf)
{nod* p;
p=new nod;
p->info=x;
p->urm=vf;
vf=p;}

void afisare(nod* vf)
{if(vf==NULL)
    cout<<"Stiva vida";
while(vf!=NULL){
    cout<<vf->info<<" ";
    vf=vf->urm;}
}

void POP(int x, nod* &vf)
{int i=0;
nod*p;
while(i<x)
{p=vf;
vf=vf->urm;
i++;
delete p;}
}

int main()
{nod *vf=NULL,*p,*vf2=NULL;
int x,i=0,nr=0;
char s[100];
ifstream f("date");
while(f>>s>>x)
    {if(strcmp(s,"POP")==0)
        if(x>=nr)
            {cout<<"EROARE";return 0;}
        else POP(x,vf);
    else
        if(strcmp(s,"PUSH")==0)
            adaug(x,vf);nr++;
    }
afisare(vf);
}
Fisier
PUSH 1
PUSH 1
PUSH 1
PUSH 1
PUSH 1
POP 1
PUSH 6
POP 3
PUSH 1
POP 3
Se citesc dintr-un fisier text linii de forma: elev clasa numar_absente
a) Creati 4 stive cu elevii si absentele lor, pentru fiecare nivel. (9,10,11,12)

b) Afisati numarul de absente pe nivele

c) Afisati numarul de elevi de pe fiecare nivel

Obs: clasa poate fi: 9A,9B, …12D

#include<iostream>
#include<fstream>
using namespace std;
struct nod{
    char n[20],c[4];
    int na;
    nod *urm;};

void adaug(char n[], char c[], int na, nod* &vf)
{nod* p;
p=new nod;
strcpy(p->n,n);
strcpy(p->c,c);
p->na=na;
p->urm=vf;
vf=p;}

void afisare(nod* vf)
{if(vf==NULL)
    cout<<"Stiva vida";
while(vf!=NULL){
    cout<<vf->n<<" "<<vf->c<<" "<<vf->na<<" ";
    vf=vf->urm;
cout<<endl;}
}

int nr_abs(nod* vf)
{int i=0;
    while(vf!=NULL)
{i+=vf->na;
    vf=vf->urm;}
return i;
}

int nr_el(nod* vf)
{int i=0;
while(vf!=NULL)
{i++;
vf=vf->urm;}
return i;
}

int main()
{nod *vf=NULL,*p,*vf2=NULL;
int na;
char n[20],pr[20],c[4];
nod *vf9=NULL,*vf10=NULL,*vf11=NULL,*vf12=NULL;
ifstream f("date");
while(f>>n)
{f>>c>>na;
if(strncmp(c,"9",1)==0)
    adaug(n,c,na,vf9);
else if(strncmp(c,"10",2)==0)
    adaug(n,c,na,vf10);
else if(strncmp(c,"11",2)==0)
    adaug(n,c,na,vf11);
else if(strncmp(c,"11",2)==0)
    adaug(n,c,na,vf12);
}
cout<<"Clasa 9"<<endl;
afisare(vf9);
cout<<nr_abs(vf9)<<" absente"<<endl;
cout<<nr_el(vf9)<<" elevi"<<endl;
cout<<endl;
cout<<"Clasa 10"<<endl;
afisare(vf10);
cout<<nr_abs(vf10)<<" absente"<<endl;
cout<<nr_el(vf10)<<" elevi"<<endl;
cout<<endl;
cout<<"Clasa 11"<<endl;
afisare(vf11);
cout<<nr_abs(vf11)<<" absente"<<endl;
cout<<nr_el(vf11)<<" elevi"<<endl;
cout<<endl;
cout<<"Clasa 12"<<endl;
afisare(vf12);
cout<<nr_abs(vf12)<<" absente"<<endl;
cout<<nr_el(vf12)<<" elevi"<<endl;
cout<<endl;
}

duminică, 6 mai 2012 by DlMuresan
Categories: | Leave a comment

5/4

Sa se verifice daca 2 stive sunt identice. Stivele se creeaza introducand numere pana la 0, in fiecare.

#include<iostream>
using namespace std;
struct nod{
    int info;
    nod *urm;};

void adaug(int x, nod* &vf)
{nod* p;
p=new nod;
p->info=x;
p->urm=vf;
vf=p;}

void afisare(nod* vf)
{while(vf!=NULL){
    cout<<vf->info<<" ";
    vf=vf->urm;}
}

int main()
{nod *vf1=NULL,*p,*vf2=NULL;
int x,s=0,i=0;

cin>>x;
while(x)
{adaug(x,vf1);
cin>>x;}
cin>>x;
while(x)
{adaug(x,vf2);
cin>>x;}

while(vf1!=NULL){
    if(vf1->info != vf2->info)
    {cout<<"NU"; return 0;}
    else
    vf1=vf1->urm;
    vf2=vf2->urm;}
cout<<"DA";
}

joi, 3 mai 2012 by DlMuresan
Categories: | Leave a comment

5/3

Se citesc numere din fişier într-o stivă. Să se afişeze stiva. Să se împartă stiva în două stive cu nr. egal de elemente. Dacă e nr. impar, să se şteargă elementul din mijloc.

#include<iostream>
#include<fstream>
using namespace std;
struct nod{
    int info;
    nod *urm;};

void adaug(int x, nod* &vf)
{nod* p;
p=new nod;
p->info=x;
p->urm=vf;
vf=p;}

void afisare(nod* vf)
{while(vf!=NULL){
    cout<<vf->info<<" ";
    vf=vf->urm;}
}

void separare(nod* vf, nod* &vf1)
{nod*p=vf;
int nr=0;
while(p)
{nr++;
p=p->urm;}
if(nr%2==0)
{p=vf;
for(int i=1;i<nr/2;i++)
    p=p->urm;
vf1=p->urm;
p->urm=NULL;}
else {p=vf;
for(int i=1;i<nr/2;i++)
    p=p->urm;
vf1=p->urm->urm;
nod*q=p->urm;
delete q;
p->urm=NULL;}
}

int main()
{nod *q,*vf=NULL,*p,*vf1;
int x,s=0,i=0;
ifstream f("date");
while(f>>x)
    adaug(x,vf);
//afisare(vf);

separare(vf,vf1);
afisare(vf);
cout<<endl;
afisare(vf1);
}

by DlMuresan
Categories: | Leave a comment

5/2 - Problema alocarea dinamica a memoriei

Doua variabile dinamice memoreaza DOB a doua persoane. Sa se afiseze persoana mai tanara.

#include<iostream>
using namespace std;
struct DOB{
    int a,l,z;
};

int main()
{DOB *p,*q;
p=new DOB;
q=new DOB;
cin>>(*p).a>>p->l>>p->z;
cin>>q->a>>q->l>>q->z;
if(p->a>q->a)
    cout<<"a doua persoana";
else if(p->a<q->a)
    cout<<"a doua persoana";
else if(p->l>q->l)
    cout<<"a doua persoana";
else if(p->l<q->l)
    cout<<"a doua persoana";
else if(p->z>q->z)
    cout<<"a doua persoana";
else if(p->z<q->z)
    cout<<"a doua persoana";
else cout<<"=";
delete p,q;
}
Se citesc nr de la tastatura pana la 0. Sa se creeze o stiva cu nr. Sa se afiseze stiva. Sa se afiseze suma el. Sa se afisee nr de el ale stivei. Sa se afiseze primele doua el din stiva. Sa se stearga stiva.
#include<iostream>
using namespace std;
struct nod{
    int info;
    nod *urm;};

void adaug(int x, nod* &vf)
{nod* p;
p=new nod;
p->info=x;
p->urm=vf;
vf=p;}

void afisare(nod* vf)
{while(vf!=NULL){
    cout<<vf->info<<" ";
    vf=vf->urm;}
}

int main()
{nod *vf=NULL,*p;
int x,s=0,i=0;
cin>>x;
while(x)
{adaug(x,vf);
cin>>x;}
afisare(vf);
p=vf;
while(vf!=NULL){
    s+=vf->info;
    vf=vf->urm;}
cout<<endl<<"Suma "<<s<<endl;
vf=p;
while(vf!=NULL){
    i++;
    vf=vf->urm;}
cout<<i<<" elemente in stiva"<<endl;
vf=p;
cout<<"Primele doua elemente din stiva ";
while(vf!=NULL){
    i--;
    if(i==1 || i==0)
        cout<<vf->info<<" ";
    vf=vf->urm;}
vf=p;
while(vf!=NULL)
{p=vf;
delete p;
vf=vf->urm;}
}

marți, 1 mai 2012 by DlMuresan
Categories: , , | Leave a comment

Pariu Sigur pe ziua de 3 Aprilie! Nu rataţi şansa unei cote sigure

Se joacă cu 330 de lei pentru a evita plata impozitului în cazul unui câştig >600 lei! Practic, pontul "înscrie Marseille" este sigur în proporţie de 95%. Cota este imensă!!!

luni, 2 aprilie 2012 by DlMuresan
Categories: | Leave a comment

03/26 - Teza, totti!

#include<iostream>
#include<fstream>
#include<iomanip>
using namespace std;
int a[100][100],n,m,c[100],viz[100],x,y;

void citire()
{ifstream f("date");
int xx,yy;
f>>n>>m;
for(int i=1;i<=m;i++)
    {f>>xx>>yy;
    a[xx][yy]=1;}
f>>x>>y;
}

void DF(int x, int &k)
{int i;
c[k]=x;
k++;
for(i=1;i<=n;i++)
    if(a[x][i]!=0 && viz[i]==0)
    {viz[i]=1;
    DF(i,k);}
}

int main()
{int i,j,k,p=1;
citire();
cout<<"a) Nodurile pentru care gradul exterior este mai mare decat gradul interior"<<endl;
for(i=1;i<=n;i++)
    for(j=1;j<=n;j++)
        a[i][n+1]+=a[i][j];
   
for(j=1;j<=n;j++)
    for(i=1;i<=n;i++)
        a[n+1][j]+=a[i][j];
   
/*for(i=1;i<=n+1;i++)
{    for(j=1;j<=n+1;j++)
        cout<<setw(3)<<a[i][j];
    cout<<endl;}*/
   
for(i=1;i<=n;i++)
    if(a[n+1][i]<a[i][n+1])
        cout<<i<<" ";
    cout<<endl<<endl;
for(k=1;k<=n;k++)
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            if(a[i][k] && a[k][j])
                a[i][j]=1;
/*for(i=1;i<=n;i++)
{    for(j=1;j<=n;j++)
        cout<<setw(3)<<a[i][j];
    cout<<endl;}*/
if(a[x][y] && a[y][x])
    cout<<"b) "<<x<<" si "<<y<<" fac parte din aceeasi componenta tare conexa";
else cout<<"b) "<<x<<" si "<<y<<" NU fac parte din aceeasi componenta tare conexa";
DF(x,p);
cout<<endl<<endl<<"c) Ultimul nod vizitat in adancime pornind din "<<x<<" este "<<c[p-1];
}
Fisier
5 8
1 3
1 4
1 5
2 1
3 2
2 4
4 5
5 4
4 2

duminică, 25 martie 2012 by DlMuresan
Categories: , , | Leave a comment

03/26 - Algoritmul lui Dijkstra

Algo.

#include <iostream>
#include <fstream>
using namespace std;
int a[20][20],d[20],viz[20],n,m,start;
void citire ()
{
    int i,x,y,c;
    ifstream fin ("graf.in");
    fin>>n>>m>>start;
    for (i=1;i<=m;i++){
        fin>>x>>y>>c;
        a[x][y]=c;
    }
}
void drum_minim ()
{
    int i,j,minim,nodminim;
    viz[start]=1;
    for (i=1;i<=n;i++){
        if (a[start][i]) d[i]=a[start][i];
        else d[i]=99999;
    }
    d[start]=0;
    for (i=1;i<=n;i++){
        minim=99999;
        for (j=1;j<=n;j++){
            if (!viz[j] && d[j]<minim){
                minim=d[j];
                nodminim=j;
            }
        }
        viz[nodminim]=1;
        for (j=1;j<=n;j++){
            if (a[nodminim][j] && d[j]>minim+a[nodminim][j])
                d[j]=minim+a[nodminim][j];
        }
    }
}
int main ()
{
    int i;
    citire ();
    drum_minim ();
    for (i=1;i<=n;i++){
        cout<<"Distanta minima dintre "<<start<<" si "<<i;
        cout<<" este "<<d[i]<<'\n';
       
    }
    return 0;
}
Fişier
8 13 2
1 2 1
1 3 10
2 3 6
2 4 1
4 3 3
4 6 5
4 5 1
5 3 1
3 8 10
6 5 2
6 7 3
7 8 1
5 8 25

by DlMuresan
Categories: , , | Leave a comment

03/23 - Pt Teza

Se dă un graf orientat. Se cunosc costurile arcelor. Se citesc 3 noduri x,y,z. Afişaţi gradul interior şi exterior al fiecăruia. Se face o parcurgere în adâncime din nodul x. Care e al 3-lea nod vizitat? Să se verifice dacă se poate ajunge din x în z şi din y în z. Din care se poate ajunge pe un drum mai scurt? x,y,z fac parte din aceeaşi componentă conexă? Din câte noduri se poate ajunge în nodul y?

#include<iostream>
#include<fstream>
#include<iomanip>
using namespace std;
int a[100][100],n,m,x,y,z;
int c[100],viz[100]={0},t[100][100],v[100],jj=1,c1[100],u;

void citire()
{int xx,yy,zz,i;
ifstream f("date");
f>>n>>m;
for(i=1;i<=m;i++)
{f>>xx>>yy>>zz;
a[xx][yy]=zz;}
f>>x>>y>>z;}

void DF(int x)
{
c1[jj]=x;
jj++;
v[x]=1;
for(int i=1;i<=n;i++)
    if(a[x][i]>0 && v[i]==0)
        DF(i);
}

void afisare()
{int i,j;
for(i=1;i<=n;i++){
    for(j=1;j<=n;j++)
        if(a[i][j]!=999)
        cout<<setw(4)<<a[i][j];
       
    cout<<endl;}
cout<<endl;
}

void roy()
{int k,i,j;
for(i=1;i<=n;i++)
    for(j=1;j<=n;j++)
        if(a[i][j]==0)
            a[i][j]=999;

for(k=1;k<=n;k++){
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            if(a[i][j]>a[i][k]+a[k][j])
                a[i][j]=a[i][k]+a[k][j];
}
for(i=1;i<=n;i++)
    for(j=1;j<=n;j++)
        if(a[i][j]==999)
            a[i][j]=0;
}

int main()
{int s,i,j;
citire();
for(i=1;i<=n;i++)
    {cout<<"d+("<<i<<")=";s=0;
    for(j=1;j<=n;j++)
        if(a[i][j]>0)
            s++;
        cout<<s<<endl;
    }
    cout<<endl;
for(j=1;j<=n;j++)
    {cout<<"d-("<<j<<")=";s=0;
    for(i=1;i<=n;i++)
        if(a[i][j]>0)
            s++;
        cout<<s<<endl;
    }
    cout<<endl;
    cout<<"Parcurgere in adancime din "<<x<<". Al 3-lea nod vizitat este ";
    DF(x);
    cout<<c1[3]<<endl<<endl;
    afisare();
    roy();
    afisare();
    if(a[x][z]>0 && a[y][z]>0)
        if(a[x][z]<a[y][z])
            cout<<"Drum mai scurt din "<<x<<" in "<<z<<endl;
        else cout<<"Drum mai scurt din "<<y<<" in "<<z<<endl;
    else {if(a[x][z]>0)
        cout<<"Se poate ajunge din "<<x<<" in "<<z<<endl;
    if(a[y][z]>0)
        cout<<"Se poate ajunge din "<<x<<" in "<<z<<endl;}
    if(a[x][y] && a[x][z] && a[y][z] && a[y][x] && a[z][x] && a[z][y])
        cout<<x<<", "<<y<<", "<<z<<" fac parte din aceeasi comp tare conexa"<<endl;
    else cout<<x<<", "<<y<<", "<<z<<" NU fac parte din aceeasi comp tare conexa"<<endl;
    cout<<"In nodul "<<y<<" se poate ajunge din nodurile: ";
    for(i=1;i<=n;i++)
        if(a[i][y]>0 && i!=y)
            cout<<i<<" ";
   
}
Fisier
5 7
1 3 8
1 5 2
2 1 5
3 4 1
4 3 3
5 1 6
5 2 4
1 2 4

joi, 22 martie 2012 by DlMuresan
Categories: , | Leave a comment

03/22 - Parcurgeri in adancime/latime grafuri orientate

Sa se verifice daca parcurgerea in adancime coincide cu parcurgerea in latime pentru un graf orientat.

#include<iostream>
#include<fstream>
using namespace std;
int n,a[100][100],m,c[100],viz[100]={0},xx,yy,t[100][100],kk,v[100],jj=1,c1[100],u;
void citire()
{ifstream f("date");
f>>n>>m;
int x,y;
for(int i=1;i<=m;i++)
{f>>x>>y;
a[x][y]=1;}
f>>xx;
}

void DF(int x)
{cout<<x<<" ";
c1[jj]=x;jj++;
v[x]=1;
for(int i=1;i<=n;i++)
    if(a[x][i]==1 && v[i]==0)
        DF(i);
}

void BF(int x)
{int i,p,v,ii=1,jj=1;
c[1]=x;
viz[x]=1;
p=u=1;
while(p<=u)
{v=c[p];p++;jj=1;
for(i=1;i<=n;i++)
    if(a[v][i]==1 && viz[i]==0)
    {u++;
    c[u]=i;
    viz[i]=1;}
}
for(i=1;i<=u;i++)
    cout<<c[i]<<" ";
}

int main()
{int i,ok=0;
citire();
cout<<"Parcurgere in adancime"<<endl;
DF(xx);
cout<<endl<<"Parcurgere in latime"<<endl;
BF(xx);
for(i=1;i<=u;i++)
    if(c[i]!=c1[i])
        {cout<<endl<<"NU";ok=1;break;}
if(ok==0)
    cout<<endl<<"DA";
if(ok==1)
{cout<<endl<<"Noduri cu parcurgere identica"<<endl;
    for(i=1;i<=u;i++)
        if(c[i]==c1[i])
            cout<<c[i]<<" ";}
}
Fisier
4 4
1 2
1 3
1 4
2 4
1

by DlMuresan
Categories: , , | Leave a comment