Yazar |
|
encin
Kayıt: 30.11.2007 |
|
tabiki bilgisayar başında olacak, final dosya işlemleri ağırlıklıydı, yapılar ve dosya işlemlerinin sonuna kadarv sorumluyuz, final sorularını hoca gruba atmıştı galiba
|
|
Yazar |
|
marakana
Kayıt: 08.03.2007 |
|
http://www.iucoders.com/frm_show_topic.jsp?tid=3869
|
|
Yazar |
|
marakana
Kayıt: 08.03.2007 |
|
final 2.grubun sorusunda(rasgele erişimli) şöyle bi kod yazdım hata vermiyor ama sorunla karşılaştı, kapatılması gerekiyor diyor.Yardımcı olursanız sevinirim
Kayıt sayısını bulduktan sonra 1 azaltmamızı hoca söylemişti bu soru içn.. niye 1 fazla çıkyor onuda anlayamadım zati
OGRENCI * DosyadanOku(void)
{
FILE *dosya;
OGRENCI ogr;
OGRENCI *dizi;
int i=0;
dosya=fopen("records.dat","rb");
if(dosya==NULL)
printf("dosya acilamadi ");
else
{
while(!feof(dosya))
{
fread(&ogr,sizeof(struct ogrenci),1,dosya);
kayitSayisi++;
}
kayitSayisi--;
dizi=(OGRENCI*)malloc(sizeof(OGRENCI) * kayitSayisi);
rewind(dosya);
while(!feof(dosya))
{
fread(&ogr,sizeof(struct ogrenci),1,dosya);
dizi[i]=ogr;
i++;
}
fclose(dosya);
}
return dizi;
}
void Goruntule(OGRENCI *kayitlar)
{
int i;
for (i = 0; i < kayitSayisi; i++)
printf("%s %s %s %s %s ", kayitlar[i].ad, kayitlar[i].soyad, kayitlar[i].numara, kayitlar[i].yas, kayitlar[i].ortalama);
}
void KayitSayisiniGoster(void)
{
printf("%d kayit vardir ",kayitSayisi);
}
|
|
Yazar |
|
gilraen
Kayıt: 19.01.2007 |
|
Sorunumu düzelttim de.ikinci gruptan giren arkadaşlar hoca tam olarak ne istedi sizden teklerin soyadlarını çevir diyerek bi yazsanız çok makbule geçer.
|
|
Yazar |
|
hamdikan
dünya
Kayıt: 23.01.2006 |
|
marakana yazdi | final 2.grubun sorusunda(rasgele erişimli) şöyle bi kod yazdım hata vermiyor ama sorunla karşılaştı, kapatılması gerekiyor diyor.Yardımcı olursanız sevinirim
Kayıt sayısını bulduktan sonra 1 azaltmamızı hoca söylemişti bu soru içn.. niye 1 fazla çıkyor onuda anlayamadım zati |
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
typedef struct ogrenci
{ char ad[15];
char soyad[15];
int numara;
int yas;
double ortalama;
} OGRENCI;
void EkraniTemizle()
{
system("cls");
}
// BUNLAR OGRENCI TARAFINDAN GELISTIRILECEK FONKSIYONLAR ////////////////////////
OGRENCI * DosyadanOku(void);
void EnKucukNoluAdSoyadDegistir(OGRENCI *kayitlar);
void Goruntule(OGRENCI *kayitlar);
void DosyayaYaz(OGRENCI *kayitlar);
void KayitSayisiniGoster(void);
//////////////////////////////////////////////////////////////////////////////////
int kayitSayisi = 0;
int main(void)
{
int secim; //switch-case yapisina ait secimin saklandigi nesnedir.
OGRENCI * kayitlar = NULL; //kayitlarin tutulacagi dizi gostericisidir.
kayitlar = DosyadanOku();
do {
//MENUYU OLUSTURUYORUZ.
printf("
1.) Listeyi goruntule");
printf("
2.) Numarasi en kucuk olanin ad ve soyadini yer degistir");
printf("
3.) Kayit sayisini goster");
printf("
4.) Cikis");
system("cls");
//flushall();
printf("
Lutfen Seciminizi Giriniz
>");
fflush(stdin);
scanf("%d",&secim);
switch (secim) {
case 1:
Goruntule(kayitlar);
break;
case 2:
EnKucukNoluAdSoyadDegistir(kayitlar);
break;
case 3:
KayitSayisiniGoster();
break;
case 4:
DosyayaYaz(kayitlar);
exit(0);
break;
default:
printf("
Seciminiz hatali lutfen 1 il 4 arasinda bir sayi giriniz");
} // end of switch block
printf("Devam etmek icin bir tusa basiniz.
");
getch();
}while(1); // end of infinite do-while block
return 0;
}
OGRENCI * DosyadanOku(void)
{
FILE *dosya;
OGRENCI ogr;
OGRENCI *dizi;
int i=0;
dosya=fopen("records.dat","rb");
if(dosya==NULL)
printf("dosya acilamadi");
else
{
while(!feof(dosya))
{
fread(&ogr,sizeof(struct ogrenci),1,dosya);
kayitSayisi++;
}
kayitSayisi--;
dizi=(OGRENCI*)malloc(sizeof(OGRENCI) * kayitSayisi);
rewind(dosya);
while(!feof(dosya))
{
fread(&ogr,sizeof(struct ogrenci),1,dosya);
dizi[i]=ogr;
i++;
}
fclose(dosya);
}
return dizi;
}
void Goruntule(OGRENCI *kayitlar)
{
int i;
for (i = 0; i < kayitSayisi; i++)
printf("%s %s %d %d %f
", kayitlar[i].ad, kayitlar[i].soyad, kayitlar[i].numara, kayitlar[i].yas, kayitlar[i].ortalama);
}
void KayitSayisiniGoster(void)
{
printf("%d kayit vardir",kayitSayisi);
}
void DosyayaYaz(OGRENCI *kayitlar)
{
}
void EnKucukNoluAdSoyadDegistir(OGRENCI *kayitlar)
{
}
Goruntule fonksiyonunda struct ta int ve double degerlırıde %s ile yazdırmaya calısmıssın
%s %s %d %d %f
olması lazım
hata olayıda neden oldugunu anlamadım ama EkraniTemizle fonksiyonunu silip herhangi bi yere system("cls"); yazdım su an sorun yok heralde kayıt sayısıda 5 buluyor dogru
Not:Grup 3 un dosyalarına yazdım bunları
yok
|
|
Yazar |
|
marakana
Kayıt: 08.03.2007 |
|
hata şuymuşki: 2 grupta,1. gruptan farklı olarak numara ve yas: int, ortalama: float tanımlanmış..Bense direk 1.grup sorusu üzerinden copy-paste yaparak değiştirdiğim için hepsini char almışım..(arkadaş sağolsun)
Hoş 1 saatir 30-40 kişi okudu ama bir kişi bile lutfedip yardimcı olmaya calışmadı ama neyse aynı hatayı yapan arkadaşlar vakit kaybetmesin bari
|
|
Yazar |
|
marakana
Kayıt: 08.03.2007 |
|
teşekkürler HAMDİKANgörmemiştim
|
|
Yazar |
|
fundagulkaya
istanbul
Kayıt: 07.11.2007 |
|
marakana yazdi | Kayıt sayısını bulduktan sonra 1 azaltmamızı hoca söylemişti bu soru içn.. niye 1 fazla çıkyor onuda anlayamadım zati
|
| void Goruntule(OGRENCI *kayitlar)
{
int i;
for (i = 0; i < kayitSayisi; i++)
printf("%s %s %s %s %s
", kayitlar[i].ad, kayitlar[i].soyad, kayitlar[i].numara, kayitlar[i].yas, kayitlar[i].ortalama);
}
|
burda tamam bir azaltmamız mantıklı.0dan başlıyo diye
peki asagida durum nasıl oluyo bir azaltıyorsak?
| dizi=(OGRENCI*)malloc(sizeof(OGRENCI) * kayitSayisi); |
| void KayitSayisiniGoster(void)
{
printf("%d kayit vardir
",kayitSayisi);
} |
anlayabilen biri bi açıklık getirirse sevinirim...
|
|
Yazar |
|
marakana
Kayıt: 08.03.2007 |
|
Ben dosyayı "rb" modunda açtım 6 kayıt buldu,"r" modunda açtım 5 kayıt buldu.Niye bilmiyorum.(buarada 5 kayıt var dosyada).
yani sıfırdan başlatmakla bir alakası yok
for (i = 0; i < kayitSayisi; i++) istersen sen 1 den başlat
for(i=1;i<=kayitSayisi; i++) böyle yaz.
yanlış düşünmüyorum inş
|
|
Yazar |
|
hamdikan
dünya
Kayıt: 23.01.2006 |
|
marakana yazdi | Ben dosyayı "rb" modunda açtım 6 kayıt buldu,"r" modunda açtım 5 kayıt buldu.Niye bilmiyorum.(buarada 5 kayıt var dosyada).
yani sıfırdan başlatmakla bir alakası yok
for (i = 0; i < kayitSayisi; i++) istersen sen 1 den başlat
for(i=1;i<=kayitSayisi; i++) böyle yaz.
yanlış düşünmüyorum inş |
while(1)
{
int abc=fgetc(dosya);
if(abc==EOF)
{
break;
}
fread(&ogr,sizeof(struct ogrenci),1,dosya);
kayitSayisi++;
}
Dosyadan kayıtları okuma kısmına bunu yazarsan "r" veya "rb+" olsun sorun cozuluyor.
Olay dosyayi binary mode da actigin icin kaynaklanıyor.Binary mode un eof anlayısı farklıymıs bende yeni ogrendim
http://www.sis.pitt.edu/~ir/KS/Data/RMiles/c12.html
http://en.wikipedia.org/wiki/Fopen
yok
|
|
Yazar |
|
marakana
Kayıt: 08.03.2007 |
|
eywallah. çok sağol
|
|
Yazar |
|
ramcho
denizli
Kayıt: 02.10.2006 |
|
arkadaşlar 1. grupun sorusunu yapan varsa buraya koyabilirmi uğraşıorum uğraşıorum olmuyo
|
|
Yazar |
|
fundagulkaya
istanbul
Kayıt: 07.11.2007 |
|
ramcho yazdi | arkadaşlar 1. grupun sorusunu yapan varsa buraya koyabilirmi uğraşıorum uğraşıorum olmuyo |
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
typedef struct ogrenci
{ char ad[15];
char soyad[15];
char numara[10];
char yas[3];
char ortalama[5];
} OGRENCI;
void EkraniTemizle(void)
{
system("cls");
}
// BUNLAR OGRENCI TARAFINDAN GELISTIRILECEK FONKSIYONLAR ////////////////////////
OGRENCI * DosyadanOku(void);
void KayitSayisiniGoster(void);
void Goruntule(OGRENCI *kayitlar);
void DosyayaYaz(OGRENCI *kayitlar);
void SoyadaGoreSirala(OGRENCI *kayitlar);
//////////////////////////////////////////////////////////////////////////////////
int kayitSayisi = 0;
OGRENCI temps;
int main (void)
{
int secim; //switch-case yapisina ait secimin saklandigi nesnedir.
OGRENCI * kayitlar = NULL; //kayitlarin tutulacagi dizi gostericisidir.
kayitlar = DosyadanOku();
do {
//MENUYU OLUSTURUYORUZ.
printf("
1.) Listeyi goruntule");
printf("
2.) Soyada gore sirala");
printf("
3.) Kayit sayisini goster");
printf("
4.) Cikis");
flushall();
printf("
Lutfen Seciminizi Giriniz
>");
scanf("%d",&secim);
switch (secim) {
case 1:
Goruntule(kayitlar);
break;
case 2:
SoyadaGoreSirala(kayitlar);
break;
case 3:
KayitSayisiniGoster();
break;
case 4:
DosyayaYaz(kayitlar);
exit(0);
break;
default:
printf("
Seciminiz hatali lutfen 1 il 4 arasinda bir sayi giriniz");
} // end of switch block
printf("Devam etmek icin bir tusa basiniz.
");
flushall();
getch();
EkraniTemizle();
}while(1); // end of infinite do-while block
return 0;
}
OGRENCI * DosyadanOku(void)
{
int i;
FILE * di;
OGRENCI * dizi;
di=fopen("records.txt","r");
if(di==NULL){
printf("Dosya acmada hata
");
exit(1);
}
while(!feof(di)){
fscanf(di,"%s%s%s%s%s",temps.ad,temps.soyad,temps.numara,temps.yas,temps.ortalama);
kayitSayisi++;
}
dizi=(OGRENCI *)malloc(sizeof(OGRENCI)*kayitSayisi);
rewind(di);//dosya göstericisini dosyanın basına alırız.
i=0;
while(!feof(di)){
fscanf(di,"%s%s%s%s%s",(dizi+i)->ad,(dizi+i)->soyad,(dizi+i)->numara,(dizi+i)->yas,(dizi+i)->ortalama);
i++;
}
fclose(di);
return dizi;
}
void Goruntule(OGRENCI *kayitlar)
{
int i;
printf(" Kayitlar
");
printf("-----------------------------------------------------
");
for(i=0;i<kayitSayisi;i++){
printf("%s %s %s %s %s
",(kayitlar+i)->ad,(kayitlar+i)->soyad,(kayitlar+i)->numara,(kayitlar+i)->yas,(kayitlar+i)->ortalama);
}
printf("-----------------------------------------------------
");
}
void KayitSayisiniGoster(void)
{
printf("Dosyada %d adet kayit bulunmaktadir.
",kayitSayisi);
}
void SoyadaGoreSirala(OGRENCI *kayitlar)
{
int i,j;
for(i=0;i<kayitSayisi;i++){
for(j=0;j<kayitSayisi-1;j++){
if(strcmp((kayitlar+j)->soyad,(kayitlar+j+1)->soyad)>0){//eger dizideki elemanlardan herbiri önceki sonrakinden alfabede sonraysa elemanların yerleri degistirilir.
strcpy(temps.ad,(kayitlar+j+1)->ad);
strcpy(temps.soyad,(kayitlar+j+1)->soyad);
strcpy(temps.numara,(kayitlar+j+1)->numara);
strcpy(temps.yas,(kayitlar+j+1)->yas);
strcpy(temps.ortalama,(kayitlar+j+1)->ortalama);
strcpy((kayitlar+j+1)->ad,(kayitlar+j)->ad);
strcpy((kayitlar+j+1)->soyad,(kayitlar+j)->soyad);
strcpy((kayitlar+j+1)->numara,(kayitlar+j)->numara);
strcpy((kayitlar+j+1)->yas,(kayitlar+j)->yas);
strcpy((kayitlar+j+1)->ortalama,(kayitlar+j)->ortalama);
strcpy((kayitlar+j)->ad,temps.ad);
strcpy((kayitlar+j)->soyad,temps.soyad);
strcpy((kayitlar+j)->numara,temps.numara);
strcpy((kayitlar+j)->yas,temps.yas);
strcpy((kayitlar+j)->ortalama,temps.ortalama);
}
}
}
printf(" Siralanmis Kayitlar
");
printf("-----------------------------------------------------
");
for(i=0;i<kayitSayisi;i++){
printf("%s %s %s %s %s
",(kayitlar+i)->ad,(kayitlar+i)->soyad,(kayitlar+i)->numara,(kayitlar+i)->yas,(kayitlar+i)->ortalama);
}
printf("-----------------------------------------------------
");
}
void DosyayaYaz(OGRENCI *kayitlar)
{
int i;
FILE * di;
di=fopen("records.txt","w");
if(di==NULL){
printf("Dosya acmada hata
");
exit(1);
}
for(i=0;i<kayitSayisi;i++){
fprintf(di,"%s %s %s %s %s
",(kayitlar+i)->ad,(kayitlar+i)->soyad,(kayitlar+i)->numara,(kayitlar+i)->yas,(kayitlar+i)->ortalama);
}
}
bu arada ben yapmadım.yapmış olan bir arkadaşımdan aldım çok saolsunn
|
|
Yazar |
|
ramcho
denizli
Kayıt: 02.10.2006 |
|
teşekür ederim.
|
|
|
|
-
Del.icio.us
-
Digg
-
Facebook
-
Furl
-
Google
-
Blink
-
Simpy
-
Spurl
-
Y! MyWeb
|
|
| | | | | | | | | | |