PDA

Tam Sürümünü Görmek İçin : arkadaslar basit ama olmuyo


pipopim
09/12/2006, 20:11
stdio.h ta yapmam gerekiyo bilginize. bir dosyadaki isim listesini scan ettikten sonra alfabetik sıraya sokmam gerekiyo. pointer kullanıyım dedim hani ilk harfi karsılastırmak için pointer kullanamadım bi türlü olmuyo . sonra neyse dedim bi scan ediyim listeleyim sonra pointer kullanırım dedim arrayla taradım ismin ilk harfi bi türlü alamıyorum. lütfen hemen cevap yazın aglıcam şimdi yaaaaaaaa..............:aglama:


erdkd
09/12/2006, 21:59
Selamlar
O kadar sinirlenmişsin ki örneği ver. c# da yapıyorsan hazır sıralama metotları nı kullan
Kolay Gelsin

pipopim
09/12/2006, 22:18
mesela dosyada isimler var mustafa, aslı, fatma , mehmet bunları alfabetik olarak sıralıcak aslı fatma mehmet mustafa olarak mesela. bu arada c++ ta yapıyorum stdio.h ta hala yapamdım basıma agrılar girdi sabah tan beri ders notlarıyla hasır nesir olmaktan kafayı sıyırdım valla

acehreli
10/12/2006, 01:45
pipopim, verdigin bilgiler hatani gormemize yetmiyor.

Ali

pipopim
10/12/2006, 14:38
bana sunun bi örneginni verin yeticek bir pointer daki ismin herhangi bir harfini alamk mesela mustafa ismini bir pointer a atalım ve bunun 3. harfini alalım. ben bunu yapamıyorum bi türlü

KamilORS
10/12/2006, 17:01
Diğelimki String Türünden Değişken Olsun. String a="kamil"; m harfini ekrana yazdırmak için cout<<a[3]; derim. Bu Kullanımda Dikkat Edilmesi Gereken Kural 0 dan değilden 1 den başlamak yani k harfini ekrana yazdırmak için cout<<m[1]; diyebiliriz.

pipopim
10/12/2006, 17:31
tamam cok sagol ama sorun bunla bitmiyomus ben tamamını söleyimde siz bana yol gösteriverin o zaman. bi dosyadan okutacagım isimleri alfabetik sıraya sokmam gerekiyo......

ben isimleri dosyadan scan ettim
p[20][20] seklinde bir pointer a yolladım fakat bundan sonrası için ascii kodlarını kulaanarak yapamıyorum ne yapmam gerek sizce .

pipopim
10/12/2006, 17:32
#include <stdio.h>
#include <stdlib.h>

main()
{

char isim[20],p[100][20],*x;
char *arr[100];
int i=0,j=0,k=0,h=0;
FILE *sinif;
FILE *text2;

if((sinif=fopen("sinif.txt","r"))==NULL)

{
printf("file can not open\n");
}

else

{
printf("file was opened\n");
}

do

{
fscanf(sinif,"%s",isim);

for(j=0;j!=20;j++)
{
isim[j]=toupper(isim[j]);
p[i][j]=*(isim+j);
}

printf("%s\n",p[i]);
i=i+1;
}

while(!feof(sinif));

printf(" dosyanin icinde %d tane isim vardir.\n",i);

fclose(sinif);

for(j=0;j<=i;j++);{
for(k=1;k<=i;k++);{
if(strcmp(p[j],p[k])>0){
}
}
}
}

kırmızıyla yazılan kısım calışmıyo sorunu halletsem gerisi kolay sanırım

acehreli
13/12/2006, 01:56
Gorebildiklerimi kodun icine [Ali] ile isaretleyerek yazdim:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// [Ali] main'in dOnus tUrUnun 'int' olarak belirtilmesi
// gerekir. (Derleyicim olmayinca hata veriyor.) Duzeltiyorum...

int main()
{
// [Ali] x'i, arr'i, ve text2'yi kullanmiyorsun. Kaldirdim...

// [Ali] p, x, vs. gibi adlar kodun okunmasini cok guclestirirler. Ne
// olduklari konusunda bu noktada hicbir fikrim yok.
char isim[20],p[100][20]/* ,*x */;
/* char *arr[100]; */
int i=0,j=0,k=0,h=0;
FILE *sinif;
// FILE *text2;

if((sinif=fopen("sinif.txt","r"))==NULL)
{
printf("file can not open\n");

// [Ali] Herhalde burada programdan cikmak iyi olur:
exit(1);
}
else
{
printf("file was opened\n");
}

do
{
fscanf(sinif,"%s",isim);

for(j=0;j!=20;j++)
{
// [Ali] Burada birbirinin esdegeri olan iki kullanimi karisik
// olarak kullanmissin :) isim[j] ile *(isim+j) ayni seydir...
//
// Burada 20 tane karakter uzerinde islem yapiyorsun ama
// isim'de ondan daha az sayida karakter bulunabilir.
isim[j]=toupper(isim[j]);

// [Ali] Bu adim, p[i]'ye isim'i kopyalamak icin degil
// mi... Onun yerine, bu for dOngUsunden ciktiktan sonra strcpy
// de kullanabilirsin. Yani bu for'dan sonra: strcpy(p[i], isim);
p[i][j]=*(isim+j);
}

printf("%s\n",p[i]);
i=i+1;
}
// [Ali] Burada i'nin 99'dan buyuk olup olmadigina da bakman
// gerekir. Eger giris dosyasinda 100'den fazla isim varsa, sana ait
// olmayan bellege yazacaksin. (p[100] p'ye dahil degildir.)
while(!feof(sinif));

// [Ali] Biraz gec bir denetim :)
printf(" dosyanin icinde %d tane isim vardir.\n",i);

fclose(sinif);

// [Ali] Burada cok talihsiz bir hata yapmissin :) Asagidaki kodun
// esdegeri sudur:
//
//
/*
* for(j=0;j<=i;j++)
* ; // <--- Bunu ben koymadim :)
* {
* for(k=1;k<=i;k++)
* ; // <--- Bunu da ben koymadim
* {
* if(strcmp(p[j],p[k])>0){
* }
* }
* }
*/

for(j=0;j<=i;j++);{
for(k=1;k<=i;k++);{
// [Ali] strcmp'u kullanmadan once onun bildirildigin
// <string.h> basligini eklemen gerekiyor. (Yukarida ekledim.)
if(strcmp(p[j],p[k])>0){
}
}
}
}

Ali

pipopim
13/12/2006, 10:56
yaa ali sen nerelerdeydin dün ve öncesi gece umudu kestim sallama bi ödev teslim ettim ama yeni basladım c++ ögrenmeye hatalarımı göstermen benim için cok iiii oldu nerelere dikkat etmem gerektigini anladım cok sagol