1) Metindeki kelimeleri, sayıları ve cümlelerin sayısını bulan C programı

Çözüm 1:

#include<stdio.h>

#include<string.h>


const char* metin = "Bu gun hava cok guzel ama yaz mevsimi icin biraz serin.\

Bu sene bir turlu yaz gelemedi. Gelse ne olacak ki? Salgin yuzunden kimse bir\

 yere gidemiyor. Kalabaliklardan uzak durmak zorunda olmak berbat bir sey. Bu gun gunlerden Persembe.\

Bu gun pazara gittim. Pazardan 3 kg elma, 2 kg portakal aldım. Saat 9'u 25 gece geldim. Ben 1999 yılında dogdum.";


int main()

{

int kelime = 0;

int cumle = 0;

int sayi = 0;

int uzunluk = strlen(metin);

for (int i = 0; i < uzunluk; i++) {

if (metin[i] == ' ') {

kelime = kelime + 1;

}


if (metin[i] == '.' || metin[i] == '?') {

cumle += 1;

if (metin[i + 1] != ' ') {

kelime = kelime + 1;

}

}

if (metin[i] == '1' || metin[i] == '2'||metin[i] == '3' || metin[i] == '4' ||

metin[i] == '5' || metin[i] == '6' || metin[i] == '7' || metin[i] == '8' ||

metin[i] == '9')  {

if(metin[i-1] == '1' || metin[i-1] == '2' || metin[i-1] == '3' || metin[i-1] == '4' ||

metin[i-1] == '5' || metin[i-1] == '6' || metin[i-1] == '7' || metin[i-1] == '8' ||

metin[i-1] == '9')

sayi = sayi - 1;

sayi = sayi + 1;

}

}

printf("%d", kelime);

printf("\n%d", cumle);

printf("\n%d", sayi);

return 0;

}


Çözüm 2: 

#include <stdio.h>

#include <ctype.h>

#include <string.h>

int main()

{

    const char* cc = "Bu gun hava cok guzel ama yaz mevsimi icin biraz serin.\

 Bu sene bir turlu yaz gelemedi. Gelse ne olacak ki? Salgin yuzunden kimse bir\

 yere gidemiyor. Kalabaliklardan uzak durmak zorunda olmak berbat bir sey. Bu gun gunlerden Persembe.\

 Bu gun pazara gittim. Ben pazardan 3 kg elma, 2 kg portakal aldim. Saat 9 da geldim. Ben 1999 yilinda dogdum.";

    

    int kelime = 0;

    int cumle = 0;

    int sayi = 0;

    int result1;

    int result2;

    int result3;

    

  


    for (int i = 0; i < strlen(cc); i++)

    {

        // Kelime sayısı bulunur

        result1 = isspace(cc[i]);


        if (result1 != 0)

        {

            kelime = kelime + 1;

        }

        

        

        //Noktalama iÅŸaretleri bulunur

        result2 = ispunct(cc[i]);

        if (result2 != 0)

        {

            if(cc[i]!=',')

                cumle= cumle + 1;

        }

        

        // sayıların bulunması

        result3 = isdigit(cc[i]);

        if (result3 != 0) {

            if(isdigit(cc[i+1]) == 0)

                sayi = sayi + 1;

        }

       

    }

    // kelime sayısına bir eklenir.

    kelime = kelime + 1;


    printf("\nKelime sayisi = %d\n", kelime);

    printf("\nCumle sayisi = %d\n", cumle);

    printf("\nSayi sayisi = %d\n", sayi);

    return 0;

}

2) strhcr ile aynı işlevi yapan fonksiyon:

#include<stdio.h>
#include<string.h>

const char* my_strchr(const char*,const char);

int main() {

const char* r = "Merhaba";
const char s = 'e';
const char* q = my_strchr(r, s);
printf("Girilen kelimeden sonraki kisim = %s\n", q);
return 0;
}

const char* my_strchr(const char* c, const char s)
{
const char* t = NULL;
if (c != NULL)
{
do
{
if (*c == s)
{
t = c;
break;
}
} while (*c++);
}
return t;
}

3) Verilen kelimenin indisini bulan program:

#include<stdio.h>
#include<string.h>

int indis(const char*, const char);

int main() {

const char* r = "Merhaba";
const char s = 'e';
int x = indis(r, s);
printf("Harf indisi= %d\n", x);

return 0;
}

// gönderilen kelimenin indisini bulur
int indis(const char* c, char s) {
int i;
bool var = false;
const char* ptr = c;
if (ptr == NULL) {
return -1;
}
for (i = 0; *ptr != '\0'; i++) {
if (*ptr ==s) {
var = true;
break;
}
++ptr; 

}
return (var ? i : -1);
}
}

4) Kullanıcı "exit" yazana kadar sürekli kullanıcıdan metin alan program:

#include <string.h>
#include <stdio.h>
int main() {
char ss[512] = "merhaba";
char s[512] = "exit";
int result;
while (true)
{
printf("Kelime gir: ");
scanf("%s",ss);
result = strcmp(ss, s);

if (result == 0)
{
printf("ayni\n");
break;
}
else
{
printf("degil");
}
}

}

5) strcat, malloc, free ve strcpy ile strcat'ın ilk parametresindeki karakter dizisine, ikinci parametresindeki karakter dizisini ekleme:

Çözüm 1:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {

char* s1;
char* s2;
s1 = (char*)malloc(8);
s2 = (char*)malloc(6);
strcpy(s1, "merhaba");
printf("String = %s,  Address = %u\n", s1, s1);
strcpy(s2, "dunya");
printf("String = %s,  Address = %u\n", s2, s2);
s1 = (char*)realloc(s1,13);
strcat(s1, s2);
printf("String = %s,  Address = %u\n", s1, s1);
free(s1);
free(s2);
return 0;
}

Çözüm 2:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* my_strcat(char*, char const*);
int main() {
        char* s1;
char* s2;


s1 = (char*)malloc(8);
s2 = (char*)malloc(6);

strcpy(s1, "merhaba");
printf("String = %s,  Address = %u\n", s1, s1);
strcpy(s2, "dunya");
printf("String = %s,  Address = %u\n", s2, s2);

printf("String = %s", my_strcat(s1,s2));
return 0;
}

char* my_strcat(char* s1, char const* s2) {
int i, j;
for (i = 0; s1[i] != '\0'; i++);
for (j = 0; s2[j] != '\0'; j++) {
s1[i + j] =s2[j];
}

s1[i + j] = '\0';
return s1;

}
6) malloc ve free fonksiyonlarını kullanarak kullanıcıdan alınan sayıların toplamını bulan program:

#include <stdio.h>
#include <stdlib.h>

int main() {
int n, i, * ptr, sum = 0;
printf("Kac sayi gireceksiniz: ");
scanf("%d", &n);
// bellekten yer ayırma
ptr = (int*)malloc(n * sizeof(int));
// Bellek ayrılmazsa 
if (ptr == NULL) {
printf("Hata, bellek ayrilamadi");
exit(0);
}
printf("Sayi giriniz: ");
for (i = 0; i < n; i++) {
scanf("%d", ptr + i);
sum += *(ptr + i);
}

printf("Toplam = %d\n", sum);
//belleğin serbest bırakılması
free(ptr);

return 0;
}

6) C programlamada derleme işlemi kaç aşamadan gerçekleşir ?

Cevap :

4 aÅŸamadan oluÅŸur. Bunlar:
1) Ön işleme (Preprocess): Bu aşamada yorum satırları kaldırılır, kütüphaneler eklenir ve makrolar eklenir. Bu aşama sonrasında çalışma dizininde ".i" uzantılı dosya oluşur.
2) Derleme(Compilation): ".i" dosyası derlenir ve ".s" dosyası oluşur. C kodları Assembly kodlarına çevrilir.
3) Çevirme(Assembly): Assembly kodları Assembler yardımı ile makine diline çevrilir. Çıktı olarak ".o" dosyası oluşur.
4) Bağlama(Linker): Kodun ihtiyaç duyduğu harici fonksiyon çağrılarını tanımlarıyla birlikte programa bağlar.

7) Bir karakterin bayt değerini gösteren program:

#include<stdio.h>  
int main() {
printf("Size of char : %d\n", sizeof(char));
return 0;
}

8) Kendi statik kütüphane kodları:

StaticLib.cpp


#include "pch.h"
#include "framework.h"
#include "My_Library.h"

int sayi_sayisi(const char* c)
{
    int sayi = 0;

    for (int i = 0; c[i] != '\0'; i++) {
        if (c[i] == '1' || c[i] == '2' || c[i] == '3' || c[i] == '4' ||
            c[i] == '5' || c[i] == '6' || c[i] == '7' || c[i] == '8' ||
            c[i] == '9') {
            if (c[i - 1] == '1' || c[i - 1] == '2' || c[i - 1] == '3' || c[i - 1] == '4' ||
                c[i - 1] == '5' || c[i - 1] == '6' || c[i - 1] == '7' || c[i - 1] == '8' ||
                c[i - 1] == '9')
                sayi = sayi - 1;
            sayi = sayi + 1;
        }
    }
    return sayi;
}

int indis(const char* c, char s)
{
    int sayac = 0;
    for (int i = 0; c[i] != '\0'; i++)
    {
        if (c[i] == s) {
            sayac = i;
            break;
        }
    }
    if (sayac == 0) {
        return -1;
    }
    return sayac;
}

int cumle_sayisi(const char* c)
{
    int cumle = 0;

    for (int i = 0; c[i] != '\0'; i++)
    {
        if (c[i] == '.' || c[i] == '?') {
            cumle = cumle + 1;
        }
    }
    //printf("Cumle sayisi = %d\n", cumle);
    return cumle;

}

int uzunluk(const char* c)
{
    int uzunluk = 0;
    for (int i = 0; c[i] != '\0'; i++) {
        uzunluk = uzunluk + 1;
    }
    //printf("Uzunluk = %d\n", uzunluk);
    return uzunluk;
}

int kelime_sayisi(const char* c) {
    int kelime = 0;

    for (int i = 0; c[i] != '\0'; i++)
    {
        if (c[i] == ' ') {
            kelime = kelime + 1;
        }
        if (c[i] == '.' || c[i] == '?') {

            if (c[i + 1] != ' ') {
                kelime = kelime + 1;
            }
        }
    }
    //printf("Kelime sayisi = %d\n", kelime);
    return kelime;
}

const char* my_strhcr(const char* c, const char s) {
    if (c != nullptr)
    {
        do
        {
            if (*c == s)
            {
                return c;// t = c;
                //break;
            }
        } while (*c++);
    }
    return nullptr;
}

My_Library.h


#ifndef H_MY_LIBRARY
#define H_MY_LIBRARY

int sayi_sayisi(const char* c);
int indis(const char* c, char s);
int cumle_sayisi(const char* c);
int uzunluk(const char* c);
int kelime_sayisi(const char* c);
const char* my_strhcr(const char* c, const char s);

#endif 

9) Bir thread tek sayıları bukur iken diğer thread ise çift sayıları bulmaktadır. Samaphore kullanrak bu iki threadin cıktılarını ekrana sırasıyka yazan program (1,2,3,4....)

Çözüm:

#include <pthread.h>
#include <stdio.h>
#include <semaphore.h>

sem_t tek;
sem_t cift;
// tekleri yazan thread
void* thread1(void* arg){

    int i;
    for(i=0;i<10000;i++){
        sem_wait(&tek);
        if(i%2 != 0){

            printf("Bu thread calisti %ld tek sayi = %d\n",(long)arg, i);
        }
        sem_post(&cift);
    }

    return NULL;
}
// çiftleri yazan thread
void* thread2(void* arg){

    int i;
    for(i=0;i<10000;i++){
        sem_wait(&cift);
        if(i%2 == 0){

            printf("Bu thread calisti %ld cift sayi = %d\n",(long)arg, i);
        }
        sem_post(&tek);
    }

    return NULL;
}
int main(){
    sem_init(&tek,0,1);
    sem_init(&cift,0,1);
    pthread_t t1,t2;
    long one =1;
    long two = 2;
    pthread_create(&t1,NULL,thread1,(void*)one);

    pthread_create(&t2,NULL,thread2,(void*)two);
    pthread_join(t1,NULL);
    pthread_join(t2,NULL);
    sem_destroy(&tek);
    sem_destroy(&cift);


 Tekrarlama Temelleri

Çoğu program, tekrarlama veya döngü içerir. Bir döngü, döngü devam koşulu doğru kaldığı sürece bilgisayarın tekrar tekrar yürüttüğü bir talimatlar grubudur. Tekrarlamanın iki anlamı vardır:

    1) Sayaç kontrollü tekrarlama    
    2) Sonlandırma kontrollü tekrarlama

Döngünün önceden kaç kere yürütüldüğünü önceden bildiÄŸimiz için sayaç kontrollü tekrarlama bazen belirli tekrarlama olarak adlandırılır. Döngünün tam olarak kaç kere yürütüleceÄŸini önceden bilinmediÄŸi için sonlandırma kontrollü tekrarlama bazen belirsiz tekrarlama olarak adlandırılır. 

Sayaç kontrollü tekrarlamada, tekrarlama sayısını sayısını saymak için bir kontrol değişkeni kullanılır. Kontrol değişkeni talimatlar grubunun yapıldığı her sefer ( genelde 1 ) arttırılır. Kontrol değişkeninin değeri doğru sayıda tekrarlamanın yapıldığı işaret ettiği zaman, döngü sonlanır ve yürütme, tekrarlama ifadesinden sonraki ifade ile devam eder.
    
    1) Kesin tekrarlama sayısı önceden bilinmediÄŸi,
    2) Döngü, döngünün yapıldığı her sefer veri alan ifadeler içerdiÄŸi zaman
tekrarlamayı kontrol etmek için sonlandırma değerleri kullanılır. Sonlandırma değeri "veri sonu" nu işaret eder. Sonlandırmalar, normal veriden farklı olmak zorundadır.

Sayaç Kontrollü Tekrarlama

Sayaç kontrollü tekrarlama:

    1) Kontrol deÄŸiÅŸkeninin ismi
    2)Kontrol deÄŸiÅŸkeninin baÅŸlangıç deÄŸeri
    3) Her döngü seferinde kontrol deÄŸiÅŸkeninin deÄŸiÅŸtirileceÄŸi arttırma ( veya azaltma)
    4) Kontrol deÄŸiÅŸkeninin son deÄŸeri

maddelerini gerektirir.

Aşağıdaki örnekte 1 'den 10 'a kadar sayıları ekrana yazan program yapılmıştır.

Örnek:

#include <stdio.h>

int main(void){
    
    unsigned int sayac = 1; // sayaça baÅŸlangıç deÄŸerinin verilmesi
    
    while( sayac <= 10) {
    
        printf("%u\n", sayac);
        ++sayac;  // arttırma iÅŸlemi
    } // while sonu
} // main fonksiyonu sonu


Ekran çıktısı:

1
2
3
4
5
6
7
8
9
10

Bu örneği inceleyelim:

Bu örnekte kontrol değişkenimiz "sayac" olarak isimlendirilmiştir. "unsigned int sayac = 1;" bu kod satırı ile kontrol değişkenimize değeri atanmıştır. "++sayac;" bu kod satırı ile ise, döngünün yapıldığı her sefer döngü sayacı 1 arttırır. while ifadesindeki döngü devam koşulu kontrol değişkeninin 10'dan küçük veya eşit olup olmadığını kontrol eder. Kontol değişkeni 10'u geçtiği zaman döngü sonlanır.

for Tekrarlama İfadesi

for tekrarlama ifadesi, sayaç kontrollü tekrarlamanın tüm detaylarını sağlar.

for döngüsü akış diyagramı



for ifadesinin genel biçimi:

for ( ifade1; ifade2; ifade3){
    ifade
}

Örnek:

1    #include <stdio.h>
2    
3    int main(void) {
4        
5        unsigned int sayac; // sayac tanımlanır
6    
7                    // baÅŸlangıç deÄŸeri verme, tekrarlama koÅŸulu ve arttırma'nın
       // tamamı for ifadesi baÅŸladığında dahil olmuÅŸtur.
9
10                 for ( sayac =1; sayac<=10; ++sayac){
11    
12            printf("%u\n", sayac);
13    
14        }// for sonu
15    
16    } // main sonu

Ekran çıktısı:

1
2
3
4
5
6
7
8
9
10

for ifadesi çalışmaya baÅŸladığı zaman, sayac kontrol deÄŸiÅŸkenine baÅŸlangıç deÄŸeri olarak 1 verilir. Sonra, sayac <= 10 döngü devam koÅŸulu kontrol edilir. sayac'ın baÅŸlangıç deÄŸeri 1 olduÄŸu için , koÅŸul saÄŸlanır, böylece 12. satır da sayac deÄŸerini, yani 1, yazar. sayac kontrol deÄŸeri daha sonra ++sayac ifadesi tarafından 1 arttırılır, ve döngü, döngü devam karşılaÅŸtırılması ile tekrar baÅŸlar. Kontrol deÄŸiÅŸkeni ÅŸimdi 2 olduÄŸu için, son deÄŸer aşılmamıştır, bu nedenle program  printf ifadesini  tekrar gerçekleÅŸtirir. Bu süreç, sayac kontrol deÄŸiÅŸkeninin son deÄŸeri 11 olana kadar devam eder.



Örnekler:

1) Kullanıcıdan alınan 3 sayıdan 25'e en yakın olan sayıyı bulan program:


#include <stdio.h>
int main(){
   int enyakinmesafe=25;
   int enyakinsayi=25;
   for(int i = 0;i<3;i++){
     int sayi;
     scanf("%d",&sayi);
     if((25-sayi)*(25-sayi)<enyakinmesafe){
                enyakinmesafe = (25-sayi)*(25-sayi);
                enyakinsayi = sayi;
     }
   }
   printf("en yakin sayi : %d",enyakinsayi);

Ekran çıktısı:

15
22
28
en yakin sayi : 22


2) Kullanıcıdan alınan sayıya kadar olan sayıların toplamı:


#include <stdio.h>

int main()
{
  int i,n,sonuc ;
  // degiÅŸkenler tanımlanıyor.
  
   // integer'e karşılık prinf ve scanf'te %d kullanırlır.
   
   printf("Bir sayi giriniz :");
   //Kullanıcıdan deÄŸerler alınıyor..
   
   scanf("%d", &n);
   // %d sayının tipini ifade ediyor. & sayısal olanlarda giriliyor.
   //  String bir ifade kullanmak istedeÄŸimizde & iÅŸaretini kullanmıyoruz.
   //
   
   sonuc=0;

   for  (i=1; i<=n; i++ )
   
   sonuc = sonuc + i;
   
   printf("istediginiz toplam: %d ", sonuc  );  
   // sonuç ekrana yazdırılıyor.. 
    // %f virgüllü sayılar
    // %s string ifadelerinde kullanıyoruz.
   
}
 
Ekran çıktısı:

Bir sayi giriniz :3
istediginiz toplam: 6 



3) Ä°ngiliz alfabesine A’dan Z’ye kadar harflei sıralayan bir C programı:

/* A-Z harflerini yazan for döngüsü. */
#include <stdio.h>
int main() {
    char c;
    for(c='A'; c<='Z'; ++c){
        printf("%c ",c);
    }
    return 0;
}

Ekran çıktısı:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 

4) Kullanıcıdan alınan sayıya kadar olan sayıların faktöriyelini hesaplayan program:

#include <stdio.h>
 
main()
{
    int faktoriyel = 1; 
    int sayi;
    
    printf("Bir sayi giriniz: ");
    scanf("%d",&sayi);
    
    for(int i = 1; i <= sayi; i++)
    {
        faktoriyel *= i;         // faktoriyel = faktoriyel * i;
        printf("%d ! = %d\n", i , faktoriyel);    
    }
         //printf("%d ! = %d ", sayi, faktoriyel);
}

Ekran çıktısı:

Bir sayi giriniz: 6
1 ! = 1
2 ! = 2
3 ! = 6
4 ! = 24
5 ! = 120
6 ! = 720



Kısa Yollar:

Aşağıdaki linkler ile C programlama ile ilgili olan diğer bölümlere ulaşabilirsiniz:





Kaynaklar:


https://bilgisayarkavramlari.com/2010/01/13/c-ile-programlamaya-giris-quiz-sorulari-ve-cozumleri/

https://www.cag.edu.tr/uploads/site/lecturer-files/programlamatemelleri-iJim.pdf

http://www.baskent.edu.tr/~tkaracay/etudio/ders/prg/c/questions/h05/h05_loops.pdf

https://www.kodbloklari.com/c-dili-for-dongusu/

Deitel Deitel c ve c++ 
Bu çalışmada raspberry pi üzerindeki cpu'nun sıcaklık değerini okuyacağız. Bu okuduğumuz sıcaklık değerini TCP ile oluşturacağımız server'a aktaracağız. Programlama dili olarak Python kullanacağız.

Hadi baÅŸlayalım. 

Öncelikle raspberry pi üzerindeki cpu'nun sıcaklığını ölçmek ile başlayalım.

import os
import time

def measure_temp():
    temp = os.popen("vcgencmd measure_temp").readline()
    return (temp.replace("temp= ",""))
while True:
    print(measure_temp)
    time.sleep(1)



Bir saniye aralıklarla console ekranında cpu sıcaklık değerini yazdıracaktır. Biz programı durdurana kadar devam edecektir.




Evet artık cpu sıcaklık deÄŸerini okuyabiliyoruz. Åžimdi client ve server'larımızı oluÅŸturabiliriz. 

Önce TCP için yapalım:

Server kısmı: 

import socket

host = "192.168.1.42"
port = 12345

try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print("socket oluÅŸturuldu")

s.bind((host, port))
print("socket {} nolu porta bağlandı".format(port))

s.listen(5)
print("socket dinleniyor")

except socket.error as msg:
print("Hata:", msg)

while True:
# Client ile bağlantı kurulursa
c, addr = s.accept()
print('Gelen bağlantı:', addr)

# Bağlanan client tarafına bağlandığını belirtelim
mesaj = 'Bağlantı sağlandı'
c.send(mesaj.encode('utf-8'))

# client tarafından gönderilen cpu sıcaklık değeri
yanit = c.recv(1024)
print( yanit.decode("utf-8") )

# Bağlantıyı sonlandıralım
c.close()

Client kısmı:

# -*- coding: utf-8 -*-
import socket                
#cpu temp
import os
import time


while True:
    # Socket oluÅŸturulması
    s = socket.socket()          
    
    # BaÄŸlanılacak adres ve port
    host = "192.168.1.42"
    
    port = 12345                

    try:
        # BaÄŸlantıyı yap
        s.connect((host, port))
        

        # serverden yanıtı al
        yanit = s.recv(1024)
        print(yanit.decode("utf-8"))
       
        #cpu sıcaklığı ölçülür ve server'a gönderilir
        temp = os.popen("vcgencmd measure_temp").readline()
        mesaj= temp
        s.send(mesaj.encode("utf-8"))
    

        # baÄŸlantıyı kapat
        s.close() 
    except socket.error as msg:
        print("[Server aktif deÄŸil.] Mesaj:", msg)
    
    time.sleep(1)

Biz server'dan baÄŸlantıyı kesene kadar, client cpu sıcaklık deÄŸerini göndermeye devam edecektir. 
Şimdi çalıştıralım:

Server'a herhangi bir bağlantı olmadan önce:



Client çalıştırılınca server:



Client çıktısı:


Bu ÅŸekilde TCP ile veri aktarımını baÅŸarılı bir ÅŸekilde tamamlamış olduk. 

























 74LS74 decoder entegresi ile 7 segment display devresini kuracağız. Öncelikle kullanacağımız entegreyi iyice tanıyalım.

75LS47 DIP-16 BCD  - 7 Segment Decoder Entegresi:

 74LS47 Entegresi Decoder - Encoder kategorisinde olup fonksiyon olarak bir BCD - 7 Segment Decoder entegresidir. 7 adet çıkışı bulunan 74LS47 BCD - 7 Segment Decoder Entegresi 4.75 - 5.25 V aralığında besleme gerilimi ile çalışmaktadır.

74LS47 IC, ortak anot LED'leri doğrudan sürmek için tasarlanmış aktif düşük çıkışlara sahiptir. Giriş olarak ikili kodlanmış bir ondalığı kabul eder ve 0 ila 9 arasındaki rakamları görüntülemek için 7 segmenti sürmek için onu bir modele dönüştürür. İkili kodlu ondalık (BCD), bir sayının her basamağının kendi ikili dizisi ile temsil edildiği bir kodlamadır. (genellikle dört bitlik).

74LS47 Pinleri:


74LS47 Kod Çözücü:

74LS47 kod çözücü / sürücü ile ortak anot ekranı arasındaki baÄŸlantı, akım akışını sınırlamak için yedi direnç gerektirir. Ekranın her LED bölümünün düzgün yanması için, her bölümden geçen akım akışının dikkatlice kontrol edilmesi gerekir. Akımı bir ekran segmenti aracılığıyla sınırlamanın en iyi yöntemi, yedi LED segmentinin her biri ile seri olarak bir akım sınırlama direnci kullanmaktır. Seri baÄŸlı bir direnç kullanmazsak, maksimum akım akacak ve LED kalıcı olarak bozulmadan önce kısa bir süre için çok parlak olacaktır.

Tipik bir 7 segmentli LED ekranın her bir LED segmenti 6 ila 20mA arasında çalışacak şekilde derecelendirildiğinden, normal parlaklık için LED'in diyot bağlantısında yaklaşık 1,8 voltluk bir voltaj düşüşü sunar. LED segmenti başına gerekli akımı üretmek için gereken akım sınırlayıcı direncin değerini hesaplayabiliriz.


Ortak anot gösterimi için, her bir LED bölümünün anotları birlikte 5 voltluk bir kaynağa (VS) bağlanır. Yandığında, LED bağlantısındaki ileri voltaj düşüşü yaklaşık 1,8 volt ise, seri direnç üzerindeki voltaj da eşit olmalıdır: VS - VLED = 5 - 1,8 = 3,2 volt.

Dolayısıyla, tek bir segmentin seri akım sınırlayıcı direnci için gerekli direnç deÄŸeri, onu aydınlatmak için gerekli akım akışında Ohm Yasası kullanılarak basitçe bulunur. 



7 - Segment Display Direnç Değerleri:




Bu nedenle, 6mA akımda, tercih edilen en yakın değere 533Ω veya 560Ω'lik bir seri akım sınırlama direnci ve akımı 20mA ile sınırlamak için 160Ω'luk bir direnç gerekir. Gerçekte, 220Ω ve 360Ω arasında herhangi bir iyi standart tercih edilen direnç değeri, 5 voltluk bir beslemeden 7 segmentli bir ekranı aydınlatmak için kullanılabilir; bunların tümü, sahip olduğunuz direnç değerlerine bağlıdır.


74LS47 BCD 7 - Segment Devresi:




Devrenin Proteus Dosyası:

Drive linkinden devrenin proteus dosyasını indirebilirsiniz.


















C ++ da bu sefer deÄŸiÅŸkenleri ve sabitleri iÅŸliyoruz.


DeÄŸiÅŸkenler :

Program içerisinde deÄŸerini deÄŸiÅŸtirebileceÄŸimiz verilere deÄŸiÅŸkenler adını veririz.  Bir deÄŸiÅŸken bize adlandırılmış bir depolama yeteneÄŸi saÄŸlar. Programcının verileri ihtiyaca göre deÄŸiÅŸtirmesine izin verir. C ++ 'daki her deÄŸiÅŸkenin bir türü vardır. DeÄŸiÅŸken türü, deÄŸiÅŸkenin bellek haritasının boyutunu ve düzenini, bu bellekte saklanabilecek deÄŸer aralığını ve ona uygulanabilecek iÅŸlemler kümesini belirlemeye yardımcı olur.

DeÄŸiÅŸkenleri tanımlarken büyük ve küçük harflere dikkat etmemiz gerekir. DeÄŸiÅŸkenler _ ile baÅŸlayabilirler. DeÄŸiÅŸken isimleri sayı içerebilir ama sayı ile baÅŸlayamazlar .

Değişken tanımlama;

değişken_türü değişken_adı;

Örnek olarak;

int x;

EÄŸer  deÄŸiÅŸkene bir deÄŸer atamak istersek,

Öncelikle biz bu değişkeni int ya da unsigned int veri tipinden olduğunu belirtmeliyiz (unsigned int ve int veri tipi ikisi de tam sayıları belirtmek için kullanılıyordu ) , daha sonra değişkenimizin adını yazarız , biz burada değişkenimize x adını verelim. O halde kodumuz şöyle olacaktır ;

int x=6;



Yerel ( Local ) DeÄŸiÅŸkenler

Bir işlev içinde tanımlanan bir değişken (işlev gövdesi içinde kaşlı ayraçlar arasında tanımlanır) yerel değişken veya otomatik değişken olarak adlandırılır. Kapsamı yalnızca tanımlandığı işlevle sınırlıdır. Basit bir ifadeyle, yerel değişken vardır ve yalnızca bir işlevin içinden erişilebilir. Fonksiyon çıktığında yerel bir değişkenin ömrü sona erer (yok edilir).

Örnek:

#include <iostream>
using namespace std;
void test();
int main()
{

    int var = 5;
    test();
   

    var1 = 9;
}
void test()
{
   
    int var1;
    var1 = 6;
    // illegal: var not declared inside test()
    cout << var;
}

Var değişkeni test () içinde kullanılamaz ve var1 main () işlevi içinde kullanılamaz. Otomatik anahtar kelime daha önce yerel değişkenleri tanımlamak için kullanılırdı: auto int var; Ancak, C ++ 'den sonra auto farklı bir anlama sahiptir ve yerel değişkenleri tanımlamak için kullanılmamalıdır.

Genel ( Global ) DeÄŸiÅŸken

Bir değişken tüm fonksiyonların dışında tanımlanırsa, o zaman global değişken olarak adlandırılır. Global bir değişkenin kapsamı tüm programdır. Bu, beyanından sonra programın herhangi bir bölümünde kullanılabilir ve değiştirilebilir demektir. Aynı şekilde ömrü ancak program bittiğinde biter.

Örnek

#include <iostream>
using namespace std;


int c = 12;

void test();

int main()
{
    ++c;
    cout << c <<endl;
    test();

    return 0;
}

void test()
{
    ++c;
    cout << c;
}

Ekran çıktısı:

13
14

Yukarıdaki programda, c global bir değişkendir. Bu değişken, yukarıdaki programda hem main () hem de test () tarafından görülebilir.

Statik Yerel DeÄŸiÅŸken

Statik değişkeni tanımlamak için kullanılır.

Örnek olarak
... .. ...
int main()
{
   static float a;
   ... .. ...
}

Statik bir yerel değişken, yalnızca bildirildiği (yerel bir değişkene benzer) bir işlevin içinde bulunur, ancak ömrü işlev çağrıldığında başlar ve yalnızca program bittiğinde sona erer. Yerel değişken ile statik değişken arasındaki temel fark, statik değişkenin değerinin programın sonunda devam etmesidir.

Örnek

include <iostream>
using namespace std;

void test()
{
    // var is a static variable
    static int var = 0;
    ++var;

    cout << var << endl;
}

int main()
{
    
    test();
    test();

    return 0;
}

Ekran çıktısı:

1
2
Yukarıdaki programda test () işlevi 2 kez çağrılır. İlk çağrı sırasında değişken var, statik değişken olarak bildirilir ve 0 olarak ilklendirilir. Ardından ekranda görüntülenen var'a 1 eklenir. Fonksiyon test () döndüğünde, var değişkeni statik bir değişken olduğu için hala mevcuttur. İkinci işlev çağrısı sırasında, yeni değişken var oluşturulmaz. Aynı değişken 1 artırılır ve ardından ekranda görüntülenir.


Sabitler :

Sabitler , değişkenlerin aksine programda belirli bir değere sahiplerdir. Program boyunca bu değer hafızada tutulur ve kullanılır. Yani sabitlerin değerini değiştiremeyiz.

Sabit bildirimi, baÅŸlangıç deÄŸeri verilen deÄŸiÅŸken bildirimi gibi yapılır. Ancak, veri tipinin önüne const anahtar sözcüğü konmalıdır.


Örnek;


const float PI = 3.142857;
const double NOT= 12345.8596235489;
const int EOF= -1;


Aynı ÅŸekilde sabit tanımlamayı #define ön iÅŸlemci komutu ile de gerçekleÅŸtirebiliriz.   

#define MAX 100
#define LENGTH 10
#define  WIDTH 5

VERİ TİPLERİ


Herhangi bir dilde program yazarken, çeÅŸitli bilgileri depolamak için çeÅŸitli deÄŸiÅŸkenler kullanmanız gerekir. DeÄŸiÅŸkenler, deÄŸerleri saklamak için ayrılmış bellek konumlarından baÅŸka bir ÅŸey deÄŸildir. Bu, bir deÄŸiÅŸken oluÅŸturduÄŸunuzda bellekte biraz yer ayırdığınız anlamına gelir.



C++ da veri türleri temel olarak üçe ayrılır.


İLKEL YERLEŞİK TÜRLER

Bu veri türleri yerleÅŸik veya önceden tanımlanmış veri türleridir ve kullanıcı tarafından deÄŸiÅŸkenleri bildirmek için doÄŸrudan kullanılabilir. Ã¶rnek: int, char, float, bool vb. C ++ 'da bulunan ilkel veri türleri aÅŸağıdaki tabloda verilmiÅŸtir. 




İlkel veri tiplerinden birkaçını açıklayalım.

int: Tam sayı olan deÄŸiÅŸkenleri tanımlamak istediÄŸimizde int veri tipini kullanırız. int ingilizce de tam sayı anlamına gelen integer kelimesinden gelmektedir. 

double: Ondalıklı olarak tanımlayacağımız deÄŸiÅŸkenleri double veri tipiyle yazarız.

float: Float veri tipini de double veri tipi gibi ondalıklı olarak yazdırmamız gereken deÄŸiÅŸkenleri tanımlarken kullanırız. 

char:  char tipinde deÄŸiÅŸken deÄŸer atandıktan sonra bir karakteri temsil etmektedir.







TÜRETİLMİŞ VERİ TÜRLERİ

Türetilmiş veri türleri ilkel yerleşik veri türlerinden türetilmiştir . Bunlar 4 tipte olabilir;
  • Function
  • Array
  • Pointer
  • Referance

KULLANICI TANIMLI VERİ TÜRLERİ

Bu veri türleri kullanıcının kendisi tarafından tanımlanırC ++, aşağıdaki kullanıcı tanımlı veri türlerini sağlar:
  • Class
  • Structure
  • Union
  • Enumeration
  • Typedef defined DataType




Kaynakça

https://www.tutorialspoint.com/cplusplus/cpp_constants_literals.htm#:~:text=Advertisements,Characters%2C%20Strings%20and%20Boolean%20Values.

https://www.quora.com/What-things-would-you-change-about-C++-if-you-could

https://www.guru99.com/cpp-tutorial.html

https://medium.com/@dijitalgezginler16/c-programlama-dili-veri-tipleri-de%C4%9Fi%C5%9Fkenler-ve-sabitler-1ce8c43003c1

http://yapbenzet.kocaeli.edu.tr/cpp-degiskenleri-sabitleri/

https://merttopuz.com/yazilim/cpp/cpp-sabitler

https://firateski.com/ders-2-cpp-degiskenler

https://www.programiz.com/cpp-programming/storage-class#:~:text=A%20variable%20defined%20inside%20a,accessed%20only%20inside%20a%20function.