Jump to content
Sign in to follow this  
akuBest

Carik Bilangan Kekerapan

Recommended Posts

a'kum. camni, aku ada problem sket. andaikan ada 5 no integer. pastu, aku nak cari bil no yang sama dalam array tu. contoh aku ada 1,1,1,2,2. so kat situ no1 ada 3 dan no 2 ada dua kan? kalo string senang nak wat. tapik yg ni dah puah buat, takleh gak. ni program yg aku dah wat, ada betul sket, tapi nak mintak pandangan ler.... hehehehe

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<alloc.h>

int main(void)
{
 int *pelajar, *sama;
 int i, j, bil, tinggi;

 clrscr();

 printf("Masukkan bilangan pelajar : ");
 scanf("%d", &bil);

 if(bil<1)
 {
	printf("Bilangan data <1 ");
	exit(1);
 }

 pelajar = (int *) malloc(bil * sizeof(int));
 sama = (int *) malloc(bil * sizeof(int));
 if(pelajar == NULL)
 {
	printf("Ralat peruntukan ruang");
	exit(1);
 }

 printf("Masukkan data\n");
 for(i=0; i<bil; i++)
 {
	scanf("%d", &pelajar[i]);
	sama[i] = 1;
 }


 for(i=0; i<bil; i++)
 {

	tinggi = pelajar[i];
	for(j=1; j<bil; j++)
	{
  if(pelajar[j] == tinggi)
  {
  	sama[i]++;
  }
	}
	printf("%d\t%d\n", tinggi, sama[i]);
 }




 free(pelajar);
}

aturcara tu aku wat peruntukan ruang secara dinamik sbb jumlah bil no yang user nak bergantung pada depa. bila aku run aturcara tu, aku masuk input 5, then aku masukkan 1 1 1 2 1 sbg input. dia leh detect 1 ada 4, tapi berulang sbb outputnya aku wat dlm gelung for. yg 2 tu dia kata 2 sbb initial value tu aku wat=1. so, ader tak cara lagik simple? aku tgh godek2 lagik ni.....

Share this post


Link to post
Share on other sites

i rasa u kena guna data structure, betul ke??

tak kira u kalau u nak dia style camner, it's

depend to you. ni kalau u nak secara pro,

ni kalau orang tu input ikut berapa banyak yang

dia suka.. psal... kita tak tahu berapa banyak bilangan

unik data yg user input...

so struct dia lebih kurang camni...

typedef int typedata;

struct examplestat {
typedata data;
int number;
// struct examplestat *prev;
struct examplestat *next;
} *head, *tail;
.... tapi kalau u memang nak user tu input ada lima je, so, baik sediakan variable stack[5] je kan.. satu yang akan simpan unik data, satu lagi dia akan simpan bilangan data.
typedata data[5]; int number[5];

Edited by raihan

Share this post


Link to post
Share on other sites

a'kum. ermmm... mmg input tu tak terhad, sbb bergantung pada user. sebab tu aku pakai malloc. malloc tu fungsi sediakan ruang secara dinamik. maksudnya dia create berapa banyak ruang berdasarkan kehendak user. contoh kalo user masok 5, so, dia akan create 5 ruang, kalo user masukkan 10, dia akan sediakan 10 ruang, mengikut jenis data user. so aku rasa benda ni lebih kurang jer kot ngan struct tu walaupon struct tu lebih elok kot. ???? yg jadik masalahnya skang, aku takleh wat lagik nak tentukan berapa bilangan satu-satu no dalam tatasusunan yang user masukkan. tgh mencuba lagik.....

Share this post


Link to post
Share on other sites

ops, cara u pun betul jugak...

pening pening sikit ni ~~~

jap ek, masalah yg u proses utk statistik,

ikut pendapat i..

i edit lagi, psal ada kesilapan nih, lepas kurang sibuk sikit ~

// declaration
int *input;
int index = 0;

// input
input = (int *)malloc(bil * sizeof(int));
/*******/
for(i=0;i<bil;i++)
	scanf("%d",&input[i]);

// proses
for(i=0; i<bil; i++) {
	for(j=0;j<index;j++) {
  if(pelajar[j]==input[i]) {
  	sama[j]++;
  	break;
  }
	}
	if(j>=index) {
  pelajar[j] = input[i];
  sama[j] = 1;
	}
}

// output
for(i=0;i<=index;i++)
	printf("%d:%d\n",pelajar[i],sama[i]);

test la, eh.. kalau ada error tu fixkan lagi.. bz sikit ni, sorri tongue.gif

Edited by raihan

Share this post


Link to post
Share on other sites

bengang tul la.... server down jer...... (oppss tak masuk topik nih) aku dah try , tapi tak betul. aku dah betulkan aturcara aku yg 1st ari tu. dah leh jalan, tapi ada sket bug kat paparan output.

#include<stdio.h>
#include<alloc.h>
#include<stdlib.h>
#include<conio.h>

int main(void)
{
 int *pelajar;
 int i, j, bil, sama;

 clrscr();

 printf("Masukkan bilangan pelajar : ");
 scanf("%d", &bil);

 pelajar = (int *)malloc(bil * sizeof(int));
 if(pelajar == NULL)
 {
  printf("Ralat peruntukan ruang\n");
   exit(1);
 }

 printf("Masukkan data : \n");
 for(i=0; i<bil; i++)
  scanf("%d", &pelajar[i]);

 printf("\nTinggi\tBilangan\n");

 for(i=0; i<bil; i++)
 {
  sama = 0;
   for(j=0; j<bil; j++)
   {
    if(pelajar[j] == pelajar[i])
      	sama++;
      else
      	continue;
   }
   printf("%4d\t%4d\n", pelajar[i], sama);
 }

 free(pelajar);
 getch();
 return 0;

}

contoh interaksi dia

Masukkan bilangan pelajar : 5

Masukkan data :

1

1

2

3

2

Tinggi Bilangan

1 2

1 2

2 2

2 2

3 1

dia dah bleh detect bil nombor tu, tapik, camner aku nak buat dia tak berulang camtu? kalo aku tak bubuh dlm gelung, dia takleh kuar output lak. ada cadangan????

Share this post


Link to post
Share on other sites

ye~ adeh~

u punya masalah adalah kerana u gabung

blok proses data dengan blok output@paparan

dalam satu blok gelung, adeh~

jadi ke~

pengumpulan maklumat jenis u punya problem ni

tak boleh dibuat dalam satu gelung je bersama paparan

output ... cuba u fikir

sehabis mungkin perjalanan proses dalam kotak kepala u

basic problem solving nih, adeh la~

so, wat la cam biasa,

input => proses => output

Edited by raihan

Share this post


Link to post
Share on other sites

#include <stdio.h>
#define bil 5

int main(void)
{
    
    int Pelajar[bil] = {1,1,2,3,2};
    int Bilangan[bil] = {0};
    int i = 0;
    int j = 0;
    int temp;

    for (i = bil - 1; i > 0; i--)
    {
        for (j = 0; j < i; j++)
        {
            if (Pelajar[j] > Pelajar[j + 1])
            {
                temp = Pelajar[j];
                Pelajar[j] = Pelajar[j + 1];
                Pelajar[j + 1] = temp;
            }
        }
    }

    for(i = 0, j = 0; i < bil;)
    {
        temp = Pelajar[i];

        while (temp == Pelajar[i] && i < bil)
        {
            Bilangan[j]++;
            i++;
        }
        j = i;
    }
    
    printf("\nTinggi\tBilangan\n");
    for(i = 0; i < bil; i++)
    {
        if (Bilangan[i] != 0)
            printf("%d\t%d\n", Pelajar[i], Bilangan[i]);
    }
}

Share this post


Link to post
Share on other sites

hehe~ i nampak u ada wat swap variable..

kalau i kan, takyah tambah satu lagi variable temp'

so, it'll be camni.. guna teknik XOR

Pelajar[j] = Pelajar[j] ^ Pelajar[j + 1];
Pelajar[j + 1] = Pelajar[j] ^ Pelajar[j + 1];
Pelajar[j] = Pelajar[j] ^ Pelajar[j + 1];

anyway.. mykk, member ni tanya soklan yg guna

dynamic variable la ~ hehe~

Share this post


Link to post
Share on other sites

anyway.. mykk, member ni tanya soklan yg guna

dynamic variable la ~ hehe~

Itu hanya untuk beri idea secara umum.

Kalau untuk aplikasi sebenar guna binary tree not array(either dynamic or static)

Share this post


Link to post
Share on other sites

A'kum... tima kasih bebanyak kengkawan semua. aku dah dpt buat. aku guna idea mykk tu. knp la aku tak terpikir suma tu..... tima kasih..... aku ubah sket jer..

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<alloc.h>


int main(void)
{
 int *pelajar, *sama;
 int i, j, bil, tinggi;

 clrscr();

 printf("Masukkan bilangan pelajar : ");
 scanf("%d", &bil);

 if(bil<1)
 {
	printf("Bilangan data <1 ");
	exit(1);
 }

 pelajar = (int *) malloc(bil * sizeof(int));     // ingatan dinamik
 sama = (int *) malloc(bil * sizeof(int));
 if(pelajar == NULL)
 {
	printf("Ralat peruntukan ruang");
	exit(1);
 }

 printf("Masukkan data\n");
 for(i=0; i<bil; i++)
 {
	scanf("%d", &pelajar[i]);
	sama[i] = 0;
 }

 for (i = bil - 1; i > 0; i--)         //mykk punya kod utk swap
 {
  for (j = 0; j < i; j++)
  {
      if (pelajar[j] > pelajar[j + 1])
      {
          tinggi = pelajar[j];
          pelajar[j] = pelajar[j + 1];
          pelajar[j + 1] = tinggi;
       }
   }
  }
 for(i=0; i<bil;) // ni lbh krg jer ngan cara mykk
 {
  j = i;
  tinggi = pelajar[i];
  while(tinggi == pelajar[i] && i < bil) // mykk punya
   {
      sama[j]++;
      i++;
   }
  j = i;
 }

 printf("\nTinggi\tBilangan\n");    // mykk punya
 for(i=0; i<bil; i++)
 {
    if(sama[i] != 0)
        printf("%4d\t%4d\n",pelajar[i],sama[i]);
 }	

 free(pelajar);
 free(sama);
 getch();
}

tima kasih suma....

Share this post


Link to post
Share on other sites

wow~ u ada cara binary tree for this problem solving.

leh la terangkan kat sini, camner u punya cara..

i ingat yg binary tree ni, leh la gak utk ai based solving,

tapi tak pernah cuba utk kekerapan nye problem lagi...

kiter share share kat sini ek ~~

akubest

ada cara lagi tu, usha lagi camner cara utk mantapkan

art of programming code u tu~ ek.

Share this post


Link to post
Share on other sites

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

struct Pelajar
{
    int Nombor;
    int Bilangan;
    struct Pelajar *kiri;
    struct Pelajar *kanan;
};
typedef struct Pelajar *PELAJAR;

PELAJAR Insert(PELAJAR P, int num)
{
   if (P == NULL)
    {
        P = malloc(sizeof (*P));
        if(P == NULL)
     {
      printf("\nInsufficient Memory\n");
      exit(1);
     }
        P->Nombor = num;
        P->Bilangan = 1;
        P->kiri = NULL;
        P->kanan = NULL;
    }
    else if(num < P->Nombor)
        P->kiri = Insert(P->kiri, num);
    else if(num > P->Nombor)
        P->kanan = Insert(P->kanan, num);
    else
        P->Bilangan++;

    return P;
} 

void Print(PELAJAR P)
{
    if(P != NULL)
    {
        Print(P->kiri);
        printf("%d%\t%d\n", P->Nombor, P->Bilangan);
        Print(P->kanan);
    }
}

void Destroy(PELAJAR P)
{
    if(P != NULL)
    {
        Destroy(P->kiri);
        Destroy(P->kanan);
        free(P);
    }
}

int main(void)
{
    const int bil = 5;
    PELAJAR P;
    int temp;
    int i;

    P = NULL;

    for(i = 0; i < bil; i++)
    {
        scanf("%d", &temp);
        P = Insert(P,temp);
    }

    printf("\nTinggi\tBilangan\n");
    Print(P);
    Destroy(P);
}

takada error checking

Share this post


Link to post
Share on other sites

aa~ ye ~ ye ~

tak terfikir lak, setiap entitinya leh tersusun dengan

cara binary tree, dua kerja leh wat dalam satu fungsi,

best ar ko~

tapi kan, error handling u dah ada, cuma ada sikit tertinggal,

struct PELAJAR
{
   int Nombor;
   int Bilangan;
   struct Pelajar *kiri;
   struct Pelajar *kanan;
} *parent;
/*****************/
.
if(P == NULL) {
     printf("\nInsufficient Memory\n");
     Destroy(parent);
     exit(1);
}
.
/*****************/
.main
Insert(parent,temp);
.

u punya PELAJAR P; patut tukar ke PELAJAR *P; sebenarnya.

bukan dengan P = NULL; yg selambe deh,

# NULL is 4 bytes (32bits)

so, bila P = NULL; // sama dengan

P.Nombor = NULL; // kena faham konsep pointer nih

adeh la~ salam ceria happy.gif

Edited by raihan

Share this post


Link to post
Share on other sites

mykk says

struct Pelajar
{
   int Nombor;
   int Bilangan;
   struct Pelajar *kiri;
   struct Pelajar *kanan;
};
typedef struct Pelajar *PELAJAR;
not
struct PELAJAR

Share this post


Link to post
Share on other sites

hihi~ tongue.gif sorry.. tak perasan la ~

i just want to share knowledge ek, jangan marah ~

jahat tul saya ni.. tahu nak kritik je kan.. ~

# lama tak pegang c la, byk careless. tinggal teori je tongue.gif

adeh la ~

Share this post


Link to post
Share on other sites

A'kum... wah terrer arr korang, ni nak lajor lagik nih.... tima kasih sumaaa.......

akubest

ada cara lagi tu, usha lagi camner cara utk mantapkan

art of programming code u tu~ ek.

okiess.... tq

aku ada terbaca pasal binary tree nak solve kan problem nih, tapi memandangkan dia cuma nak selesaikan problem ni guna cam yg aku buat tu jer, aku tak go through sgt pasal tu... mmmm.. tu dlm data structure kan? anyway, bnyk lagi aku kena lajor..

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...