PDA

Tam Sürümünü Görmek İçin : c compiler ve program yardım


Orn
22/03/2007, 13:25
slm millet benım kısa zamanda c konusunda yardıma ıhtıyacım var.biliyorum derslerı anlamayıp gelıp burda odev yaptırmak yanlıs ama 1 haftada 5 vızem var bunların dısında bır de C odevı bu da yetmez gıbı hala compiler sorununu da cozemedım (turbo c kullanıyordum format attım v2.1 yukledım tamamen basıt bır hello world programında bıle syntx hatası verıyor stdio.h bulunamadı gıbı bı sey yazıyor takrıben 6 tane turbo c ındırdım, bazıları 2.1 farklı farklı yerlerden ama olmadı)
malesef odevı yetıstırmıyorum bır turlu algorıtma olusturamadım
odev su
1-kullanıcıdan bır dızı karakter rakam vs alacak * a kadar olanlar ıcın
2-buyuk harflerı kucuge cevırecek
3-rakamları kaale almayacak isaretleri de
4-geriye kucuk harfler kalacak onlarıda dık ucgen seklınde basacak ekrana yanı 1. satıra 1 tane 2. satıra 2 tane 3-3 vs vs vs mesela 4 satırda harfler 2 tane kaldı dıyelım 0 basarak 4 e tamamlar.


ornegın ;
asdRTY123)(=+&+^GH*ajsdhas girilirse

ekrana sunu basacak.
a
sd
rty
gh00

yardımlarını beklıyorum sadece whıle ve for dongulerıyle yapılabılıyor(akıl verıyo utanmaz:iih: ) cok tesekkurler sımdıden.


mr1yh1
22/03/2007, 14:57
turboC yi bırak, devC++ veya code::Blocks indir.

ctype.h başlığındaki fonksiyonlar problemlerinin çoğunu çözer.
http://www-ccs.ucsd.edu/c/ctype.html

Orn
22/03/2007, 18:10
turboC yi bırak, devC++ veya code::Blocks indir.

ctype.h başlığındaki fonksiyonlar problemlerinin çoğunu çözer.
http://www-ccs.ucsd.edu/c/ctype.html

malesef ctype.h gibi library dosyalarına ızın verılmıyor.sadece stdio.h bu program icin gecerlıymıs.

fgenc
22/03/2007, 18:47
maro
kurdugun c kompileri *.h ile biten kütüphaneleri bulamiyor olabilirler
kestirme bir cözüm. söyle yapabilirsin. kullandigin stdio.h gibi kütühaneleri
yazmis oldugun programla ayni dizini koy compiler kesin bulur o zaman.
bu arada ilgili kutuphanelerin nerde oldugunu gösteren PATH sorunuda cözmeye calis..

myavuzselim
22/03/2007, 18:53
Bir harfin kucuk harf olup olmadigini su sekilde test edebilirsin:
int kucukMu = ch >= 'a' && ch <= 'z';
Yani 'a' ve 'z' arasinda olup olmadigini test etmis olursun.

Buyuk harf testi de soyle olabilir:
int buyukMu = ch >= 'A' && ch <= 'Z';

Buyuk harf oldugunu test ettigin bir harfi kucuge cevirmek icin:
ch = ch - ('A' - 'a')

Bunun calismasinin nedeni karakterlerin ascii tablosuna (http://www.asciitable.com/) gore sirali olmasidir.

Orn
22/03/2007, 18:59
selım abı tesekkurler ama buyuk hafrlerı kucuge cevırme ısını hallettım daha once
while(ch != '*');

if(ch >= 'A' && ch <= 'Z')

ch = ch + ('a' - 'A');

if(ch >= 'a' && ch <= 'z')

gibi birsey


asıl takıldıgım yerler harflerı dık ucgen seklınde basmak ve bu dort kosulu
bırlestırmek :aglama:
lahana abı path sorununu cozemedım tammaen sıldım butun tc lerı devC++ ındırıp derlemeye calısacagım

myavuzselim
22/03/2007, 20:47
#include <stdio.h>

int harf_mi(char ch) {
return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z');
}
char kucuk_harf_yap(char ch) {
if (ch >= 'A' && ch <= 'Z')
return ch - ('A' - 'a');
else
return ch;
}

int main() {
int bu_siraya_yazilacak = 1; /* su andaki siraya kac harf yazilabilir? */
int bu_siradaki_harf_sayisi = 0;
char ch;

while ((ch = getchar()) != '*') {
if (harf_mi(ch)) {
ch = kucuk_harf_yap(ch);
/* simdi ch'yi yazdir. Yazdirmadan once bu_siradaki_harf_sayisi'nin
* bu_siraya_yazilacak degerinden kucuk olduguna emin olmalisin. Yoksa
* '\n' yazdir, bu_siradaki_harf_sayisi degerini sifirla, ve bir sonraki
* sirada bir harf fazla olmasi gerektigi icin bu_siraya_yazilacak
* degerini bir artir.
*/
}
}
/* bu_siradaki_harf_sayisi bu_siraya_yazilacak'dan kucuk oldugu surece '0' yazdir.
*/
printf("\n");
return 0;
}

Orn
23/03/2007, 01:23
selim abi anlattıgın gibi yazdım ama senin fonksiyon $eklinde yaptıgın buyuk harfi kucultme ve harf_mi kısımlarını alt alta if fonsiyonları $eklinde yaptım,


/* simdi ch'yi yazdir. Yazdirmadan once bu_siradaki_harf_sayisi'nin
* bu_siraya_yazilacak degerinden kucuk olduguna emin olmalisin. Yoksa
* '\n' yazdir, bu_siradaki_harf_sayisi degerini sifirla, ve bir sonraki
* sirada bir harf fazla olmasi gerektigi icin bu_siraya_yazilacak
* degerini bir artir.
*/


bu kısmı $u $ekilde yorumladım:
if(bu_siraya_yazdirilacak <= bu_siradaki_harf_sayisi) printf("%c",ch);
else {bu_siradaki_harf_sayisi = 0;
bu_siraya_yazdirilacak++;
}
ama icimden bir ses bunu for dongusuyle yap dıyor:D
bu arada compile ettim devC++ ile ama ınputu alıp oylece bekliyor programcık

yada
/* bu_siradaki_harf_sayisi bu_siraya_yazilacak'dan kucuk oldugu surece '0' yazdir.
*/
bunu da soyle yaparsam
for(;bu_siradaki_harf_sayisi <= bu_siraya_yazilacak;) printf("0");
sonsuza kadar 0 basıyor.

myavuzselim
23/03/2007, 02:15
if(bu_siraya_yazdirilacak <= bu_siradaki_harf_sayisi) printf("%c",ch);

siraya bir harf ekledigine gore bu_siradaki_harf_sayisi'ni artirmayi unutmamalisin. Ayrica <= yerine < kullan, cunku bir harf daha ekleyeceksin.

else {bu_siradaki_harf_sayisi = 0;
bu_siraya_yazdirilacak++;
}

Guzel. Ama burada yeni bir satira basladigina gore '\n' yazman lazim degil mi? Ayrica okudugun harf bosa gitmemeli. Onu da bu yeni satira yazdirip bu_siradaki_harf_sayisi'ni artirmalisin.

Aslinda soyle yapmak daha uygun:
- sira dolmussa yeni satira gec (harf sayisini sifirla, yazdirilacak'i artir, '\n' yaz)
- ve her halukarda okudugun harfi yazdirip harf sayisini artir.


bunu da soyle yaparsam
for(;bu_siradaki_harf_sayisi <= bu_siraya_yazilacak;) printf("0");
sonsuza kadar 0 basıyor.
0 yaziyorsun, ama harf sayisini artirmiyorsun.

Orn
24/03/2007, 13:31
selim abi son uyarılarını da dikkate alarak bu kodu yazdım ama galiba while dongusu icindeki ++ calısmıyor.cunku ne yazarsam yazayım program "00" basıyor
2 tane 0 yani. calısan satır bu galiba :
for(;bu_siradaki_harf_sayisi <= bu_siraya_yazilacak;bu_siradaki_harf_sayisi++) printf("0");
0 a 1 icin ve de 1 e 1 icin 2 tane 0 basıp duruyo program nerede hata vardır sizce?

#include <stdio.h>

int harf_mi(char ch) {
return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z');
}
char kucuk_harf_yap(char ch) {
if (ch >= 'A' && ch <= 'Z')
return ch - ('A' - 'a');
else
return ch;
}
int main()
{
int d1;
int bu_siraya_yazilacak = 1;
int bu_siradaki_harf_sayisi = 0;
char ch;

while ((ch = getchar()) != '*') {
if (harf_mi(ch)) {
ch = kucuk_harf_yap(ch);
if(bu_siraya_yazilacak < bu_siradaki_harf_sayisi) { printf("%c",ch);
bu_siradaki_harf_sayisi++; }
else if(bu_siraya_yazilacak == bu_siradaki_harf_sayisi){ printf("\n");
bu_siradaki_harf_sayisi=0;
bu_siraya_yazilacak++;
}
}
}
scanf("%c",&ch);
for(;bu_siradaki_harf_sayisi <= bu_siraya_yazilacak;bu_siradaki_harf_sayisi++) printf("0");


printf("\n");
scanf("%d",&d1); /*bu scanf i anykey fonksiyonu yerine kullandım yoksa dos *ekranı hemen kapnıyo goremıyorum birsey alternatif onerilere acıgım:D
*/
return 0;
}

kodun son hali bu ama bunun sonuna if lerle degilde icice for kalıplarıyla
dik ucgen cızmeye calısacagım sımdı o kodlar uzerındeyım .
sorun neden "00" bastıgı:S

acehreli
24/03/2007, 18:13
Ekran kapanma konusunda oneriye acik olduguna cok sevindim. Beni boyle yanlis cozumler cok rahatsiz ediyor. :)

Programi komut satirindan baslat: cd komutuyla programinin bulundugu klasore git ve programin adini yazip Enter'a bas... :)

Baska bir yol da, hata ayiklayiciya programin herhangi bir satirinda durmasini soylemektir. Ornegin printf('\n') satirina bir durak (break point) koy, program simdi orada durur.

Su dongunun denetimi ters olmus degil mi:


if(bu_siraya_yazilacak < bu_siradaki_harf_sayisi)
{
printf("%c",ch);
bu_siradaki_harf_sayisi++;
}


bu_siraya_yazilacak bu_siradaki_harf_sayisi'ndan buyuk oldugu icin (1>0), o kosula hic girilmeyecek.

Ondan sonra


else if(bu_siraya_yazilacak == bu_siradaki_harf_sayisi)


geliyor ama o da bastan dogru degil. Acaba bir de en sondaki else'i mi koymayi dusundun de unuttun? (bu_siraya_yazilacak > bu_siradaki_harf_sayisi) durumunu denetlemek icin?

Ali

Revne
26/03/2007, 04:40
#include <stdio.h>

int harf_mi(char ch) {
return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z');
}
char kucuk_harf_yap(char ch) {
if (ch >= 'A' && ch <= 'Z')
return ch - ('A' - 'a');
else
return ch;
}

int main() {
int bu_siraya_yazilacak = 1;
int bu_siradaki_harf_sayisi = 0;
char ch;

while ((ch = getchar()) != '*') {
if (harf_mi(ch)) {
ch = kucuk_harf_yap(ch);
printf("%c",ch);
bu_siradaki_harf_sayisi++;
if(bu_siraya_yazilacak ==bu_siradaki_harf_sayisi)
{
printf("\n");
bu_siraya_yazilacak++;
bu_siradaki_harf_sayisi=0;
}
}
}
if (bu_siradaki_harf_sayisi>0)
while (bu_siradaki_harf_sayisi<bu_siraya_yazilacak)
{
printf("0");
bu_siradaki_harf_sayisi++;
}

//Ekran cıktısını gormek icin....
getchar();
getchar();

return 0;
}
Benimde corbada bir kaşık tuzum bulunsun..

Kolay Gelsin...

myavuzselim
26/03/2007, 05:32
Simdi isin biraz keyfini surelim :)

~/Desktop$ ./a.out </dev/urandom
p
oq
onh
ithq
pjdlg
ourujo
kzghflv
qjczunim
rztwssidt
vonrnueapb
ttvmezxoofp
uwvkncbnvyew
xupxbjw000000

Orn
26/03/2007, 20:17
herkese yardımlarından dolayı tesekkur ederim 2 gun once program bitti saglam kafayla az dongu ve az bilinmeyenle oluyormu$. :D
benim dı$ımda 1-2 okul arkada$ımın da size te$ekkürü var.

Orn
26/03/2007, 20:19
#include <stdio.h>

int harf_mi(char ch) {
return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z');
}
char kucuk_harf_yap(char ch) {
if (ch >= 'A' && ch <= 'Z')
return ch - ('A' - 'a');
else
return ch;
}

int main() {
int bu_siraya_yazilacak = 1;
int bu_siradaki_harf_sayisi = 0;
char ch;

while ((ch = getchar()) != '*') {
if (harf_mi(ch)) {
ch = kucuk_harf_yap(ch);
printf("%c",ch);
bu_siradaki_harf_sayisi++;
if(bu_siraya_yazilacak ==bu_siradaki_harf_sayisi)
{
printf("\n");
bu_siraya_yazilacak++;
bu_siradaki_harf_sayisi=0;
}
}
}
if (bu_siradaki_harf_sayisi>0)
while (bu_siradaki_harf_sayisi<bu_siraya_yazilacak)
{
printf("0");
bu_siradaki_harf_sayisi++;
}

//Ekran cıktısını gormek icin....
getchar();
getchar();

return 0;
}
Benimde corbada bir kaşık tuzum bulunsun..

Kolay Gelsin...

hocam sağol neredeydin sen 1 hafta once ya :D ama iyiki yazmamı$sın daha once simdi bir$eyler kapmı$ oldum.