Kontrol Yapıları

1 if kullanımı

1.1 if gösterimi

if(<koşul>) {
        ## kodlar
} 

Yukarıdaki kod, koşul yanlışsa hiçbir şey yapmaz. Koşul yanlış olduğunda yürütmek istediğiniz bir eyleminiz varsa, o zaman bir else cümlesine ihtiyacınız vardır.

if(<koşul>) {
        ## kodlar
}else {
        ## kodlar
}
if(<kosul1>) {
        ## kodlar
} else if(<kosul2>)  {
        ## kodlar
} else {
        ## kodlar
}

Geçerli Bir Örnek

##  bir rastgele sayı oluşturun
set.seed(41)
x <- runif(1, 0, 10)
if(x > 3) {
        y <- 10
} else {
        y <- 0
}
x;y
## [1] 2.134905
## [1] 0

veya

y <- if(x > 3) {
        10
} else { 
        0
}
x;y
## [1] 2.134905
## [1] 0

Kullanımına bir örnek verilecek olursa

x <-60
# Başarılı Durum
if(x>=65){
print("Basarılı")
}else{
print("Basarisiz")
}
## [1] "Basarisiz"

ya da

x <- 75 # Başarılı Durum
if(x>=90){
print("AA")
}else if(x>=80){
print("BA")
}else if(x>=70){
print("BB")
}else if(x>=65){
print("CB")
}else if(x>=60){
print("CC")
}else if(x>=50){
print("DD")
}else if(x>=30){
print("FD")
}else{
print("FF")
}
## [1] "BB"

1.2 Başarı düzeyi fonksiyonu yazalım

basaridurumu <- function(x) {
if(x>=90){
print("AA")
}else if(x>=80){
print("BA")
}else if(x>=70){
print("BB")
}else if(x>=65){
print("CB")
}else if(x>=60){
print("CC")
}else if(x>=50){
print("DD")
}else if(x>=30){
print("FD")
}else{
print("FF-Allah kurtarsın kardeşim")
}
}

basaridurumu(25)
## [1] "FF-Allah kurtarsın kardeşim"

1.3 Sıra Sizde if

a sayısının çarpmaya göre tersi 1/a’dir. Ancak bu durum 0 için tanımsızdır. if() durum cümlesi kullanarak bu durumu kodlayınız. x <- 5 ve x<-0 için için test ediniz.

a <-6

if(a==0){
print("1/0 tanımsızdır.")
}else{
print(paste(a,"'in carpmaya gore tersi 1/",a,sep=""))
}
## [1] "6'in carpmaya gore tersi 1/6"

2 if ve all

all fonkisyonu ile vektörün tüm elemanları için koşul testi yapabilir.

x <- c(1,2,-3,4)
if(all(x>0)){
  
  print("tum sayilar 0'dan buyuktur")
  
} else{
  
  print("tum sayilar 0'dan buyuk degildir")
}
## [1] "tum sayilar 0'dan buyuk degildir"

veya

dogumyillari <- c(1992,2008,1978,1983)
if(all(dogumyillari<=1999)){
  
  print("herkes en az 30 yasındadır")
  
} else{
  
  print("sevgili ebeveynler cocuklarımıza sahip cıkalım")
}
## [1] "sevgili ebeveynler cocuklarımıza sahip cıkalım"

3 if ve any

Bir vektörde içinde yer alan her hangi bir elemana dair test ise if() fonksiyonu içinde any() fonksiyonu ile sağlanabilir

x <- c(1,2,-3,4)
if(any(x<0)){
  
  print("nesne en az bir negatif sayi icerir")
  
} else{
  
  print("nesne negatif sayi icermez")
}
## [1] "nesne en az bir negatif sayi icerir"

3.1 if ile çoklşu işlem

x <- 6
if(x == 2) {
  
  goster3 <- "Dogru"  
  goster3b <- c(1,2,3)
  goster3c <- sample(1:1000,4)
} else  {
  
  goster3 <- "Yanlis"  
  goster3b <- c(3,2,1)
  goster3c <- 10000 + sample(1:1000,4)
  
}

goster3c
## [1] 10163 10005 10096 10894

4 ifelse

ifelse(koşul, Doğru İfade, Yanlış İfade)

x <- 20
ifelse(x>= 65, "Başarılı" ,"Başarısız")
## [1] "Başarısız"

4.1 ifelse denemesi

menu1 <- c("ekmek", "corba", "et", "tatlı")
menu2 <- c("pilav", "corba", "sebze yemegi", "salata")
menuler <- list(menu1,menu2)

for (i in seq_along(menuler)) {
  sonuc <- ifelse("et" %in% menuler[[i]], "yenir", "yenmez")
  print(paste("Menu", i, ":", sonuc))
}
## [1] "Menu 1 : yenir"
## [1] "Menu 2 : yenmez"

5 for

for(i in 1:10) {
        print(i)
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9
## [1] 10
x <- c("a", "b", "c", "d")

for(i in 1:4) {
        ## 'x'in her bir öğesini yazdırır
        print(x[i])  
}
## [1] "a"
## [1] "b"
## [1] "c"
## [1] "d"

5.1 Ders Denemeleri - Sıra Sizde

x<-0
if(x==0){
  print("1/0 tanımsızdır.")
}else if(x!=0){
  print("5'in carpmaya gore tersi 1/5")
}
## [1] "1/0 tanımsızdır."
x<-0.5
if(x>=1){
  print("1’den buyuk.")
}else if(x>=0){
  print("-1 ile +1 arasında")
}else{
  print("-1’den kucuk")
}
## [1] "-1 ile +1 arasında"
vize <- c(60,70,80,90,55)
final <- c(45,65,70,50,80)
devam <- c(14,10,13,12,11)

ifelse(devam <= 11, 0.6*final,
       ifelse(final>=50,0.6*final+0.4+vize,"Tebrikler! Dersi bir kez daha almaya hak kazandınız!"))
## [1] "Tebrikler! Dersi bir kez daha almaya hak kazandınız!"
## [2] "39"                                                  
## [3] "122.4"                                               
## [4] "120.4"                                               
## [5] "48"

5.2 for’un çeşitli kullanımları

(X <- cbind(a = 1:5, b=2:6))
##      a b
## [1,] 1 2
## [2,] 2 3
## [3,] 3 4
## [4,] 4 5
## [5,] 5 6
Y <- array() #c() ile de oluşturulabilir, içine yazılacak vektörü oluşturma
for(i in 1:nrow(X)) {
  Y[i] <- X[i,1] + X[i,2]
}
X
##      a b
## [1,] 1 2
## [2,] 2 3
## [3,] 3 4
## [4,] 4 5
## [5,] 5 6
Y
## [1]  3  5  7  9 11
islem.kontrol <- array() #sonuçların yazılacağını oluşturmayı unutma
for(i in 1:10){
  islem.kontrol[i] <- paste("Islem ", i, " tamamlandi", sep="")
}
islem.kontrol
##  [1] "Islem 1 tamamlandi"  "Islem 2 tamamlandi"  "Islem 3 tamamlandi" 
##  [4] "Islem 4 tamamlandi"  "Islem 5 tamamlandi"  "Islem 6 tamamlandi" 
##  [7] "Islem 7 tamamlandi"  "Islem 8 tamamlandi"  "Islem 9 tamamlandi" 
## [10] "Islem 10 tamamlandi"
X <- cbind(1:5, 21:25)
X
##      [,1] [,2]
## [1,]    1   21
## [2,]    2   22
## [3,]    3   23
## [4,]    4   24
## [5,]    5   25
for(i in 1:nrow(X)){
  cat(i,". satirdaki sayilarin carpimi = ", X[i,1]*X[i,2]," olarak hesaplanmıştır.",sep = "", "\n")
}
## 1. satirdaki sayilarin carpimi = 21 olarak hesaplanmıştır.
## 2. satirdaki sayilarin carpimi = 44 olarak hesaplanmıştır.
## 3. satirdaki sayilarin carpimi = 69 olarak hesaplanmıştır.
## 4. satirdaki sayilarin carpimi = 96 olarak hesaplanmıştır.
## 5. satirdaki sayilarin carpimi = 125 olarak hesaplanmıştır.

5.3 next kullanımı

for(i in 1:6){
  if(i==3){
next
  }
  print (i)}
## [1] 1
## [1] 2
## [1] 4
## [1] 5
## [1] 6
set.seed(41)
sayilar <- sample(0:10,30,replace=TRUE)

for(i in sayilar){
  if(i==0){
next
  }
  cat("1/",i,sep="","\n")}
## 1/7
## 1/2
## 1/4
## 1/7
## 1/9
## 1/5
## 1/5
## 1/1
## 1/1
## 1/10
## 1/5
## 1/1
## 1/4
## 1/5
## 1/3
## 1/3
## 1/1
## 1/3
## 1/5
## 1/1
## 1/1
## 1/3
## 1/3
## 1/4
## 1/2
## 1/5
## 1/10

##Break fonksiyonu

for(i in 1:12){
  if(i==3){
break
  }
  print (i)}
## [1] 1
## [1] 2
set.seed(41)
sayilar1 <- sample(-5:5,30,replace=TRUE)
for(i in sayilar1){
  print (i)
  if(i<0){
break
  }#print breakten sonra olursa -3ü yazmadan döngüyü kırıyor
  }
## [1] 2
## [1] -3
set.seed(853)
y<-matrix(rnorm(1000000),nrow=1000)
z<-0*y
#loop:
time2 <- system.time(
  for(i in 1:1000){
  for(j in 1:1000){
z[i,j]<-y[i,j]^2
  }
})

time2
##    user  system elapsed 
##    0.08    0.00    0.07

Aynı işlemi döngüsüz yapma

time3 <- system.time(z<-y^2)
time3
##    user  system elapsed 
##       0       0       0
x <- matrix(1:6, 2, 3)

for(i in seq_len(nrow(x))) {
        for(j in seq_len(ncol(x))) {
                print(x[i, j])
        }   
}
## [1] 1
## [1] 3
## [1] 5
## [1] 2
## [1] 4
## [1] 6
m2 <- matrix(0,nrow=5,ncol=5)
m2
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    0    0    0    0    0
## [2,]    0    0    0    0    0
## [3,]    0    0    0    0    0
## [4,]    0    0    0    0    0
## [5,]    0    0    0    0    0
m2 <- matrix(0,nrow=5,ncol=5)

for(i in 1:nrow(m2)) {
        for(j in 1:ncol(m2)) {
                m2[i,j]<- i*j
        }   
}
m2
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    2    3    4    5
## [2,]    2    4    6    8   10
## [3,]    3    6    9   12   15
## [4,]    4    8   12   16   20
## [5,]    5   10   15   20   25

6 While Döngüsü

count <- 0
while(count < 10) {
        print(count)
        count <- count + 1
}
## [1] 0
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9

While döngüleri düzgün yazılmazsa sonsuz döngülere neden olabilir. Dikkatli kullanın!

Bazen testte birden fazla koşul olabilir.

i=1
#while(i<-1)
  {
  i=i+1
  print(i) 
} #mesela:)
## [1] 2
gibi bişey
gibi bişey
z <- 5
set.seed(1)

while(z >= 3 && z <= 10) {  
        coin <- rbinom(1, 1, 0.5)
        
        if(coin == 1) {  ## rastgele çalışır
                z <- z + 1
        } else {
                z <- z - 1
        } 
}
print(z)
## [1] 2

Koşullar her zaman soldan sağa doğru değerlendirilir. Örneğin, yukarıdaki kodda z 3’ten küçük olsaydı, ikinci test değerlendirilmezdi.

7 Repeat

repeat başlangıçtan itibaren sonsuz bir döngü başlatır. Bunlar istatistiksel veya veri analizi uygulamalarında yaygın olarak kullanılmaz, ancak kullanım alanları vardır. Bir repeat döngüsünden çıkmanın tek yolu break çağrısı yapmaktır.

Olası bir paradigma, bir çözüm arıyor olabileceğiniz ve çözüme ulaşana kadar durmak istemediğiniz yinelemeli bir algoritmada olabilir.

x0 <- 1
tol <- 1e-8

repeat {
        x1 <- computeEstimate()
        
        if(abs(x1 - x0) < tol) {  ## Yeterince yakın mı? Önceki sayı ile fark yeterli mi
                break
        } else {
                x0 <- x1
        } 
}

8 ÖDEVLER

8.1 Soru 1

S1. Kullanıcı tarafından belirlenen nxn boyutunda bir matris oluşturulsun. nxn bir matrisin her bir elemanı satır ve sütun indeksleri çarpımı olsun. Örneğin 2. satır 5. sütun elemanı 2*5=10 olsun

Eger matrisin boyutları 10x10’dan büyükse sadece 10 satırını yazsın eğer matrisi boyutları 10x10’dan küçükse hepsini yazsın.

n <- as.integer(readline("Matris boyutu (nxn) icin n kac olsun? ="))

matris <- matrix(0, nrow = n, ncol = n)

for (i in 1:n) {
  for (j in 1:n) {
    matris[i, j] <- i * j
  }
}

# if ile n değerine göre koşul
if (n > 10) {
  print(matris[1:10, ])
} else {
  print(matris)
}

8.2 Soru 2

Fibonacci dizisinin elemanlari 1 1 2 3 5 8 13 21 34 55 89 … dizinin elemanlarını for() ve/ve ya while() döngüsü ile oluşturmaya çalışınız.

fibonacci <- c(1,1) #baslangici manuel olarak ayarlıyoruz çünkü aklımıza başka bir yol gelmiyor
n <- as.integer(readline("Kac elemanda bitirelim?....")) #duracağımız yeri bilelim

for (i in 3:n){
  
  fibonacci <- c(fibonacci,fibonacci[i-1]+fibonacci[i-2])
  
}
fibonacci

8.3 Soru 3

Örnek veri Seti

set.seed(1786)
ornek<-exp(matrix(rnorm(2000),nrow=100))
index1.temp<-sample(1:100,10)
index2.temp<-sample(1:20,10)
for(i in 1:10){
  ornek[index1.temp[i],index2.temp[i]]<--1
}
 head(ornek,6)
##           [,1]      [,2]      [,3]      [,4]      [,5]      [,6]     [,7]
## [1,] 0.5549525 0.3247338 0.5236032 0.3821027 0.4187483 0.1588847 5.226161
## [2,] 0.5671734 1.2431592 0.8812069 2.6695443 0.6984453 1.0838792 1.079946
## [3,] 4.8068457 0.3449856 0.6079096 0.9194116 1.5361330 1.9082522 0.671977
## [4,] 1.3509234 2.3569582 0.1931423 4.0707377 0.3527276 2.3498825 1.198514
## [5,] 0.9012032 0.2310683 0.2317487 1.3809955 0.9168741 0.6237213 1.609403
## [6,] 1.2331483 1.1066056 0.3546027 0.3705946 0.9002303 0.2528151 3.337512
##           [,8]      [,9]     [,10]     [,11]     [,12]     [,13]     [,14]
## [1,] 2.6280057 1.2251526 0.4760966 5.2379018 1.4782655 1.3761338 1.0202608
## [2,] 2.2087385 0.5195551 0.3757409 0.9004808 0.7409205 2.0543842 0.3668661
## [3,] 1.5310016 0.6735007 2.2069776 0.5060078 0.7171477 1.2378655 0.3651527
## [4,] 2.5592899 1.8205257 1.2624052 0.1524106 0.3828322 1.2406799 0.7954326
## [5,] 1.1005990 1.0619758 2.1047783 2.7816902 1.4010878 0.6140937 0.5136842
## [6,] 0.9799103 2.7520425 2.5407624 1.3889136 0.4346808 1.0637950 0.1859157
##          [,15]     [,16]      [,17]     [,18]    [,19]     [,20]
## [1,] 0.1437680 4.1807643  1.7389423 3.0760640 1.550557 4.4838291
## [2,] 3.8674407 1.9349214  0.6333922 0.4862532 5.275571 0.1161029
## [3,] 1.4724240 0.5971116 11.5869157 0.7580736 4.755297 1.0583051
## [4,] 0.1243085 0.8376231  1.3723291 2.0884571 2.506128 1.2094517
## [5,] 6.2971803 0.8422164  1.5335222 0.3079718 2.729447 1.7164885
## [6,] 3.8052219 2.1611055  0.3280288 2.7773368 1.726558 1.3193446

ornek veri setinde i. satırda negatif sayı yok ise çıktıda i. satırın ortalaması….dir yazsin.

for(i in 1:nrow(ornek)){
  
  satir <- ornek[i, ]
if(all(satir>=0)){
  
  print(paste("Satir",i,"ortalamasi ",mean(satir),"'dir."))
  
} else if(sum(satir<0)>3){
  
  print(paste("Çok sayida negatif sayı bulunmaktadır"))
} else {
  
  print(paste("Satir",i,"negatif sayi icermektedir."))
}
}
## [1] "Satir 1 ortalamasi  1.81024640410365 'dir."
## [1] "Satir 2 ortalamasi  1.38518610357355 'dir."
## [1] "Satir 3 ortalamasi  1.91306477718819 'dir."
## [1] "Satir 4 ortalamasi  1.4112379414075 'dir."
## [1] "Satir 5 ortalamasi  1.4449874985066 'dir."
## [1] "Satir 6 ortalamasi  1.45095623366252 'dir."
## [1] "Satir 7 ortalamasi  1.28395242730511 'dir."
## [1] "Satir 8 ortalamasi  1.09256285552594 'dir."
## [1] "Satir 9 ortalamasi  1.42368154628106 'dir."
## [1] "Satir 10 negatif sayi icermektedir."
## [1] "Satir 11 ortalamasi  1.63867357063309 'dir."
## [1] "Satir 12 negatif sayi icermektedir."
## [1] "Satir 13 ortalamasi  1.47012239341985 'dir."
## [1] "Satir 14 ortalamasi  1.68760963291761 'dir."
## [1] "Satir 15 ortalamasi  1.51554665095691 'dir."
## [1] "Satir 16 ortalamasi  1.99518274468864 'dir."
## [1] "Satir 17 ortalamasi  1.47942292790106 'dir."
## [1] "Satir 18 ortalamasi  1.4444947260594 'dir."
## [1] "Satir 19 ortalamasi  1.54378752827146 'dir."
## [1] "Satir 20 ortalamasi  2.17983862702061 'dir."
## [1] "Satir 21 ortalamasi  1.48707990280766 'dir."
## [1] "Satir 22 ortalamasi  2.10918427665028 'dir."
## [1] "Satir 23 ortalamasi  2.53701879215026 'dir."
## [1] "Satir 24 negatif sayi icermektedir."
## [1] "Satir 25 negatif sayi icermektedir."
## [1] "Satir 26 ortalamasi  0.981573869823853 'dir."
## [1] "Satir 27 ortalamasi  2.10120070726688 'dir."
## [1] "Satir 28 ortalamasi  1.58708489312329 'dir."
## [1] "Satir 29 ortalamasi  2.07934105483056 'dir."
## [1] "Satir 30 ortalamasi  1.62838414992845 'dir."
## [1] "Satir 31 ortalamasi  1.06213338682266 'dir."
## [1] "Satir 32 ortalamasi  1.30176914432271 'dir."
## [1] "Satir 33 ortalamasi  1.22716566563699 'dir."
## [1] "Satir 34 ortalamasi  1.68089750840266 'dir."
## [1] "Satir 35 ortalamasi  2.04330971448464 'dir."
## [1] "Satir 36 ortalamasi  1.62042716634191 'dir."
## [1] "Satir 37 ortalamasi  1.49511549814556 'dir."
## [1] "Satir 38 negatif sayi icermektedir."
## [1] "Satir 39 ortalamasi  1.64957267061729 'dir."
## [1] "Satir 40 negatif sayi icermektedir."
## [1] "Satir 41 ortalamasi  1.61087414481598 'dir."
## [1] "Satir 42 ortalamasi  2.51292782080857 'dir."
## [1] "Satir 43 ortalamasi  1.29253831341951 'dir."
## [1] "Satir 44 ortalamasi  0.995338317972212 'dir."
## [1] "Satir 45 ortalamasi  1.06319606969695 'dir."
## [1] "Satir 46 ortalamasi  2.08723014108201 'dir."
## [1] "Satir 47 ortalamasi  1.63838098483115 'dir."
## [1] "Satir 48 ortalamasi  1.58748051253287 'dir."
## [1] "Satir 49 ortalamasi  1.36039204193038 'dir."
## [1] "Satir 50 ortalamasi  2.5030812334855 'dir."
## [1] "Satir 51 negatif sayi icermektedir."
## [1] "Satir 52 ortalamasi  1.1701846988099 'dir."
## [1] "Satir 53 ortalamasi  1.39932665703517 'dir."
## [1] "Satir 54 ortalamasi  0.851813922412085 'dir."
## [1] "Satir 55 ortalamasi  1.38874171912631 'dir."
## [1] "Satir 56 ortalamasi  1.28819137534643 'dir."
## [1] "Satir 57 ortalamasi  2.40583121888184 'dir."
## [1] "Satir 58 ortalamasi  0.954909626512 'dir."
## [1] "Satir 59 ortalamasi  1.37212622963709 'dir."
## [1] "Satir 60 ortalamasi  1.38257148153171 'dir."
## [1] "Satir 61 ortalamasi  1.13360242378072 'dir."
## [1] "Satir 62 ortalamasi  0.710679121145175 'dir."
## [1] "Satir 63 ortalamasi  1.01854602443719 'dir."
## [1] "Satir 64 negatif sayi icermektedir."
## [1] "Satir 65 ortalamasi  1.15965812704672 'dir."
## [1] "Satir 66 ortalamasi  0.842555588739729 'dir."
## [1] "Satir 67 ortalamasi  1.35084607269106 'dir."
## [1] "Satir 68 ortalamasi  1.14463972482843 'dir."
## [1] "Satir 69 ortalamasi  1.31510707964177 'dir."
## [1] "Satir 70 ortalamasi  1.60246658326134 'dir."
## [1] "Satir 71 ortalamasi  1.91370003124893 'dir."
## [1] "Satir 72 ortalamasi  2.17726089691906 'dir."
## [1] "Satir 73 ortalamasi  1.1509167872398 'dir."
## [1] "Satir 74 ortalamasi  3.37881346599407 'dir."
## [1] "Satir 75 ortalamasi  1.4458712001827 'dir."
## [1] "Satir 76 ortalamasi  1.65784983950186 'dir."
## [1] "Satir 77 ortalamasi  1.11154005692112 'dir."
## [1] "Satir 78 ortalamasi  1.66369767927207 'dir."
## [1] "Satir 79 ortalamasi  1.3726424347633 'dir."
## [1] "Satir 80 ortalamasi  1.45540060332781 'dir."
## [1] "Satir 81 ortalamasi  1.1547741826877 'dir."
## [1] "Satir 82 ortalamasi  3.34868667286079 'dir."
## [1] "Satir 83 ortalamasi  2.63518520261191 'dir."
## [1] "Satir 84 ortalamasi  1.35479992704511 'dir."
## [1] "Satir 85 ortalamasi  1.95680972834867 'dir."
## [1] "Satir 86 negatif sayi icermektedir."
## [1] "Satir 87 ortalamasi  1.45020821996795 'dir."
## [1] "Satir 88 ortalamasi  1.15091491124661 'dir."
## [1] "Satir 89 ortalamasi  1.25524639987064 'dir."
## [1] "Satir 90 ortalamasi  0.763787021104584 'dir."
## [1] "Satir 91 ortalamasi  1.29539957747794 'dir."
## [1] "Satir 92 negatif sayi icermektedir."
## [1] "Satir 93 ortalamasi  1.23735048852641 'dir."
## [1] "Satir 94 ortalamasi  2.15189363654345 'dir."
## [1] "Satir 95 ortalamasi  1.4852096703456 'dir."
## [1] "Satir 96 ortalamasi  1.56903650889034 'dir."
## [1] "Satir 97 ortalamasi  1.74906359142209 'dir."
## [1] "Satir 98 ortalamasi  2.91382990626373 'dir."
## [1] "Satir 99 ortalamasi  1.32444388929016 'dir."
## [1] "Satir 100 ortalamasi  1.72039519136943 'dir."

8.4 Soru 4

Bu kısmı yapamadım, denedim, olmadı, kopya çektim, yine olmadı.

içi dolu kare

n <- 5
for(i in 1:n){
  for(j in 1:n){
    cat("* ")
  }
  cat("\n")
}
## * * * * * 
## * * * * * 
## * * * * * 
## * * * * * 
## * * * * *

içi boş kare

n <- 5  
for(i in 1:n){
  for(j in 1:n){
    if(i == 1 || i == n || j == 1 || j == n){
      cat("* ")
    } else {
      cat("  ")
    }
  }
  cat("\n")
}
## * * * * * 
## *       * 
## *       * 
## *       * 
## * * * * *

Dolu Üçgen

n <- 5  
for(i in 1:n){  
  for(j in 1:i){  
    cat("* ")
  }
  cat("\n")  
}
## * 
## * * 
## * * * 
## * * * * 
## * * * * *

Eşkenar Üçgen

n <- 5
eskenar <- for(i in 1:n){

  for(j in 1:(n-i)){
    cat(" ") 
  }
  
  for(k in 1:((2*i)-1)){
    cat("*")
  }
  
  cat("\n")
}  #en alt sırayı asla duzeltemedim
##     *
##    ***
##   *****
##  *******
##   *********

içi boş eşkenar

n <- 5  # Üçgenin yüksekliği

 for(i in 1:n){
  for(j in 1:(n - i)){
    cat(" ")
  }
  
  for(k in 1:(2 * i - 1)){
    if(k == 1 || k == (2 * i - 1) || i == n){  
      cat("*")
    } else {
      cat(" ")
    }
  }
  
  cat("\n")
}
##     *
##    * *
##   *   *
##  *     *
##   *********

dik üçgen

n <- 5  
for(i in 1:n){         
  for(j in 1:(n-i)){    
    cat(" ")
  }
  for(k in 1:i){       
    cat("*")
  }
  cat("\n")            
}
##     *
##    **
##   ***
##  ****
##   *****

diyagonal çizgi

n <- 5
for(i in 1:n){
  for(j in 1:(i - 1)){
    cat(" ")
  }
  cat("*\n")
}
##   *
##  *
##   *
##    *
##     *