Tam Sürümünü Görmek İçin : c compiler ve program yardım
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.
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
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.
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.
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;
}
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.
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
#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
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.
#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.
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.