;

Welcome, Guest. Please login or register.
Did you miss your activation email?

Username: Password:
Pages: 1 2 [3]   Go Down

Author Topic: [Programming] Menghitung Kemunculan Karakter  (Read 6072 times)

arie26

  • Senior Sailor
  • ******
  • Keong: 0
  • Offline Offline
  • Posts: 13.241
  • *No More Me*
Re: belajar pemrograman dengan c (lanjutan:D)
« Reply #20 on: January 14, 2008, 09:00:31 am »

heheheh... maklum, oom... di program sebelomnya gw liad sekilas aja, ndak perhatiin komennya... ;D
Logged
Guys, thanks for everything. Gw pamit... nice to know/meet you all

If you only knew.... those lyrics are 4 U....

fang_mei

  • Senior Sailor
  • ******
  • Keong: 0
  • Offline Offline
  • Posts: 13.472
  • Mana sapu kesayangan gue??? Oh, ada di gudang deng
Re: belajar pemrograman dengan c++ (lanjutan:D)
« Reply #21 on: January 17, 2008, 05:00:40 pm »

Oalaaaaaaah.... maap mas... salah tangkap kemaren... hehehehe ;D


Hmmmm... lagi pengen nyolong installer visual C++ neh.... hunting... hunting... mumpung udah ga ada tanggungan kuliah, jadi ada waktu buat refresh ingatan gue ama C++ :P
Logged
Find me on FS : - J'ice - HaLF
    [im

mastery

  • Global Moderator
  • Senior Sailor
  • *****
  • Keong: 0
  • Offline Offline
  • Posts: 26.128
Re: [Programming] Menghitung Kemunculan Karakter
« Reply #22 on: August 15, 2008, 12:42:16 am »

trus, bagaimana arti masingĀ² symbol, identifier, statement, dll dalam kode program di atas hayoo? ;)

arie26

  • Senior Sailor
  • ******
  • Keong: 0
  • Offline Offline
  • Posts: 13.241
  • *No More Me*
Re: [Programming] Menghitung Kemunculan Karakter
« Reply #23 on: August 18, 2008, 10:45:43 pm »

hlah.. niat amat dibawa kluar? mo dijelasin apanya lagi, oom? Udah jelas, khan?

Lebih detail? ngrepotin ae [hammer] [hammer]

Code: [Select]
int *c = calloc(0xff, sizeof(int));
^ Alokasikan blok di memori untuk array (selanjutnya gw sebut c) dengan 255 elemen, masing2 seukuran integer, inisialisasi semua bit dengan 0 (abis nanya mbah gugel, gw radha lupa definisinya ;D). Knapa 255? sesuai dengan jumlah kode ASCII

Code: [Select]
for (p++; *p && **p; )
   c[*(*p)++]++;
^ untuk setiap kemunculan karakter yang ditunjukkan oleh p, sampai akhir dari kumpulan karakter yang akan dihitung, increment nilai dalam elemen c yang bersesuaian dengan ASCII dari karakter tersebut.

Code: [Select]
for (i = 0; i < 0xff; i++)
   c[i]?c[i]>1?printf("%d%c",c[i],i):printf("%c",i):0;
^ dengan i sebagai index elemen array c, jika nilai c[ i ]>1 (kemunculan karakter lebih dari sekali) cetak banyak kemunculan dan karakternya, selain itu (kemunculan sekali) cetak hanya karakternya aja (kalo tetep 0, cuekin :P)

Code: [Select]
free(c);^ 'bebaskan' alokasi memori yang digunakan tadi


kaya'nya gitu aja. Moga ndak ada yang kurang ya, oom. Kalo ada, silaken ditambahin dewe, lah
« Last Edit: August 18, 2008, 10:57:07 pm by arie26 »
Logged
Guys, thanks for everything. Gw pamit... nice to know/meet you all

If you only knew.... those lyrics are 4 U....

mastery

  • Global Moderator
  • Senior Sailor
  • *****
  • Keong: 0
  • Offline Offline
  • Posts: 26.128
Re: [Programming] Menghitung Kemunculan Karakter
« Reply #24 on: August 18, 2008, 11:51:21 pm »

hlah.. niat amat dibawa kluar? mo dijelasin apanya lagi, oom? Udah jelas, khan?
kode awal mah kurang jelas kali, soalnya ada yg lain yg nanya tuh? ;)



Code: [Select]
for (p++; *p && **p; )
   c[*(*p)++]++;
^ untuk setiap kemunculan karakter yang ditunjukkan oleh p, sampai akhir dari kumpulan karakter yang akan dihitung, increment nilai dalam elemen c yang bersesuaian dengan ASCII dari karakter tersebut.


hmm, kurang lengkap di awal, but emang tujuan kodenya emang begitu [thumbsup]

well, untuk menghilangkan kebingunan yg lain terhadap pilihan operator, penjelasan lebih detailnya begini:

p di sini bukan penunjuk karakter (character pointer), tapi penunjuk dari penunjuk karakter (pointer to character pointer), tepatnya dia adalah array dari parameter program (pemilihan huruf p itu dari kata parameter)...

nah, dalam spesifikasi POSIX/System V yg diadopsi oleh hampir semua operating system, parameter ini diawali dengan nama program, lalu parameter pertama, kedua, dst...

maka:

  • for (p++; --> maju ke argumen berikutnya, alias majukan pointer's pointer untuk menunjuk ke pointer selanjutnya

  • *p --> test apakah argumen ini valid alias pointer parameter tidak NULL (kita mendereference pointer ke pointer dengan *, sehingga sekarang p adalah pointer ke karakter dari parameter saja)

  • & **p --> test apakah dereference pointer dari dereference 'pointer ke pointer ke karakter' ini, hasilnya adalah karakter, adalah tidak nol (string terminator), kalau nol maka kita akan mengakhiri dan keluar dari loop

  • *(*p)++, mirip **p, tapi kita akan maju ke karakter selanjutnya, jadi kita batasi increment pada dereferen pointer sehingga kita menulis sebagai *(*p)++ bukannya **p++, soalnya kalau **p++ akan menyebabkan kita menuju parameter ketiga

sehingga sesuai kata arie, c[*(*p)++]++ adalah "increment nilai dalam elemen c yang bersesuaian dengan ASCII dari karakter tersebut"

btw, loopnya bisa juga ditulis dalam sebaris aja menjadi for (p++; *p && **p; c[*(*p)++]++); // C emang ebad ^-^

hmm, yg baca jadi tambah pusing kali ;D

arie26

  • Senior Sailor
  • ******
  • Keong: 0
  • Offline Offline
  • Posts: 13.241
  • *No More Me*
Re: [Programming] Menghitung Kemunculan Karakter
« Reply #25 on: August 19, 2008, 12:35:38 am »

males panjang lebar, oom [rolleyes] urusan pointer2an paling enak njelasinnya kalo digambar. so.. monggo, deh ^-^ ^-^
Logged
Guys, thanks for everything. Gw pamit... nice to know/meet you all

If you only knew.... those lyrics are 4 U....

bedul081

  • Special Member
  • Penyelam Unggul
  • *****
  • Keong: 0
  • Offline Offline
  • Posts: 9.900
  • .:Pencari Jejak Nya:.
Re: [Programming] Menghitung Kemunculan Karakter
« Reply #26 on: August 23, 2008, 03:17:58 pm »

Code: [Select]
<?php
$str
="AAABCCCDDEFGGHHHH";

for(
$i=0;$i<strlen($str);$i++)
{
$chr=substr($str,$i,1);
if($chr==$chr0)
{
$i1++;
}else{
$aChr[][0]=$chr0;
$aChr[][1]=$i1;
$chr0=$chr;
$i1=1;
}

$aKar[$chr]++;

}

$aChr[][0]=$chr0;
$aChr[][1]=$i1;

for(
$i=1;$i<sizeof($aChr);$i++)
{
$hasil1.=$aChr[$i][0].$aChr[$i][1];
}

ksort($aKar);
foreach(
$aKar as $nm=>$val)
{
$hasil2.="$nm$val";
}


print 
"sebelum:$str<br/>\nhasil:".$hasil1."<br/>hasil2:".$hasil2;
?>
php T_T hasil:
sebelum:AAABCCCDDEFGGHHHH
hasil:A3B1C3D2E1F1G2H4
hasil2:A3B1C3D2E1F1G2H4

belum nyoba yg no 2

*ralat.. salah ketik
« Last Edit: August 23, 2008, 03:25:36 pm by bedul081 »
Logged

kemana cinta?
_
anda mendapat peringatan karena jarang online di FI

gcybill

  • Forum Machi
  • ***
  • Keong: 0
  • Offline Offline
  • Posts: 2.988
Re: [Programming] Menghitung Kemunculan Karakter
« Reply #27 on: August 27, 2008, 07:40:07 am »

wuah.. gw pusing bacanya.. maklum otak gw IQ rendah neh.

nambah wacana aja: kalo pake sistem divide et impera aka divide n conquer aka adu domba aka quicksort. mungkin bisa O((n log n)+n)
+n ketika conquer sambil ngitung jumlah. seperti biasa, ini lebih boros di memory. silahkan dilanjutkan.
Logged

arie26

  • Senior Sailor
  • ******
  • Keong: 0
  • Offline Offline
  • Posts: 13.241
  • *No More Me*
Re: [Programming] Menghitung Kemunculan Karakter
« Reply #28 on: August 27, 2008, 03:22:02 pm »

hmmm... *itung**itung**itung**itung**itung* ga nemu  [idiot] [idiot] ;D
Logged
Guys, thanks for everything. Gw pamit... nice to know/meet you all

If you only knew.... those lyrics are 4 U....
Pages: 1 2 [3]   Go Up