PDA

Tam Sürümünü Görmek İçin : sorunu bulamadim


CaCao
28/10/2007, 10:56
selam arkadaslar
programda girilen sayilarin positif ve negatif olarak ayirmasi lazim ve bu programin -100 ile 100 arasinda calismasi lazim ama olmuyo bi turlu
umarim yardim edebilirsiniz.

cikti soyle olucak:
Enter array elements: 2 3 0 -9 12 -15 0 4 9 101
Psitive numbers: 2 3 12 4 9
Negative numbers: -9 -15


/**********************function seperate***************************/
void separete(int ary[],int size, int n_ary[],int p_ary[],int *j, int *k)
{
int i=0;
*j=0; *k=0;

for(i=0;i<size;i++)
{
if(ary[i]>0)
p_ary[*j]=ary[i];
(*j)++;
}

for(i=0;i<size;i++)
{
n_ary[*k]=ary[i];
(*k)++;
}
}
/**********************Main************************ **/
int
main(void)
{
int ary[SIZE], //array in program
i, //loop
n_ary[SIZE], //negative values array
p_ary[SIZE], //positive array
j, //index for positive elemens
k; //index for negative elemens

i=0;
n_ary[i]=0;
p_ary[i]=0;

/*get the elements in an array*/
printf("Enter array elements:");
scanf("%d",&ary[i]);

while(i<SIZE && ary[i]>-100)
{
i++;
scanf("%d",&ary[i]);
}

/*call the function*/
separete(ary,i,n_ary,p_ary,&j,&k);

//print the positive arrays

printf("\nPositive numbers: ");
for(i=0;i<j;i++)
{
printf("%d ",p_ary[j]);
}
//print the negative values
printf("\nNegative numbers: ");
for(i=0;i<k;i++)
{
printf("%d ",n_ary[k]);

}
printf("\n");
system("pause");
return(0);
}


quasimodo
28/10/2007, 17:03
#include <stdio.h>
#include <stdlib.h>

void isAlloc(void * ptr)
{
if (!ptr) {
fprintf(stdout, "Can not Alloc...");
exit(EXIT_FAILURE);
}
}

void seperate(int array[], int size, int ** pArray, int ** nArray, int * count)
{
int i, pCount = 0, nCount = 0;

*pArray = NULL; // &
*nArray = NULL; // 6

for( i = 0; i < size; ++i) {
if(array[i] > 0) { // arr[10] = {10, 2, 23, -12, 0, -22, -12, 32, 3, -1};
++pCount;

*pArray = (int *)realloc(*pArray, pCount * sizeof( int));
isAlloc(*pArray);

*(*pArray + pCount - 1) = array[i];
}
else {
++nCount;

*nArray = (int *)realloc(*nArray, nCount * sizeof( int));
isAlloc(*nArray);

*(*nArray + nCount - 1) = array[i];
}
}
count[0] = pCount;
count[1] = nCount;
}

void displayArray(int * array, int size)
{
int i;
for( i = 0; i < size; ++i)
printf("%d ", array[i]);

printf("\n");
}
int main()
{
int arr[] = {10, 2, 23, -12, 0, -22, -12, 32, 3, -1};
int * pArr = NULL, * nArr, * count = (int *)malloc(sizeof( int) * 2);
int i = 0;

seperate( arr, 10, &pArr, &nArr, count);

displayArray( pArr, count[0]);

free(pArr);
free(nArr);
free(count);

return 0;
}

CaCao
28/10/2007, 21:42
wow
bu cok karisik =)
ama tesekkurler...
bi bakiyim anlamaya calisiyim =)

dotnet
29/10/2007, 20:33
Hata veriyor mu? veya nasıl bir çıktı veriyor...

acehreli
29/10/2007, 20:53
CaCaO, ben bir kac hata buldum ve [Ali] ile isaretledim:


/* [Ali] "seperate" mi yoksa "separete" mi? Ikisinden birisi yanlis... :) */
/**********************function seperate***************************/
void separete(int ary[],int size, int n_ary[],int p_ary[],int *j, int *k)
{
int i=0;
*j=0; *k=0;

for(i=0;i<size;i++)
{
if(ary[i]>0)
p_ary[*j]=ary[i];
(*j)++;
}

for(i=0;i<size;i++)
{
/* [Ali] Burada da sayinin eksi olup olmadigina bakacak bir kosul
* gerekiyor. */
n_ary[*k]=ary[i];
(*k)++;
}
}

/* [Ali] Bunlari ben ekledim */
#define SIZE 100
#include <stdio.h>
#include <stdlib.h>

/**********************Main************************ **/
int
main(void)
{
int ary[SIZE], //array in program
i, //loop
n_ary[SIZE], //negative values array
p_ary[SIZE], //positive array
j, //index for positive elemens
k; //index for negative elemens

i=0;

/* [Ali] Bu sifirlama islemlerine gerek yok. Zaten ilk ogenin bir
* ozelligi de yok; neden o sifirlansin da otekiler belirsiz
* birakilsinlar... */
n_ary[i]=0;
p_ary[i]=0;

/*get the elements in an array*/
printf("Enter array elements:");
scanf("%d",&ary[i]);

/* [Ali] Burada bir hata var: burada i, SIZE-1 oldugunda while'in
* icinde artirilacak ve SIZE olacak. O zaman dizinin sonundan bir
* sonraki ogeye erisiyor olacaksin. (SIZE buyuklugundeki bir dizinin
* yasal ogelerinin sayilari [0, SIZE-1] araligindadir.) */
while(i<SIZE && ary[i]>-100)
{
i++;
scanf("%d",&ary[i]);
}

/*call the function*/
separete(ary,i,n_ary,p_ary,&j,&k);

//print the positive arrays

printf("\nPositive numbers: ");
for(i=0;i<j;i++)
{
/* [Ali] Burada i'yi kullanmak istiyorsun; j'yi degil. */
printf("%d ",p_ary[j]);
}
//print the negative values
printf("\nNegative numbers: ");
for(i=0;i<k;i++)
{
/* [Ali] Ayni sekilde; i olacak, k degil. */
printf("%d ",n_ary[k]);

}
printf("\n");

/* [Ali] Bu senin hatan degil ama icinde bulundugumuz acikli durumun
* bir gostergesi. :) Giristen gelen sayilari arti ve eksi olarak ikiye
* ayiran bir program ayrica sonunda durmak da zorunda. :) */
system("pause");
return(0);
}

Ali