Soru - 1 Kullanıcı Tarafından belirlenen bir N sayısına kadar olan tek sayıların karesini A vektörüne, çift sayıların küpünü B vektörüne atan kod parçacığını yazınız.

Cevap - 1

n=50
A=c()
B=c()
for (i in 1:n)
{
  
  if (i %% 2==0)
  {
    B=append(B,i^3)
  } else
  {
    A=append(A,i^2)
  }
  
}

Soru - 2 Kullanıcı tarafından girilen bir b sayısı ile başlayan M dizisinin elemanları aşağıda gösterildiği gibi devam etmektedir.

M=[a, a2, (a2)3, ((a2)3)4,…] Bu dizinin n. elemanını ekrana yazdıran kod parçacığını yazınız.

Cevap - 2

b=2
n=5
sonuclar=c(b)
deger=b
for (i in 2:n)
{
  deger=deger^i
  sonuclar=append(sonuclar,deger)
}

Soru - 3 1’den N’e kadar olan sayılar içerisind 3’e kalansız olarak bölündüğü halde 4’e kalansız olarak bölünmeyen sayıları bir A vektötürüne atan kod parçacığını yazınız.

Cevap - 3

n=500
A=c()

for (i in 1:500)
{
  
  if (i %% 3==0 && i %% 4!=0)
  {
    A=append(A,i)
  } 
  
}

Soru - 4 ABCD = ACBD + (CD x D) eşitliği sağlayan 4 basamaklı sayıları bir A vektörüne atan kod parçacığını yazınız.

Cevap - 4

A=c()
for (i in 1000:9999)
{
  v1=as.integer(strsplit(as.character(i),"")[[1]])
  # ABCD = ACBD + (CD x D)
  abcd=i
  a=v1[1]
  b=v1[2]
  c=v1[3]
  d=v1[4]
  acbd=1000*a+100*c+10*b+d
  cd=10*c+d
  if (abcd==(acbd+(cd*d))) {
   A=append(A,abcd)
  }
}

Soru - 5 ABCDE = BCDEA - CDE eşitliğini sağlayan sayılara uydurma sayılar denir. 5 Basamaklı bir XYZWQ sayısının uydurma sayı olup olmadığını kontrol eden kod parçacığını yazınız.

Cevap - 5

  sayi=88999
  v1=as.integer(strsplit(as.character(sayi),"")[[1]])
  # ABCDE = BCDEA - (A x CDE)
  abcde=sayi
  a=v1[1]
  b=v1[2]
  c=v1[3]
  d=v1[4]
  e=v1[5]
  bcdea=10000*b+1000*c+100*d+10*e+a
  cde=100*c+10*d+e
  if (abcde==(bcdea-cde))
    paste(abcde,"sayısı uydurma sayıdır.") else 
      paste(abcde,"sayısı uydurma sayı değildir.")
## [1] "88999 sayısı uydurma sayıdır."

Soru - 6 Bir iş yerinde 7 kasiyer çalışmaktadır. Haftanın her günü bir kasiyer izinlidir. Bir kasiyerin izinli olduğu gün her hafta bir sonraki güne denk gelecek şekilde ötelenmektedir.

Ör: Çalışanlar (A,B,C,D,E,F,G)

  1. hafta Pzt - Sal - Çar - Per - Cum - Cmt - Pzr İzinli A B C D E F G

  2. hafta Pzt - Sal - Çar - Per - Cum - Cmt - Pzr İzinli G A B C D E F

Bu bilgiler ışığında n. haftanın çarşamba gününde izinli olan kasiyerin adını ekrana yazdıran kod parçacığını yazınız…

Cevap - 6

kasiyerler=c("a","b","c","d","e","f","g")
hafta1=kasiyerler
haftalar=data.frame()

haftalar=rbind(haftalar,kasiyerler)

for (i in 1:6)
{
  haftalar=rbind(haftalar,c(kasiyerler[(8-i):7],kasiyerler[1:(8-i)]))
}

colnames(haftalar)=c("Pzt","Sal","Çar","Per","Cum","Cmt","Pzr")


#yukarıdaki kod bloğu çalıştırıldığında aşağıdaki gibi bir veri çerçevesi oluşur

#    Pzt Sal Çar Per Cum Cmt Pzr
# 1   a   b   c   d   e   f   g
# 2   g   a   b   c   d   e   f
# 3   f   g   a   b   c   d   e
# 4   e   f   g   a   b   c   d
# 5   d   e   f   g   a   b   c
# 6   c   d   e   f   g   a   b
# 7   b   c   d   e   f   g   a

# bu veri çerçevesi 7 haftalık izin çizelgesini göstermektedir ve bu çizelge
# 7 haftada bir başa dönmektedir. 

#verilen n değerinin mod 7'si bulunduğunda bu veri çerçevesinin kaçıncı satırının
#dikkate alınacağı anlaşılır.

#hangi günde kimin izinli olduğunu öğrenmek için gün indisi kullanılır.
#pzt=1, sal=2, çar=3, per=4, cum=5, cmt=6, pzr=7

n=32 #32. hafta

kalan= n %% 7

gun=3 #Çarşamba

izinli=haftalar[kalan,gun]

paste(n,".hafta çarşamba günü izinli personel: ",izinli,sep = "")
## [1] "32.hafta çarşamba günü izinli personel: g"

Soru - 7 Kullanıcı tarafından girilen bir metinde sırası ile; 2 harfli kelimeleri K2 3 harfli kelimeleri K3 4 harfli kelimeleri K4 5 harfli kelimeleri K5 6 harfli kelimeleri K6 dizisine aktaran kod parçacığını yazınız…

Cevap - 7

metin="selçuk üniversitesi fen fakültesi, aktüerya bölümü"

kelimeler=strsplit(metin," ")[[1]]

uzunluk=length(kelimeler)

K2=c()
K3=c()
K4=c()
K5=c()
K6=c()
for (i in 1:uzunluk)
{
  k_uzunluk=nchar(kelimeler[i])
  
  if (k_uzunluk==2) {K2=append(K2,kelimeler[i])} else
    if (k_uzunluk==3) {K3=append(K3,kelimeler[i])} else
      if (k_uzunluk==4) {K4=append(K4,kelimeler[i])} else
        if (k_uzunluk==5) {K5=append(K5,kelimeler[i])} else
          if (k_uzunluk==6) {K6=append(K6,kelimeler[i])}
}

Soru - 8 Girilen bir metindeki kelimeleri ayrıştırarak her kelimeden yanlızca bir tane olacak şekilde Benzersiz_Kelimeler vektörüne aktaran bir fonksiyon yazınız. (Unique fonksiyonu kullanılmayacak!)

Cevap - 8

# bu işlemi "unique" fonksiyonu ile tek hamlede yapabiliriz. 
# yenikelimeler=unique(kelimeler)
# Ama soru gereği bunu kullanmamız yasak olduğundan bu fonksiyon ile aynı işe 
# yarayan bir fonksiyonu  biz yazalım


kelimelere_ayristir = function(metin)
{
  
  kelimeler=strsplit(metin," ")[[1]]
  
  benzersiz_kelimeler=c()
  
  kelime_say=length(kelimeler)
  
  for (i in 1:kelime_say)
  {
    if (is.element(kelimeler[i], benzersiz_kelimeler)==FALSE)
    {
      benzersiz_kelimeler=append(benzersiz_kelimeler,kelimeler[i])
    }
  }
  
  return(benzersiz_kelimeler)
  
}

yazi="selçuk üniversitesi fen fakültesi aktüerya ve istatistik bölümleri final sınavı soruları selçuk üniversitesi fen fakültesi programlama dersi final sınavı soruları"

kelimelere_ayristir(yazi)
##  [1] "selçuk"       "üniversitesi" "fen"          "fakültesi"    "aktüerya"    
##  [6] "ve"           "istatistik"   "bölümleri"    "final"        "sınavı"      
## [11] "soruları"     "programlama"  "dersi"

Soru - 9 Bir metinde yer alan kelimelerin metinde kaç kez geçtiğini yani metin içi frekanslarını hesaplayarak aşağıdaki örnekte gösterildiği gibi “kelime-frekans” olacak şekilde frekanslar isimli bir vektöre aktaran kod parçacığını yazınız.

Ör: Ali ata bak ali topu tut ali koş topu yakala ata bin hızlı koş

Frekanslar(Ali-3,ata-2,bak-1,topu-2,tut-1,koş-2,yakala-1,bin-1,hızlı-1)

Cevap - 9

metin="selçuk üniversitesi fen fakültesi aktüerya ve istatistik bölümleri final sınavı soruları selçuk üniversitesi fen fakültesi programlama dersi final sınavı soruları"

kelimeler=strsplit(metin," ")[[1]]

kelime_say=length(kelimeler)
frekanslar=c()

for (i in 1:kelime_say)
{
  frekans=0
  for (j in 1:kelime_say)
  {
    if (kelimeler[i]==kelimeler[j]) {frekans=frekans+1}
  }
  eklenecek=paste(kelimeler[i],frekans,sep = "-")
  if (is.element(eklenecek,frekanslar)==FALSE)
  {
    frekanslar=append(frekanslar,eklenecek)
  }
  
}

Soru - 10 Kullanıcı tarafından girilen bir kelimeyi aşağıdaki örnekte gösterildiği gibi bir listeye ekleyen kod parçacğını yazınız.

Ör: kelimenin içeriği “Selçuk” olsun. Kelimenin harf sayısı da “hs” olsun.

toplam hs*2-1 defa listeye ekleme yapılacaktır.

Liste_kelimeler

  1. ekleme —> Selçuk
  2. ekleme —> Selçuk Selçuk
  3. ekleme —> Selçuk Selçuk Selçuk
  4. ekleme —> Selçuk Selçuk Selçuk Selçuk
  5. ekleme —> Selçuk Selçuk Selçuk Selçuk Selçuk
  6. ekleme —> Selçuk Selçuk Selçuk Selçuk Selçuk Selçuk
  7. ekleme —> Selçuk Selçuk Selçuk Selçuk Selçuk
  8. ekleme —> Selçuk Selçuk Selçuk Selçuk
  9. ekleme —> Selçuk Selçuk Selçuk
  10. ekleme —> Selçuk Selçuk
  11. ekleme —> Selçuk

Cevap - 10

a=list()
kelime="ismail"
hs=nchar(kelime)
yenikelime=""
for (i in 1:hs)
{
  yenikelime=paste(yenikelime,kelime)
  a=append(a,yenikelime)
}

for (i in (hs-1):1)
{
  a=append(a,a[i])
}

Soru - 11 Girilen bir saniye değerini aşağıdaki örnekte gösterildiği gibi saat, dakika ve saniye şeklinde ayrıştırarak gösteren fonksiyonuz yazınız.

Ör: 25000 saniye = “6 saat 56 dakika 40 saniye”

Cevap - 11

saniye_ayristir=function(saniye)
{
  saniye_kalan=saniye %% 60
  dakika=trunc(saniye/60)
  dakika_kalan=dakika %% 60
  saat=trunc(dakika/60)
  paste(saat,"saat",dakika_kalan,"dakika",saniye_kalan,"saniye")  
}
saniye_ayristir(25000)
## [1] "6 saat 56 dakika 40 saniye"

Soru - 12 0-360 arasındaki tüm tam sayıları derece olarak değerlendirip her biri için sinüs, cosinüs, tanjant ve cotanjant değerlerini trigonometri isimli bir veri çerçevesine ekleyen kod parçacığını yazınız.

Cevap - 12

trigonometri = data.frame(
  Açı=c(),
  Sinüs=c(),
  Kosinüs=c(),
  Tanjant=c(),
  Kotanjant=c()
)

for (i in 1:360)
{
  x=(i*pi/180)
  trigonometri=rbind(trigonometri,c(i,sin(x),cos(x),tan(x),(1/tan(x))))
}

Soru - 13 Uzunluğu m genişliği n olan bir alan kare şeklindeki plakalar ile kaplanacaktır. Bu alan en az kaç adet kare plaka ile kaplanabilir.

Cevap - 13

m=150 #uzunluk 
n=120 #genişlik
if (n>m) {enb=n; enk=m} else {enb=m; enk=n}
for (i in enk:1)
{
  if (m %% i==0 && n %% i==0) 
  {
    kenar=i
    break
  }
}
sonuc=(m/kenar)*(n/kenar)
sonuc
## [1] 20

Soru - 14 uzun kenarı m kısa kenarı n olan dikdörtgen şeklindeki bahçenin etrafı eşit aralıktaki boşluklar bırakılarak çitle çevrilecektir. Bu bahçenin etrafını çevirmek için en az kaç adet çite ihtiyaç vardır.

Cevap - 14

m=150 #uzunluk 
n=120 #genişlik
if (n>m) {enb=n; enk=m} else {enb=m; enk=n}
for (i in enk:1)
{
  if (m %% i==0 && n %% i==0) 
  {
    bosluk=i
    break
  }
}
sonuc=2*(m/bosluk+1)+2*(n/bosluk-1)
sonuc
## [1] 18
#   #   #   #   #   #

#    uzunluk=150    #

#   genişlik=120    #

#     18 Adet       #

#   #   #   #   #   #

Soru - 15 1’den N e kadar olan pozitif tam sayıları, pozitif tam bölenleri ile birlikte bir list’e aşağıdaki örnekte gösterildiği gibi kaydeden kod parçacığını yazınız.

Örnek: n=6 olsun…

sonuclar listesinin çıktısı…

Cevap - 15

n=150
sonuclar=list()
for ( i in 1:150)
{
  bolenler=c(paste(i,"sayısının pozitif tam bölenleri: "))
  for (j in 1:i)
  {
    if (i %% j == 0) 
    {
      bolenler=append(bolenler,j)
    }
  }
  sonuclar=append(sonuclar,list(paste(bolenler,collapse = " ")))
}

Soru - 16 “Öğrenci_bilgileri” isimli veri çerçevesinde sırası ile

numara ad soyad Vize Notu Final Notu

şeklinde 4 sütun bulunmaktadır.

bu veri setine sırasıyla aşağıdaki sütunlar eklenecektir.

  1. Sütun —> Ortalama = Vize Notunun %40’ı + Final Notunun %60’ı
  2. Sütun —> Geçme Durumu = Ortalama 60’dan küçükse “kaldı” değilse “geçti”
  3. Sütun —> Harf Notu = 85-100 —-> AA 80-84 —-> BA 75-79 —-> BB 70-74 —-> CB 60-69 —-> CC <60 —-> FF

Veri çerçevesindeki satırlara ulaşarak her bir öğrenci için 5,6 ve 7. sütunları ekleyen kod parçacığını yazınız…

Cevap - 16

ogrenci_bilgileri= data.frame(
  numara=c(1,2,3,4,5),
  ad_soyad=c("a","b","c","d","e"),
  vize=c(50,55,60,65,70),
  final=c(60,65,70,75,80)
)

os=nrow(ogrenci_bilgileri) # satır yani öğrenci sayısı

# eklenecek sütünlar için gerekli hesaplamaları yapara 3 vektör oluşturalım.
# bu vektörlerde sırası ile ortalama, geçme durumu ve harf notu yer alacak.
# daha sonra bu vektörleri sütun ekleme komutundan yararlanarak veri çerçevesine
# ekleyebiliriz.

ortalama=c()
gecme_durumu=c()
harf_notu=c()

for (i in 1:os)
{
  # ortalama hesabı
  ort=round(ogrenci_bilgileri$vize[i]*0.4+ogrenci_bilgileri$final[i]*0.6) 
  ortalama=append(ortalama,ort)
  #########
  
  #geçme durumu sorgusu
  if (ort>=60) {durum="geçti"} else {durum="kaldı"} 
  gecme_durumu=append(gecme_durumu,durum)
  #########
  
  #harf sorugusu
  if (ort>=85) {harf="AA"} else
    if (ort<85 && ort>=80) {harf="BA"} else
      if (ort<80 && ort>=75) {harf="BB"} else
        if (ort<75 && ort>=70) {harf="CB"} else
          if (ort<70 && ort>=60) {harf="CC"} else
            if (ort<60) {harf="FF"}
  harf_notu=append(harf_notu,harf)
  #############
}

# oluşturulan vektörler öğrenci bilgileri veri çerçevesine yeni birer sütun 
# olarak ekleniyor.
ogrenci_bilgileri=cbind(ogrenci_bilgileri,ortalama,gecme_durumu,harf_notu)

Soru - 17 girilen bir metinden aşağıdaki vektörde yer alan noktalama işaretlerini kaldıran fonksiyonu yazınız.

Noktalama=c(“.”,“,”,“:”,“;”,“!”,“?”,“-”,"_")

Cevap - 17

noktalamasil=function(metin)
{
  Noktalama=c(".",",",":",";","!","?","-","_")
  yenimetin=""
  harf_say=nchar(metin)
  
  for (i in 1:harf_say)
  {
    harf=substr(metin,i,i)
    
    if (is.element(harf, Noktalama)==FALSE)
    {
      yenimetin=paste(yenimetin,harf,sep = "")
    }
  }
  return(yenimetin)  
}

metin="selçuk, :üniversitesi; fen fakültesi_ aktüerya-istatistik böl. final sınavı? soruları!"

noktalamasil(metin)
## [1] "selçuk üniversitesi fen fakültesi aktüeryaistatistik böl final sınavı soruları"