Ana Sayfa Programlama C Proje Ödevi ve Çözümü

C Proje Ödevi ve Çözümü

4007
0
C Proje Ödevi ve Çözümü

C Proje Ödevi ve Çözümü başlıklı bu yazımızda üniversitelerde C dersi projesi olarak verilen bir proje ödevini ve çözümünü sunuyoruz. Umarız kendini bu konuda geliştirmek isteyen öğrencilere katkısı olur.

Proje ödevine ait çözüm yazımızın en sonundadır.

Proje Ödevi

Önceden Bilinmesi Gerekenler

  • File I/O
  • Fonksiyonlar
  • Döngüler
  • Pointerlar
  • Diziler

Öğrenme Hedefleri

Takım çalışması, file I/O, fonksiyon tanımlama ve çağırma metin manipülasyonları

Projeye Genel Bakış

Cat Linux ve benzer sistemlerde kullanılan bir komuttur.  Bir Linux terminalinde (komut satırında), cat kullanılarak dosyaların içeriği okunabilir/kopyalanabilir yada dosyaya yeni içerik eklenebilir. Bu projede cat programının işlevlerini gerçekleştirebilen bir C programı yazmanız istenmektedir.

Proje Detayları ve Gereksinimler

Bu projede komut satırından argüman alarak çalışan cat isminde bir program yazacaksınız. cat programı almış olduğu argümanların içeriğine göre aşağıdaki operasyonları yapacaktır:

Bir Metin Dosyasının İçeriğinin Gösterilmesi

cat in en basit kullanımı bir dosyanın içeriğini göstermek için kullanılmasıdır. Mesela, bir metin dosyasının içeriğini göstermek için program şu şekilde çalışmalıdır:

 

cat file1.txt

Program file1.txt isimli dosyanın içeriğini okuyup stdout’a göndererek dosya içeriğinin komut satırında gösterilmesini sağlayacaktır. Burada file1.txt komut satırı argümanıdır.

 

Eğer programa birden fazla dosya ismi argüman olarak verilirse, o zaman program sırayla bu dosyaların içeriklerini göstermelidir. Mesela, üç tane metin dosyasının içeriğini göstermek için:

cat file1.txt file2.txt file3.txt

Program önce file1.txt, sonra file2.txt, ve enson file3.txt dosyalarının içeriğini göstermelidir(birbiri ardınca stdout’a göndermeli.).

“>” ve “>>” Operatörleriyle Çıkışın Yönlendirilmesi

Eğer yönlendirme operatörü argüman olarak verildiyse o zaman çıkış stdout yerine yönlendirilen yere gönderilmelidir (yazılmalıdır). Yönlendirme operatörü şu şekilde kullanılabilmelidir:

  • Ya hemen cat (yani program ismi) ’den sonra
  • Yada son verilen dosya isminden önce (cat’den sonra kullanıldığında da yine son dosya isminden önce oluyor.)
  • Eğer diğer yerlerde veya farklı şekillerde kullanılırsa program hata mesajı ve doğru kullanımıyla ilgili mesaj vermelidir.

> operatörü çıkışı sağa doğru yönlendirerek hemen bu operatörü takip eden argümana belirtilen dosyaya  çıkışı yazmalıdır (dosya sıfırlanarak yazılmalı).

  • Eğer sağ tarafta dosya ismi belirtilmemişse, bir hata mesajı gösterilerek programdan çıkılmalıdır.
  • Eğer belirtilen dosya yoksa yeni bir dosya oluşturulmalıdır.
  • Eğer dosya varsa, dosya içeriği sıfırlanarak üzerine yazılmalıdır.  
  • Eğer hemen cat, yani program ismi, komutundan sonra kullanılırsa, yeni bir satıra geçerek kullanıcının komut satırından vereceği girişi EOF’a kadar okuyarak, operatörden sonra verilen dosyaya bu girişi yazmalıdır.

>> öperatörü çıkışı sağa append(ekleme) özelliğiyle yönlendirir. Eğer sağ tarafta dosya ismi belirtilmemişse hata mesajı göstererek programdan çıkılmalıdır.

  • Eğer belirtilen dosya yoksa verilen isminde yeni bir dosya oluşturulmalıdır.
  • Eğer varsa çıkış olarak verilen içerik, dosyanın sonuna eklenmelidir.   
  • Eğer hemen cat den sonra kullanılırsa, yeni bir satıra geçilmeli ve kullanıcının komut satırından vereceği giriş EOF’a kadar alınarak dosyaya eklenmelidir.

Misaller:

cat file1.txt > file2.txt
  • Bu file1.txt nin içeriğini file2.txt ye kopyalamalıdır.
    • Eğer file2.txt yoksa bu isimde yeni bir dosya oluşturulması,
    • Eğer varsa dosyanın içeriğinin sıfırlanması ve yeni içeriğin yazılması gerekmektedir.

 

cat file1.txt file2.txt > file3.txt
  • Bu file1.txt ve file2.txt dosyalarının içeriklerini file3.txt dosyasına yazmalıdır.
    • Eğer file3.txt yoksa bu isimde yeni bir dosya oluşturulması,
    • Eğer varsa dosyanın içeriğinin sıfırlanması ve yeni içeriğin yazılması gerekmektedir.

 

cat file1.txt file2.txt >
  • Önce hata mesajı gösterilmeli, ve sonra catin doğru kullanımı gösterilerek programdan çıkılmalıdır.

 

cat > file1.txt
  • Önce komut satırında yeni bir satıra geçilecek new line in the command line, sonra komut satırından kullanıcı girişi EOF’a (control-d)  kadar okunarak file1.txt dosyasına yazılmalıdır.
    • Eğer file1.txt yoksa bu isimde yeni bir dosya oluşturulması,
    • Eğer varsa dosyanın içeriğinin sıfırlanması ve yeni içeriğin yazılması gerekmektedir.
  • Benzer örnekler  >> operatörüyle de geçerlidir. Ancak tek fark >> operatörü ile yazma işlemi dosyanın sonuna ekleme (append) şeklinde olmalıdır.

Opsiyonlar

Cat’den sonra aşağıdaki opsiyonlar da kullanılabilmelidir:

  • -b
    • Boş olmayan satırları numaralandırmalı
  • -n
    • Tüm satırları numaralandırmalı
  • -s
    • Tekrarlanan boş satırları çıkışta göstermemeli (kaldırmalı)
  • -h
    • Yazılan cat programın nasıl kullanıldığıyla ilgili kısa örnek ve açıklamalar göstermeli
  • -q
    • Hiç bir şey yapmadan programdan çıkmalı.

Yönlendirme operatörleri opsiyonlardan sonra kullanılabilmelidir. Misaller:

cat -b file1.txt file2.txt

cat -b file1.txt > file2.txt

cat -b > file1.txt

cat -b >> file1.txt

cat -s file1.txt

cat -b file1.txt

cat -h     

cat -q

 

Teslim

Bütün yazmış olduğunuz kodu tek cat.c isimli tek bir dosyaya koymalısınız. Başlangıç yorumunda grup üyelerinin isimleri listelenmeli ve üyeler arasında yapılan çalışmanın nasıl paylaşıldığı kısa olarak açıklanmalıdır.

Değerlendirme

%20 opsiyonsuz okuma

%40 opsiyonsuz yazma

%20 opsiyonla yazma

%20 opsiyonla yazma ve ekleme

Yapılan fazladan fonksiyonalite için 20 puana kadar bonus(Bu projeden en fazla 120 alınabilir.).

-10 puana kadar kodlama standartları

C Proje Ödevi Çözümü

#include <stdio.h>
#include <string.h>
unsigned char buyuk=0;
unsigned char ciftbuyuk=0;

int main(unsigned int argc, char** argv) {
FILE *dosya, *dosya2;
int i,c,s=argc-1;
// printf(“Program %u parametreye sahip: \n\r”,s);

// Varsa > veya >> parametrelerinin yeri dogru mu? //////////////////////
for (i = 1; i <= s; ++i) {
if((strcmp(argv[i],”>>”)==0)||(strcmp(argv[i],”>”)==0))
{
if(i!=s-1)
{
printf(“%s operatorunun yeri yanlis\n\r”,argv[i]);
return 0;
}
if(strcmp(argv[i],”>”)==0) buyuk=1; // Eger > varsa
if(strcmp(argv[i],”>>”)==0) ciftbuyuk=1; // Eger >> varsa
}
else if(strcmp(argv[i],”-q”)==0) return 0; // Eger -q opsiyonu kullanildiysa programdan cik.
else if(strcmp(argv[i],”-h”)==0) // Eger -h opsiyonu kullanildiysa
{
printf(“\n\rBu program verilen dosyalarin icerigini ekrana gosterme veya”);
printf(“\n\rbu dosyalarn icerigini bir baska dosyaya yazma ya da ekleme”);
printf(“\n\ramacli kullanilir.”);
printf(“\n\rGenel Kullanim: cat dosya1 dosya2 dosya3 dosya4 …”);
printf(“\n\rOrnek: cat bilgi.txt -> Bu komut satiri bilgi.txt dosya icerigini”);
printf(“\n\rekranda goruntuler.”);
printf(“\n\rOrnek: cat bilgi.txt abc.txt -> Bu komut satiri bilgi.txt ve abc.txt”);
printf(“\n\rdosya iceriklerini ekranda goruntuler.”);
printf(“\n\r”);
return 0;
}
}
/////////////////////////////////////////////////////////////////////////
if(buyuk==1)
{
dosya2 = fopen(argv[s], “w+”);
for (i = 1; i <= s-2; ++i)
{
dosya=fopen (argv[i],”r”);
if (dosya==NULL) perror (“Dosya bulunamadi”);
else
{
do {
c = fgetc (dosya);
if(c!=’ÿ’) fputc(c, dosya2);
} while (c != EOF);
fclose (dosya);
}
}
fclose (dosya2);
}

else if(ciftbuyuk==1)
{
dosya2 = fopen(argv[s], “a+”);
for (i = 1; i <= s-2; ++i)
{
dosya=fopen (argv[i],”r”);
if (dosya==NULL) perror (“Dosya bulunamadi”);
else
{
do {
c = fgetc (dosya);
if(c!=’ÿ’) fputc(c, dosya2);
} while (c != EOF);
fclose (dosya);
}
}
fclose (dosya2);
}

else
{
// Parametre olarak verilen dosyalar ekrana yaziliyor…////////////////
for (i = 1; i <= s; ++i)
{
// printf(“%s\n\r”,argv[i]);
dosya=fopen (argv[i],”r”);
if (dosya==NULL) perror (“Dosya bulunamadi”);
else
{
do {
c = fgetc (dosya);
if(c!=’ÿ’) putchar(c);
} while (c != EOF);
fclose (dosya);
printf(“\n\r”);
}
}
}
return 0;
}

C Proje Ödevi Çözümünü İndir

C Proje Ödevi ve Çözümü ‘nü burayı tıklayarak indirebilirsiniz.

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz