joi, 30 decembrie 2010

marți, 30 noiembrie 2010

miercuri, 3 noiembrie 2010

Cantinele din Cluj Napoca


View Cantine Cluj-Napoca in a larger map
Doresc sa dezvolt aceasta harta astfel incat sa includa posibilitati de cautare, filtrare a rezultatelor, posibilitatea folosirii tehnologiilor mobile. Gasiti aici ceea ce am lucrat pana acum. Am folosit Google Maps API V3, geolocalizare, geocodare, JavaScript, Google Fussion Table, DOM, CSS, HTML.
Cei interesati sunt rugati sa trimita un mail la
cantineCluj@gmail.com
cu subiectul "In legatura cu Gastronomix API".

joi, 20 mai 2010

Linux Thread app


/*Se presupune că într-un fişier text numbers.in, pe fiecare linie se găsesc
două numere întregi. Să se scrie programul C, care citeşte, pe rând, toate
liniile din fişier şi pentru fiecare linie citită creează un nou thread, căruia îi
transmite ca parametri (în cadrul unei structuri) cele două numere aflate pe
linia respectivă. Fiecare thread va prelua cei doi parametri, va face media
lor aritmetică, va scrie în fişierul result_threads.out, pe o linie, cele trei
numere şi identificatorul propriu de thread şi, în plus, numărul ce reprezintă
media aritmetică îl va transmite ca parametru funcţiei pthread_exit. După
terminarea citirii fişierului numbers.in, thread-ul main va prelua toate
rezultatele transmise de thread-urile create şi le va scrie în fişierul
results_main.out, fiecare rezultat alături de identificatorul thread-ului care
l-a produs. Să se compare, apoi conţinutul celor două fişiere.
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
#include <pthread.h>


void *print_message_function( void *ptr );
typedef struct inregistrare{
int a;
int b;
}INREGISTRARE;

INREGISTRARE *aux;
//*aux=(INREGISTRARE *)malloc(sizeof(INREGISTRARE));
FILE * pOut;

int *resultat;

main()
{
FILE * pFile,*file2;
int n = 0,a,b,iret;
pthread_t thread;
pFile = fopen ("numbers.in","r");
pOut = fopen ("result_threads.out","w");
file2 = fopen ("result_main.out","w");

if (pFile==NULL) perror ("Error opening file");
else
{
while (!feof(pFile)) {
fscanf (pFile,"%d",&a);
fscanf (pFile,"%d",&b);
//printf("Perechea[%d]: %d - %d\n",n,a,b);
n++;
aux=(INREGISTRARE *)malloc(sizeof(INREGISTRARE));
aux->a=a;
aux->b=b;
//printf("Perechea: %d - %d\n",aux->a,aux->b);
iret = pthread_create( &thread, NULL, print_message_function, (void*) aux);
pthread_join(thread,&aux);
printf("\nRez intors de fct: %d %d\n",aux->a,aux->b);
fprintf(file2,"media: %-3d ID: %d\n",aux->a,aux->b);
}
}


exit(0);
}

void *print_message_function( void *ptr )
{
int media;
INREGISTRARE *message;
message = (INREGISTRARE *) ptr;
printf("Perechea: %d - %d\n",message->a,message->b);
media=(message->a+message->b)/2;
fprintf(pOut,"a: %-3d b:%-3d media:%-3d ID:%d\n",message->a,message->b,media,pthread_self());
aux->a=media;javascript:void(0)
aux->b=pthread_self();
pthread_exit((void *)aux);
}

marți, 6 aprilie 2010

Java Reflection

Clasa de test Clasa


public class Clasa {
private int a;
Clasa(int val){
a=val;
}
Clasa(){
a=100;
}
public int getA(){
return a;
}
public void setA(int val){
a=val;
}
public void setA(int[] val){
a=val[0]+val[1];
}
public void setA(int a,int b){
this.a=a+b;
}
public void setA(String[] ab){
a=Integer.parseInt(ab[0])+Integer.parseInt(ab[1]);
}
}


Clasa Reflectie

import java.lang.reflect.Method;


public class Reflectie {
public int incrementProperty(String name, Object obj) throws Exception{
String prop = Character.toUpperCase(name.charAt(0)) +
name.substring(1);
String mname = "get" + prop;
//apel get
Class[] types = new Class[] {};
Method method = obj.getClass().getMethod(mname, types);
Object result = method.invoke(obj, new Object[0]);
int value = ((Integer)result).intValue() + 1;

//... si mult mai interesantul apel de set
mname = "set" + prop;
int[] p=new int[2];
p[0]=12;
p[1]=21;
int abc=12;
types = new Class[] { int.class};
method = obj.getClass().getMethod(mname, types);
method.invoke(obj,abc);
return value;
}
}


Clasa Main


public class Main {
public static void main(String[] args) throws Exception{
Clasa clasa=new Clasa((int)(Math.random()*100));
Reflectie ref=new Reflectie();
System.out.println("Inainte de reflexie: "+clasa.getA());
ref.incrementProperty("a", clasa);
System.out.println("Dupa reflexie: "+clasa.getA());

}
}


Reflectia: IBM, Java Sun, Java2S
Tehnica utila in cazul inspectarii si modificarii unui obiect in timp real, in runtime.
Prin folosirea: types = new Class[] { int.class}; se specifica ce metoda ar trebui cautata, apoi se obtine metoda method = obj.getClass().getMethod(mname, types); si in final se va apela method.invoke(obj,abc);

luni, 15 februarie 2010

Java: Serializare

//Clasa care urmeaza a fi serializata

import java.util.*;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.io.*;

public class ClasaSpreSerializare implements Serializable{
private int campPrivat;
protected int campProtejat;
public int campPublic;
private static int campStatic;
protected transient int campTransient;
public ClasaSpreSerializare(){}
public ClasaSpreSerializare(int x,int y,int z, int a, int b){
campPrivat=x;
campProtejat=y;
campPublic=z;
campStatic=a;
campTransient=b;
}
public String toString(){
return "campPrivat: "+campPrivat+" campProtejat: "+campProtejat+" campPublic: "+campPublic+" campStatic: "+campStatic+" campTransient: "+campTransient;
}
public void writeObject(ObjectOutputStream obj)throws Exception{
obj.writeInt(campProtejat);
}
public void readObject(ObjectInputStream obj2)throws Exception{
campTransient=obj2.readInt();
}
}


//Clasa de test

import java.util.*;
import java.io.*;

public class TestClasa {
public static void main(String[] args){
ClasaSpreSerializare test1=new ClasaSpreSerializare(1,2,3,4,5);
System.out.println("Continutul obiectului inainte de serializare: "+test1.toString());

try{
ObjectOutputStream obj=new ObjectOutputStream(new FileOutputStream("fis.txt"));
obj.writeObject(test1);
test1.writeObject(obj);
obj.close();
}catch(Exception ex){
System.out.println("Eroare la scriere!!!");
}

try{
ObjectInputStream obj=new ObjectInputStream(new FileInputStream("fis.txt"));
ClasaSpreSerializare test2=(ClasaSpreSerializare)obj.readObject();
test2.readObject(obj);
System.out.println("Obiectul dupa deserializare: "+test2.toString());
}catch(Exception ex){
System.out.println("Eroare la citire");
}
}
}


/**Metode de serializare:
1. Extinderea unei clasa serializabile
2. Implementare Serializable
3. Metode de serializare obisnuite(vezi writeObject(ObjectOutputStream obj) din exemplu; (se poate folosi pt transmiterea unor campuri, de ex transient)
4. Implementare Externalizable(tot o interfata marker), asemanator cu metoda descrisa mai sus la 3., folosesc flux pe Object
5. Declarare interfata si metode aferente(cel mai general), metodele folosesc fluxuri DataOutputStream
Vezi: Java de la 0 la expert
*/

Java: Problema producator - consumator

//Clasa Producator


public class Producator extends Thread {
private Produs copieProdus;
public Producator(Produs produs){ //constructor
copieProdus=produs;
}
public void run(){
for(int i=0;i<10;i++){ //incearca sa "creeeze" 10 produse
copieProdus.set(i);
try{
sleep(500);
}
catch(Exception ex){
System.out.println("Exceptie producator");
}
}
}
}

//Clasa Consumator


public class Consumator extends Thread{
private Produs copieProdus;
public Consumator(Produs produs){
copieProdus=produs;
}
public void run(){
for(int i=0;i<10;i++){
copieProdus.get(); //incearca sa "consume" 10 produse
try{
sleep(500);
}
catch(Exception ex){
System.out.println("Exceptie Consumator");
}
}
}
}


//Clasa produs


public class Produs {
private boolean available=false;
private int container=-1;
public synchronized void set(int valoare){
while(available==true){
try{
wait(5000); //blocheaza firul solicitant daca avem deja creat un obiect
//Thread.sleep(50);
}
catch(Exception ex){
System.out.println("Eroare set");
}
}
available=true;//pentru ca, consumatorul sa poata consuma
container=valoare;
System.out.println("Setare produs: "+container);
notifyAll();//deblocheaza toate firele, in cazul de fata ofera o sansa consumatorului
}
public synchronized int get(){
while(available==false){
try{
wait(5000);//blocheaza firul solicitant daca nu avem creat un obiect
//Thread.sleep(50);
}
catch(Exception ex){
System.out.println("Eroare get");
}
}
available=false;//pentru ca, producatorul sa poata sa produca
System.out.println("Consumare produs: "+container);
notifyAll();//deblocheaza toate firele, in cazul de fata ofera o sansa producatorului
return container;
}
}

//Clasa Main


public class Main {
public static void main(String[] args){
Produs produs=new Produs();
Consumator consumator=new Consumator(produs);
Producator producator=new Producator(produs);
producator.start();
consumator.start();
}
}



/**Modul de functionare:
* In clasa Main se face o instanta a Produsului, si este trimisa ca si parametru Consumatorului si Producatorului. Se pornesc metodele start ale Threadurilor
* Atat Producatorul cat si Consumatorul incearca sa faca de 10 ori operatia de set/get din Produs.
* Daca nu se pot face get/set din Produs, prin folosirea lui wait() se va bloca Consumatorul/Producatorul, blocarea putandu-se realiza doar unei categorii
* Un ex. posibil de functionare: Consumatorul obtine cheia Produsului si incearca accesarea metodei get(); daca avem o valoare in Produs, atunci citirea se face cu succes(nu intra pe while) si se deblocheaza Producatorul; daca nu avem valoare, se intra pe while si se blocheaza Consumatorul
* Producatorul obtine cheia Produsului incearca sa faca o inscriere, daca nu avem valoare in Produs se va putea si se deblocheaza Consumatorul, daca vem deja o valoare se va bloca Producatorul
* OBS: Metodele wait() si notifyAll() se pot folosi in metodele sincronizate mult mai eficient decat Thread.sleep(). Un obiect blocat cu wait se va debloca dupa trecerea timpului sau prin apelare notify, notifyAll. Se evita astfel blocajele(decomenteaza sleep si comenteaza notifyAll si wait in acest ex).
* Fie 3 fire:1,2,3; daca firul 3 se poate executa doar dupa terminarea activitatii firelor 1 si 2 putem uni cele 2 fire prin join ex: fir2.join();
* Se pot de asemenea folosi si 2 Producatori si 2 Consumatori */

Vezi: Thread si Introducere in universul Java, Horia Georgescu, Ed. Tehnica 2002.

vineri, 12 februarie 2010

Java: Ceas digital (folosite Thread, notify,wait)

//Clasa Secunde


public class Secunde extends Thread {
private Tic copieTic;
private int secunde;
public Secunde(Tic tic)
{
copieTic=tic;
}
public void run()
{
//daca nu folosim o bucla infinita dupa 1 secunda se termina ciclul si threadul "moare"
while(true)
{
try{
Thread.sleep(1000);
}
catch(Exception e)
{
System.out.println("Eroare in Secunde");
}
System.out.println("Sec: "+secunde);
if(secunde==59){
secunde=0;
copieTic.increment();
}
else
secunde++;
//se face o incrementare la fiecare 1000ms,
//daca s-a ajuns la 59, se revine in 0 si se semnalizeaza in Tic
}
}
}


//Clasa Minute


public class Minute extends Thread{
private Tic copieTic;
private int minute;
public Minute(Tic tic){
copieTic=tic;
}
public void run(){
while(true){
copieTic.astept();
minute++;
System.out.print("Minute: "+minute+" ");
if(minute==59)
minute=0;//in mod normal s-ar incrementa orele...
}
}
}


//Clasa Tic, realizeaza comunicarea intre fire


public class Tic {
private boolean eveniment;
public synchronized void astept(){
while(!eveniment)
{
try{
wait();
}
catch(Exception ex){
System.out.println("Eroare in astept()");
}
}
eveniment=false;
}
public synchronized void increment(){
System.out.println("In increment");
eveniment=true;
notify();
}
}


//Clasa Main, principala


public class Main {
public static void main(String[] args){
Tic tic=new Tic();
Secunde sec=new Secunde(tic);
Minute min=new Minute(tic);
sec.start();
min.start();
}
}



/**Scurte precizari
* Folosirea lui wait() are ca rol de a trece obiectul apelant in starea Blocked
* Folosirea lui notify() are efectul invers
* Metodele de tip synchronized produc un "lacat" per clasa si nu per obiect
* Variabila booleana eveniment se foloseste pentru verificare(se poate renunta la folosirea ei)
* Se poate modifica ai sa nu mai folosim wait() si notify prin testarea directa in Minute daca var booleana eveniment a devenit true
*/
Functionare: Se pornesc cele 2 fire, "lacatul" de pe clasa Tic este folosit de catre Minute(prin metodaastept()), care are ca efect blocarea lui Minute. Intre timp, threadul Secunde continua incrementarea secundelor. Cat timp nu s-a ajuns la 59, nu se apeleaza metode din Tic, deci implicit nu folosim lacatul. Cand se ajunge la 59 secunde, prin metoda increment() din Tic se deblocheaza threadul Minute. El va apela astept() se blocheaza, si ciclul se reia...

Vezi Head First in Java, in special paginile 490 - 516 si Unraveling threads sau Sincronizarea threadurilor(exemplul producator-consumator)

joi, 11 februarie 2010

JAVA: Thread + Animation

//Clasa Desenare: deseneaza un oval la coordonatele x,y si un fundal

import javax.swing.*;
import java.awt.*;
public class Desenare extends JPanel{
public int x,y,diametru=40;
public void paintComponent(Graphics g)
{
g.setColor(Color.CYAN);
g.fillRect(0, 0, this.getWidth(), this.getHeight());
g.setColor(Color.yellow);
g.fillOval(x, y, diametru, diametru);
}
}

//Clasa Fir: creaza un JFrame, si un Thread, adauga ascultatori


//import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.*;
public class Fir implements Runnable
{
Thread unFir;
public Fir()
{
frame.getContentPane().add(oval);
frame.setSize(500,400);
frame.setVisible(true);
frame.addMouseListener(new List());
}
JFrame frame=new JFrame();
Desenare oval=new Desenare();
public void run()
{
for(int i=0;i<(20);i++)
{
try{
Thread.sleep(500);
}
catch(Exception ex)
{
System.out.println("Exceptie");
}
oval.x+=i;
oval.y+=i;
oval.repaint();
}
//dupa ce s-a terminat "repictarea" trebuie "omorat"
//threadul pentru a se putea incepe unul nou
unFir=null;
System.out.println("Thread distrus");
}
public void refresh()
{
if(unFir==null)
{
unFir=new Thread(this);
unFir.start();
}
}
class List implements MouseListener{
public void mousePressed(MouseEvent e) {};
public void mouseReleased(MouseEvent e) {};
public void mouseClicked(MouseEvent e)
{
System.out.println("Noile coordonate: "+e.getX()+" "+e.getY());
oval.x=e.getX();
oval.y=e.getY();

refresh();

}
public void mouseEntered(MouseEvent e) {};
public void mouseExited(MouseEvent e) {};
}
}

//Clasa Main, creaza un obiect de tip Fir


public class Main {
public static void main(String[] args)
{
Fir fir=new Fir();
}
}



/**Scurte indicatii:
* Daca nu se verifica sa avem un singur fir in metoda refresh prin: unFir==null se vor crea fire la fiecare eveniment mouse.
* De asemenea este important ca threadul sa devina null, pentru a se putea reincepe desenarea in cazul in care exista
un nou eveniment mouse
* Daca nu se foloseste verificarea unFir==null atunci se vor porni in pararel mai multe fire, si chiar daca se pastreaza unFir=null acesta nu "omoara" firul, doar pierdem referinta la fir, el "murind" doar dupa ce se termina metoda run(in cazul de fata dupa 10 secunde)
* Chiar daca in timpul "desenarii" se va da click in alta zona, folosind versiunea prezentata mai sus a prog el se va executa tot in cele 10 secunde alocate, se vor schimba doar coordonatele de desenare
*/
Observatii: Se poate folosi si pentru deplasare pe o harta, prin stabilirea celei mai scurte rute de la pozitia initiala pana la noile coordonate; sper ca in scurt timp sa postez si versiunea respectiva, inca in lucru;))

luni, 25 ianuarie 2010

Mes

Material auxiliar Masuratori electronice si senzori
M1si in specialM2 si Senzori Senzori

duminică, 17 ianuarie 2010

Problema memorii

Memorii, Problema 2. from Costan Alex

Probleme CAN, Bistabili







sâmbătă, 16 ianuarie 2010

Problema Microcontroler
P2

P1
Problema Microcontroler

joi, 14 ianuarie 2010

GridLayout

//Desenare Grid(se poate folosi la sah sau la Snake)
//Pentru punere de labels in grid

void stareInitiala()
{
panel.setLayout(new GridLayout(copieModel.nrLinii,copieModel.nrColoane,1,1));
label=new JLabel[copieModel.nrLinii][copieModel.nrColoane];
for(int i=0;i<(copieModel.nrLinii);i++)
for(int j=0;j<(copieModel.nrColoane);j++)
{
label[i][j]=new JLabel();
panel.add(label[i][j]);
label[i][j].setOpaque(true);
}
}

//Pentru modificare panou de joc
//Aceasta se reapeleaza pentru redesenare


void desenare()
{
for(int i=0;i<(copieModel.nrLinii);i++)
for(int j=0;j<(copieModel.nrColoane);j++)
{
if(copieModel.harta[i][j]==-1)
{

label[i][j].setBackground(Color.darkGray);
}
if(copieModel.harta[i][j]>0)
{
label[i][j].setBackground(Color.green);
}
if(copieModel.harta[i][j]==0)
{
label[i][j].setBackground(Color.yellow);
}


}
frame.getContentPane().add(panel,BorderLayout.CENTER);
}

Tabla de sah cu Graphics

//Desenare tabla de sah

public void paintComponent(Graphics g)
{
for(int i=0;i<8;i++)
for(int j=0;j<8;j++)
{
if(copieModel.matrice[i][j]==0)
{
g.setColor(Color.lightGray);
g.fillRect(i*20,j*20,20,20);
}
if(copieModel.matrice[i][j]==1)
{
g.setColor(Color.darkGray);
g.fillRect(i*20,j*20,20,20);
}

//pentru redesenare componenta.repaint(), unde componenta este este o instanta a clasei care extinde JPanel: public class Vizualizare extends JPanel

Transformare continut fisier in matrice

//Transformare din continut fisier transmis k string in matrice

void generareMatrice()
{
String[] result=continutFisier.split("\n");// .split(criteriu) are rolul de a //imparti un string in mai multe "bucati" folosind un anumit criteriu; in cazul de //fata se
//foloseste ca si criteriu sfarsitul de linie
int linia=0;
for(String token:result)//se va parcurge ficare linie, am folosit metoda //split fiin o alternativa mult mai eleganta decat cea folosita la geneareMatrice()
{
for(int coloana=0;coloana<(nr_coloane);coloana++)
{

matrice[linia][coloana]=token.charAt(coloana);
}
}
}

Java - Citire din fisier

//Java - Citire din fisier

import java.io.*;
public class ReadTextFile
{
String continutFisier=new String("");
/**
* Realizeaza citirea din fisier
* @param harta: Un sir trimis ca si parametru constructorului Model
* @return continutFisier: Un sir ce reprezinta continutul fisierului
*/
public String readFile(String harta)
{
try
{
int i;
//buffeul se foloseste pentru a mari viteza de citire
//getClass si getResource se folosesc pentru a gasi fisierul in arhiva JAR
BufferedInputStream buf = new BufferedInputStream(getClass().getResourceAsStream(harta));
try{
while((i=buf.read())!=-1)
{
//se citesc biti care sunt transformati in caracterele corespunzatoare codului ASCII si apoi in String
continutFisier+=((char)(i));
}
}
finally
{
buf.close();
//se inchide fluxul
}
}
catch(Exception e)
{
}

return continutFisier;
}

}

luni, 11 ianuarie 2010

9. Poarta de tranmisie
Se cunoaste faptul ca un tranzistor NMOS(Mn) este deschis pentru o intrare pe Grila de "1" si inchis pentru "0". Un tranzistor PMOS functioneaza invers, este deschis pe "0" si inchis pe "1".

Daca avem A pe "1", atunci not(A) va fi pe "0", deci atat Mn cat si Mp vor fi deschise si pe iesire avem intrarea


Daca pe A avem "0", atunci pe not(A) vom avea "1", deci ambele vor fi blocate, si pe iesire vom avea "0"


OBSTranzistoarele MOS se pot folosi in genereal cu alimntarea D-S sau S-D (vezi )
<>CMOS

Pe iesire se va pune o rezistenta mare care consuma foarte putin curent pentru iesirea pe "1", dar la "0", iesirea este adusa cat mai apropape de 0V.

sâmbătă, 9 ianuarie 2010

8.Inversorul CMOS

Mp avand tensiune de prag negativa este deschis la "0" (pt "1" este blocat). Mn are tensiune de prag ~1.5V este deschis la “1”.(vezi: CMOS si CMOS
La "1" este este deschis tranzistorul Mn si Mp inchis, astefl la iesire vom avea potentialul Vss(~0V).
La "0" este deschis tranzistorul Mp si Mn blocat, deci la iesire vom avea potentialul Vdd("1").
Obs Pentru a se identifica mai usor elemntele tranzistorului D G S B o observatie ar fi ca de cele mai multe ori S si B sunt legate impreuna si G este perpendicular pe linia lor
Aplicatii tranzistoare
7 Inversorul NMOS static, Poarta SI-NU, Pentru SAU-NU

Daca pe intrare se introduce o valoare de “1” logic atunci M1 va fi deschis si curentul se va scurge in GND. In acelasi timp si M2 este deschis fiind datorita potentialului Vgg. Astfel Vdd se scurge prin M1 si M2 spre GND. Atat la iesire cat si pe GND avem acelasi potential si astfel diferenta intrece cele 2 puncte este ~0.


In cazul “0”, tranzistorul M1 este blocat(are tensiune de prag ~1.5V) si astfel potentialul de la Vdd nu se va scurge in GND. Diferenta intre cele 2 corespunde pentru “1”logic.


Poarta SI-NU functioneaza aproximativ la fel. Daca avem cel putin o valoare de “0” atunci cel putin unul din tranzistoarele M1, M2 va fi blocat si Vdd nu va ajunge pana la GND. Diferenta de potential Vout-GND va fi “1”. Pentru A=B=”1” M1 si M2 deschise si potentialul GND va fi egal cu cel din Vout


Pentru SAU-NU se rezolva aproximativ la fel. Daca A=B=”0” vom avea “1” si daca cel putin una din intrari va fi “0” vom avea “1” pe iesire.
Obs. Parametrii si dimensiunile pentru circuite difera deoarece M2(in toate cele 3 cazuri) are rolul unei rezistente(s.n. activa deoarece se poate modifica prin Vgg)

6.TTL de putere redusa

Singura modificare fata de TTL standard este data de folosirea unor rezistente de valori ridicate care au rolul de a reduce consumul de curent. Totusi aceata modificare duce la cresterea timpilor de comutare.
TTL rapid

Se aseamana cu TTL standard, grupul Q4-Q5 avand rolul dr grabire a tranzitiilor

5.Poarta fundamentala TTL
Daca pe A sau B avem “0”(idem si daca ambele sunt pe “0”), Q1 va fi deschiz(vezi diferentele de potential Vb,Ve,Vc), tranzistorul Q2 va fi blocat la fel si Q4. Q3 va fi in conductie si astfel la iesire vom avea un potential ridicat “1”
Pentru “1” pe ambele intrati Q1 va fin in regiune inversa Q2 si Q4 vor fi in conductie, Q3 va fi blocat datorita potebtialului scazut pe baza. La iesire vom avea o tensiune foarte mica ~0.7V
4.Inversor cu tranzistor bipolar

Ideea acestui montaj este urmatoarea: daca avem o valoare de “1” logic atunci la iesire vom avea “0” deoarece baza este un potential mai mic decat pe colector dar mai mare decat pe emitor. Astfel curentul ajunge in emitor(tranzistor deschis) deci in GND si pe Vout care este raportat la GND vom avea 0(Atentie masurarea se face de fiecare data intre Vout si GND, in acest caz se afla la celasi potential deci diferenta lor(Uab=Vb-Va) va fi ~0). Daca la intrare avem “0” atunci tranzistorul este blocat, pe GND avem ~0(chiar mai putin vezi sursa Eb) si astefel diferenta de potential ne asigura nivelul “1”(este generat de catre sursa Ec).
Condensatoarul are rol de accelerare inacarcandu-se foarte rapid si apoi descarcandu-se pe R.
3.Redresor cu filtru, Redresor cu dioda Zenner, Stabilizator cu reactie fara amplificator de reactie(cu trenzistor)
Redresor cu filtru

Condensatorul a fost adaugat pentru a se incarca pe alternata pozitiva si se descarca in circuit cand tensiunea scade sub tensiunea de incarcare( pe alternanta negativa si pe coborarea de la amplitudinea maxima)

Redresor cu dioda Zenner

Dioda Zenner la fel ca diodele obisnuite permit trecerea curentului daca sunt polarizate direct. Insa daca la diodele obisnuite prin polarizare inversa se blocheaza la Zenner se cauta tocmai acel curent invers de polarizare care duce la o strapungere a diodei. De accea Zenner se pune pe iesire si se polarizeaza invers pentru ca in zona Zenner avem o caracteristica a curentului-tensiune foarte stabila.
(Atentie la montarea diodei Zenner, vezi si efectul de avalansa ce apare la Zenner pe polarizare inversa)

Stabilizator cu reactie fara amplificator de reactie(cu trenzistor)

Tranzistorul se foloseste pentru functia lui de intrerupator comandat, se foloseste in functionare normala(reg activa normala/saturatie) care se obtine prin urmatoarele relatii Vcb>Vbe(V potential) care ne asigura o diferenta de potential Vce. In cazul de fata acest potential este dat de variatia potentialului de la baza tranzistorului, astfel: daca Vout(= Vzenner=Vrl) creste atunci potentialul la baza va creste ceea ce va duce ca Vce sa scada; daca va creste este invers... (vezi definirea zonei normale: Ve~Vb+6)
2.Redresor mono si dubla alternanta

In cazul redresorului mono alternanta se cunoaste faptul ca dioda se deschide la o tensiune prag de 0.6-0.7V in cazul polarizarii directe + la anod si – la catod. In cazul semnalului sinusoidal dioda este polarizata direct pe alternanta pozitiva si astfel la iesire(caderea de tensiune pe R) avem o tensiune comparabila cu cea de intrare. In cazul alternatei negative dioda este polarizata invers si este blocata, tensiunea fiind aproximativ 0.

Pentru redresor dubla alternanta se foloseste un grup de diode numit si punte redresoare. Pentru alternanta pozitiva sunt deschise diodele D1 si D3 si blocate restul. In cazul alternantei negative sunt deschise dodele D2 si D4. (polarizarea diodelor se face in acest caz prin aplicarea la anod a unei tensiuni aprox 0 si la catod a uneia negativa, ceea ce scade tensiunea de prag permitand deschiderea ei)
1. a)RC trece-sus si b)RC trece-jos

Tensiunea generata de sursa este data de suma caderilor de tensiune pe C si pe R. In cazul a) tensiunea de iesire este data de caderea pe R, in cazul b) de caderea pe condensator.
In ambele cazuri folosind definitia reactantei capacitive si a legii lui Ohm se observa ca o frecventa mare duce la o tensiune pe C mica, si pentru frecvente mici o tensiune mare. Sa nu uitam ca tensiunea de intrare este suma celor 2 caderi, astefel putem afla caderea de tensiune pe R; la frecvente mici aceasta este mare iar la frecvente mari este mica.(F frecventa Uc,Ur caderi de tensiune)

marți, 5 ianuarie 2010

Hello,
va prezint model de citire din fisier a unei matrici
utilizand acest model de citire a unui fisier puteti sa creeati mai departe si o arhiva jar

fisierul contine pe prima linie un sir de numere,iar pe urmatoarele lini contine o matrice de int.citirea din fisier se face linie cu linie;fiecare linie se citeste ca un string iar apoi din string se extrag numai cifrele eliminand spatiile albe.

public void citireMat(String s)
{
/*File file = new File(s);
FileInputStream fis = null;
BufferedInputStream bis = null;
DataInputStream cit = null;*/
String linie; //string care imi retine o linie
int contor=-1; //contor care imi contorizeaza cate linii am citit
int cont1=0;

String aux1;
int j=0;
try
{

InputStream in =getClass().getResourceAsStream(s);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
// BufferedInputStream br = new BufferedInputStream(getClass().getResourceAsStream(s));
// dis.available() returns 0 if the file does not have more lines.

while ((strLine = br.readLine()) != null)
{
contor=contor+1;; //incrementez contorul la fiecare citire
//linie=cit.readLine();
strLine=strLine.trim();
StringTokenizer st = new StringTokenizer(strLine, " ");
j=0;
if (contor==0){
String aux=st.nextToken();
n=Integer.parseInt(aux);
//citim de pe prima linie a fisierului nr de cutii,pozitii finale ale cutiilor,pozitia initiala a juc si timpul pt stagiu
for(int k=0;k<(n);k++)
{
aux=st.nextToken();
x[k]=Integer.parseInt(aux);
}
for(int k=0;k<(n);k++)
{
aux=st.nextToken();
y[k]=Integer.parseInt(aux);
}
aux=st.nextToken();
jx=Integer.parseInt(aux);
aux=st.nextToken();
jy=Integer.parseInt(aux);
aux=st.nextToken();
timp=Integer.parseInt(aux);



}//final if
else{
while(st.hasMoreTokens())
{
aux1=st.nextToken();
a[cont1][j]=Integer.parseInt(aux1);
j++;
}
cont1++;
}
}
in.close();


} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

by Coatan Alexadru

JAVA citire fisier


import java.io.*;

public class ReadTextFile
{
String continutFisier=new String("");
/**
* Realizeaza citirea din fisier
* @param harta: Un sir trimis ca si parametru constructorului Model
* @return continutFisier: Un sir ce reprezinta continutul fisierului
*/
public String readFile(String harta)
{
try
{
int i;
//buffeul se foloseste pentru a mari viteza de citire
//getClass si getResource se folosesc pentru a gasi fisierul in arhiva JAR
BufferedInputStream buf = new BufferedInputStream(getClass().getResourceAsStream(harta));
try{
while((i=buf.read())!=-1)
{
continutFisier+=((char)(i));
}
}
finally
{
buf.close();
}
}
catch(Exception e)
{
}

return continutFisier;
}

}



//Parcurgere fiecare linie

String[] result=continutFisier.split("\n");// .split(criteriu) are rolul de a imparti un string in mai multe "bucati" folosind un anumit criteriu; in cazul de fata se
//foloseste ca si criteriu sfarsitul de linie
int linia=0;
for(String token:result)//se va parcurge ficare linie, am folosit metoda split fiind o alternativa mult mai eleganta decat cea folosita la geneareMatrice()
{
for(int coloana=0;coloana<(nr_coloane;coloana++))
{

vineri, 1 ianuarie 2010

Java - Includere imagine, o varianta utila pentru JAR

//multumiri http://www.devx.com/tips/Tip/5697, putin modificat, inca o data multumiri

import java.awt.*;
import java.net.*;
import javax.swing.*;

public class ImportImageFromNet extends JFrame
{

Image img;
public ImportImageFromNet() throws Exception {
URL myurl = this.getClass().getResource("/robot.jpg");
Toolkit tk = this.getToolkit();
img = tk.getImage(myurl);
this.setVisible(true);
this.setSize(300,300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} // public ResourceTest()

public void paint(Graphics g) {
g.drawImage(img, 0, 0, this);
} // public void paint()
public static void main(String[] args)throws Exception
{
ImportImageFromNet gui=new ImportImageFromNet();
gui.repaint();
}
}

// public class ResourceTest extends Frame
//O alta varianta de introducere a imagini este:

URL url = getClass().getResource("anImage.gif");
Image img = Toolkit.getDefaultToolkit().getImage(url);


http://www.particle.kth.se/~lindsey/JavaCourse/Book/Part1/Java/Chapter06/images.html

//voi incerca intr-o varianta viitoare sa incarc imagini si folosind o resursa http;)