C ile programlamaya giriş final sınavı çözümleri
Yazan : Şadi Evren ŞEKER
Soru 0) Programın çalıştığı dizinde, “deneme.txt” isimli bir dosya açarak, bu dosyanın içerisine, birden yüze kadar olan sayıları bastıran bir kod yazınız. (10 puan) (sadece bu soru için program tam olmalı (include, return satırları gibi) ve yazım hatası bulundurmamalıdır ve kodunuz compile edildiğinde hata vermemelidir. )
#include <stdio.h>
int main(){
FILE *fp ;
fp = fopen(”deneme.txt”,”w”);
for(int i = 0;i<100;i++) { // veya for(int i=1 ;i<=100;i++){
fprintf(fp,”%d”,i);
}
fclose(fp);
}
Soru 1) Derste anlatılan filtreleme fonksiyonunu iki boyutlu matrisler için kodlayınız. Buna göre fonksiyonunuz iki boyutlu bir matris ve bir fonksiyon göstericisi alacak, matrisi RAM’deki aynı adreste filtreleyerek yeni matrisin boyutunu döndürecektir. Bu soruda hafızada silinen adreslerin kalması ve matrisin kare yapısının bozulması gibi konuları göz ardı edebilirsiniz. (35 puan)
Aşağıdaki örnek matrisi ele alalım:
0 1 2 3
7 6 5 4
8 9 10 11
15 14 13 12
Çift sayıları filtreleyen bir fonksiyon için dönüş matrisiniz aşağıdaki şekilde olmalıdır:
0 2 6 X
4 8 10 X
14 12 X X
X X X X
Yukarıda, X ile gösterilen değerler önemsizdir. Yukarıdaki matrisin yeni boyutu 3′tür.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int cift(int x){
return x%2 == 0;
}
int sqrt(int s){
int i ;
for(i = 0;i<s;i++){
if(i*i>s)
break;
}
return i;
}
int filtre (int (*fp)(int),int *a,int boyut){
int yeniboyut= boyut;
for(int i = 0;i<yeniboyut;i++){
if(!fp(a[i])){
for(int j = i;j<yeniboyut;j++){
a[j]= a[j+1];
}
yeniboyut–;
i–;
}
}
return yeniboyut;
}
int boyutlandir(int a[][4],int (*fp)(int),int boyut){
int *b = (int * ) malloc(sizeof(int) * boyut*boyut);
for(int i = 0;i<boyut*boyut;i++){
b[i] = a[i/boyut][i%boyut];
}
int yb = filtre(fp,b,boyut*boyut);
int yeniboyut = sqrt(yb);
for(int i = 0;i<yeniboyut;i++){
for(int j = 0;j<yeniboyut;j++){
a[i][j]=b[i*yeniboyut+j];
}
}
return yeniboyut;
}
int main(){
int x[4][4] = {{0,1,2,3},{4,5,6,7},{8,9,10,11},{12,13,14,15}};
int yeniboyut = boyutlandir( x,cift,4);
for(int i = 0;i<yeniboyut;i++){
for(int j = 0;j<yeniboyut;j++){
printf(”%d “, x[i][j]);
}
printf(”\n”);
}
getch();
}
Soru 2) Kullanıcıdan bir sayı okuyarak ekrana verilen boyutta bir kare matris içerisinde à (içi boş eşkenar dörtgen) çizdiren kodu yazınız. (20 puan)
5 sayısı için örnek çıktı
..*..
.*.*.
*…*
.*.*.
..*..
- Fonksiyonu iteratif olarak kodlayınız (döngü ile)
- Fonksiyonu recursive olarak kodlayınız (özyineli)
a)
#include <stdio.h>
#include <conio.h>
int main(){
printf(”bir sayi giriniz”);
int n;
scanf(”%d”,&n);
for(int i= 0;i<n;i++){
for(int j = 0;j<n;j++){
if(i+j == n/2 || i+j == 3*n/2-1 || i-j == n/2 || j-i == n/2
)
printf(”*”);
else
printf(” “);
}
printf(”\n”);
}
getch();
}
b)
#include <stdio.h>
#include <conio.h>
int f(int n,int i,int j){
if(j==n)
return 0;
if(i+j == n/2 || i+j == 3*n/2-1 || i-j == n/2 || j-i == n/2)
printf(”*”);
else
printf(” “);
f(n,i,j+1);
}
int g(int n,int i){
if(i==n)
return 0;
f(n,i,0);
printf(”\n”);
g(n,i+1);
}
int main(){
printf(”bir sayi giriniz”);
int n;
scanf(”%d”,&n);
g(n,0);
getch();
}
Soru 3) Bir dizginin içerisinde en uzun tekrarlı harfi bulunuz. (35 puan)
Örneğin “aabbbcccccaaaaadddxxxxbbb” dizgisi için, “ccccc” veya “aaaaa” sonuçlarından birisini yada ikisini de döndüren kodu yazınız. Eşit uzunluk durumunda herhangi birisini veya hepsini döndürmeniz doğru kabul edilecektir.
- Dizi (array) kullanarak kodlayınız
- Gösterici aritmetiği (pointer arithmetic) kullanarak kodlayınız. Bu şıkkın cevabında, dizi operatörü olan [] sembollerini hiç kullanmadan soruyu cevaplayınız.
a)
#include <stdio.h>
#include <conio.h>
int main(){
printf(”bir dizgi giriniz:”);
char giris[100];
scanf(”%s”,giris);
int boy1=0; //en uzun kelimenin boyu
int say1=0; // en uzun kelimenin ilk harfi
int say2=0; // en son kelimenin ilk harfi
int enuzun = 0;
for(int i = 0;giris[i]!=’\0′;i++){
if(giris[i]!=giris[i+1]){
printf(”boy1: %d boy2: %d say1: %d say2: %d\n”,boy1,i-say2,say1,say2);
if(boy1<i-say2){
boy1=i-say2;
say1=say2;
}
say2=i;
}
}
for(int i = say1+1;i<say1+boy1+1;i++){
printf(”%c”,giris[i]);
}
getch();
}
b)
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int main(){
printf(”bir dizgi giriniz:”);
char* giris=(char*)malloc(sizeof(char)*100);
scanf(”%s”,giris);
int boy1=0; //en uzun kelimenin boyu
char * say1=giris; //en uzun kelimenin basini gosterir
char * say2=giris; // en son kelimenin basini gosterir
char *p=giris; //dizgi ustunde yuzen pointer
while( *p!= ‘\0′){
if(*p!=*(p+1)){
if(boy1<p-say2){
boy1=p-say2;
say1=say2;
}
say2=p;
}
p++;
}
for(int i = 0;i<boy1;i++){
printf(”%c”,*(++say1));
}
getch();
}
« Çok Seviyeli Sıralar (Multi Level Queues) | Sierpinski Üçgeni (Sierpinski Triangle) »
Yorumlar
Bilgisayar Kavramları üzerinde şu anda okumakta olduğunuz 'C ile programlamaya giriş final sınavı çözümleri' isimli yazı 23 Jan 2010 tarihinde, saat: 09:47 'de Şadi Evren ŞEKER tarafından gönderilmiş, toplam 316 defa okunmuştur.
Benzer yazıları Uncategorized kategorilerinden okuyabilirsiniz. Yazar ile irtibat kurmak için email gönderebilirsiniz. Yazıya yorum yapabilir ya da yapılan yorumları RSS 2.0 ile takibe alabilirsiniz.
Yazarın Kitabı
Bu yazının yazarı Şadi Evren ŞEKER'in son çıkan kitabı "Programlama ve Veri Yapılarına giriş (C, C++ ve JAVA ile)" hakkında bilgi almak için Buraya tıklayabilirsiniz.
Eklenen Son Yazılar
- Visual Basic ile Gösterici (Pointer) Kullanımı
- Hasse Çizgeleri (Hasse Diagrams)
- Zeki Vekiller (Akıllı Ajanlar, Intelligent Agents, Zeki Etmenler )
- Integral Kriptoanalizi ( Toplam Tecessüsü , Integral Cryptoanalysis)
- Diferansiyel Kriptoanalizi ( Fark Tecessüsü , Differential Cryptoanalysis)
- Sierpinski Üçgeni (Sierpinski Triangle)
- C ile programlamaya giriş final sınavı çözümleri
- Çok Seviyeli Sıralar (Multi Level Queues)
- Çift Özetleme (Double Hashing)
- İkinci Dereceden Sondalama (Quadratic Probing)
Yapılan Son Yorumlar
- Şadi Evren ŞEKER: Sıralama işleminiz poligonu...
- Şadi Evren ŞEKER: bahsettiğiniz sıralama algoritması...
- Abdurrahman ulusoy: merhaba hocam. gelişigüzel...
- Oguz Okutan: Merhaba hocam.. Fonksiyonlarda degere göre...
- Şadi Evren ŞEKER: Null, NULL, nil veya null olarak...
- Fatih Kabakci: hocam merhabalar,...
- kara: Çok güzel anlatılmış gerçekten teşekkürler...
- Şadi Evren ŞEKER: Bahsettiğiniz şekil dönüşümü...
- Caner: Kullanıcıdan açı girdisi almıyorsanız...
- Furkan Yediyildiz: Algoritmanin mantigi cok güzel...
- havva: çok sağolun çok güzel açıklamalar var tşk...
- Şadi Evren ŞEKER: typedef komutu, bir yapıdan yeni bir...
- fatih kabakci: hocam ben structures ile ilgili bir sorum...
- Şadi Evren ŞEKER: evet, yukarıda açıklanan, herhangi...
- Abdurrahman ulusoy: fi açısından teta kadar döndürme...
- Şadi Evren ŞEKER: Hayır yok, bir noktanın, herhangi...
- Abdurrahman ulusoy: Bu durumda yukarıdaki formüllerin...
- Abdurrahman ulusoy: Merhaba hocam Üstteki mesajımda...
- mustafa ekmekcioğlu: merhaba şadi bey ben hacettepe...
- Şadi Evren ŞEKER: Talebiniz üzerine...
Yakın Yazılar
C ile programlamaya giriş final sınavı çözümleri
de morgan kuralı (de morgan rule)
Bağımsız düğümler (Anti Clique, Independent Set)
Tembel Programlama (Lazy Programming)
Kayıplı Sıkıştırma (Lossy Compression)
Yahut Problemi (Özel Veya Problemi (XOR Problem, exclusive or))
İleri Beslemeli Ağlar (Feedforward Neural Networks)
Gizli Katman Sayısı (Number of Hidden Layer)
Tek Katmanlı Sinir Ağları (Single Layer Neural Networks)
Sinir Ağlarında Katmanlar (Neuron Layers)
Belirli Sonlu Otomat (Deterministic Finite Automat, DFA)
Eksensel İzdüşüm (Axonometric Projection)
fonksiyonel programlama (functional programming)
asgari tarama ağacı (en kısa örten ağaç, minimum spanning tree)
Bağlantılar