Elektron Konfigürasyon Algoritması
Periyodik tabloda elementler, uzun yıllar süren uğraşlar sonucunda periyodik özelliklerine göre belli bir düzen çerçevesinde sıraya oturtulmuştur. Modern Atom teorisiyle beraber, orbital ve alt orbital kavramları gelişmiş, atom numarası bilinen elementlerin hangi orbitallerinde ne kadar elektron bulunacağı teorik bulunmuş ve elektronların bulunacağı düzeylere göre enerji seviyeleri tespit edilmiştir. Atom numarası yani çekirdeğindeki proton sayısı bilinen bir atomun elektron konfigürasyon dağılımı çıkarılabilir.
Aşağıdaki kodda, switch-case yapıları kullanılarak atomda bulunan elektronların orbitallere dağılımı gösterilmiştir. Periyot ve grup numaraları, kimyasal hesaplarla elde edilmiştir.
Aşağıdaki kodda, switch-case yapıları kullanılarak atomda bulunan elektronların orbitallere dağılımı gösterilmiştir. Periyot ve grup numaraları, kimyasal hesaplarla elde edilmiştir.
Ekran Görüntüsü :
Kaynak Kodu :
- // @zafercvdr
- // PROGRAMMING LANGUAGE : C
- // Released Time : 02: 28 / 03.01.2012
- #include <cstdio>
- #include <cstdlib>
- #include <cmath>
- int atom_number;
- int shell[10],period,group_n;
- char group_l;
- int stone;
- int first(int i)
- {
- switch (i){
- case 0: return 1; break ;
- case 1: return 2; break ;
- case 2: return 2; break ;
- case 3: return 3; break ;
- case 4: return 3; break ;
- case 5: return 4; break ;
- case 6: return 3; break ;
- case 7: return 4; break ;
- case 8: return 5; break ;
- case 9: return 4; break ;
- case 10: return 5; break ;
- case 11: return 6; break ;
- case 12: return 4; break ;
- case 13: return 5; break ;
- case 14: return 6; break ;
- case 15: return 7; break ;
- case 16: return 5; break ;
- case 17: return 6; break ;
- case 18: return 7; break ;
- }
- }
- int second(int i)
- {
- switch (i){
- case 0: return 2; break ;
- case 1: return 2; break ;
- case 2: return 6; break ;
- case 3: return 2; break ;
- case 4: return 6; break ;
- case 5: return 2; break ;
- case 6: return 10; break ;
- case 7: return 6; break ;
- case 8: return 2; break ;
- case 9: return 10; break ;
- case 10: return 6; break ;
- case 11: return 2; break ;
- case 12: return 14; break ;
- case 13: return 10; break ;
- case 14: return 6; break ;
- case 15: return 2; break ;
- case 16: return 14; break ;
- case 17: return 10; break ;
- case 18: return 6; break ;
- }
- }
- void letter(int i)
- {
- switch(i){
- case 2 : printf("s"); break;
- case 6 : printf("p"); break;
- case 10 : printf("d"); break;
- case 14 : printf("f"); break;
- }
- }
- void orbit()
- {
- printf("Orbitallerdeki elektron sayilari : \n\n");
- for (int m=1 ; m < 10 ; m++)
- {
- if (shell[m] != 0)
- printf("%d ",shell[m]);
- else
- {
- period = m-1;
- if (!((stone>=21 && stone<=30) || (stone>=39 && stone<=48) || (stone>=57 && stone<=80) || (stone>=89 && stone<=112)) )
- {
- group_n = shell[period];
- group_l = 'A';
- }
- break;
- }
- }
- printf("\n");
- }
- int bgroup(int i)
- {
- switch (i){
- case 3 : return i ; break;
- case 4 : return i ; break;
- case 5 : return i ; break;
- case 6 : return i ; break;
- case 7 : return i ; break;
- case 8 : return i ; break;
- case 9 : return 8 ; break;
- case 10 : return 8 ; break;
- case 11 : return i%10 ; break;
- case 12 : return i%10 ; break;
- }
- }
- void pdata()
- {
- if (stone == 2)
- {
- group_n = 8;
- group_l = 'A';
- }
- printf("\n\nPeriod : %d",period);
- printf("\nGrup : %d%c\n\n",group_n,group_l);
- printf("--------------------------------------------------\n\n");
- }
- void funknown()
- {
- if (stone >= 57 && stone <= 71)
- {
- group_n = 3;
- group_l = 'B';
- }
-
- if (stone > 71 && stone < 81)
- {
- int a= 3 + (stone-71);
- if (a > 8 && a< 11)
- group_n = 8;
- else if (a > 10)
- group_n = a%10;
- else
- group_n = 3 + (stone-71);
- group_l = 'B';
- }
- if (stone >= 89 && stone <= 103)
- {
- group_n = 3;
- group_l = 'B';
- }
- if (stone > 103 && stone < 113)
- {
- int b= 3 + (stone-103);
- if (b > 8 && b< 11)
- group_n = 8;
- else if(b > 10)
- group_n = b%10;
- else
- group_n = 3 + (stone-103);
- group_l = 'B';
- }
- }
- void orbital()
- {
- int i=0,k=0;
- printf("\n");
- while (atom_number != 0)
- {
- int y= second(i);
- int x= first(i);
- if (atom_number <= y)
- {
- shell[x]+=atom_number;
- printf("%d",x);
- letter(y);
- printf("%d ",atom_number);
- if ((stone>=21 && stone<=30) || (stone>=39 && stone<=48) )
- {
- group_n = bgroup(atom_number + k);
- group_l = 'B';
- }
- atom_number=0;
- }
- else
- {
- if ((i==5 || i==8) && (atom_number-2 == 4 || atom_number-2 == 9 ))
- {
- shell[x]+= 1;
- printf("%d",x);
- letter(y);
- printf("1 ");
- atom_number-=1;
- shell[x-1]+= atom_number;
- printf("%d",x-1);
- letter(second(i+1));
- printf("%d",atom_number);
- int temp= atom_number;
- atom_number=0;
- group_n = bgroup(shell[x]+ temp);
- group_l = 'B' ;
- }
- else
- {
- shell[x]+=y;
- k= y;
- printf("%d",x);
- letter(y);
- printf("%d ",y);
- atom_number-=y;
- i++;
- }
- }
- }
- printf("\n\n\n");
- }
- void read()
- {
- int s=0;
- system("color f");
- while (atom_number < 1 || atom_number > 118 )
- {
- if (s > 0)
- printf("Gecersiz girdi.Tekrar deneyin.\n\n\n");
- printf("Elementin atom numarasini giriniz. (1-118) : ");
- scanf("%d",&atom_number);
- s++;
- }
- stone = atom_number;
- for (int c = 1 ; c < 10 ; c++)
- shell[c]=0;
- period = 0;
- group_n = 0;
- }
- int main()
- {
- read();
- orbital();
- orbit();
- funknown();
- pdata();
- main();
- system("Pause");
- return 0;
- }