|
[ b.danijel @ 11.11.2008. 21:35 ] @
| Ovako glasi zadatak:
Napisati C program koji na osnovu celebrojnog niza X od n elemenata (n<61) formira nizove Z i Y.Niz Y predstavlja sazeti niz X(izbaceni su ponovljeni elementi iz niza X),a niz Z sadrzi broj pojavljivanja redom elemenata formiranog niza Y u nizu X.
Primer kako program treba da radi:
X=(3,-4,8,-6,-3,0,5,3,9,5,5,4,-4)
Y=(3,-4,8,-6,-3,0,5,9,4)
Z=(2,2,1,1,1,1,3,1,1)
Ovo sam ja uradio:
Code:
#include <stdio.h>
#define MAX_NIZ 61
main()
{
/*Definicija promenljivih*/
int k,n,j,i,x[MAX_NIZ],y[MAX_NIZ],z[MAX_NIZ];
/*Inicijalizacija niza*/
for(i=0;i<MAX_NIZ;i++) x[i]=y[i]=z[i]=0;
printf("Program za sortiranje niza");
do{
printf("\n Broj elemenata niza\n");
scanf("%d",&n);
}while(n<=0||n>MAX_NIZ);
printf("Unesite el.X niza\n");
for(i=0;i<n;i++){
scanf("%d",&x[i]);}
for(j=0,i=0;i<n;i++){
if(i==0)y[j]=x[i];
else{for(k=1;k<=i;k++)
if(x[i]==x[i-k])j++;
else y[j]=x[i];j++;}
}
for(i=0;i<n;i++)
printf("%d",y[i]);
}
Unapred zahvalan na bilo kom savetu!
[Ovu poruku je menjao X Files dana 11.11.2008. u 23:12 GMT+1] |
[ X Files @ 11.11.2008. 22:53 ] @
Danijele, probaj ovaj kod /netestirano/. Ostavio sam i neke komentare, pa pitaj sta nije jasno. Pre svega proveri kod, mozda sam negde omasio pa da popravimo.
Code:
/* ukljucuje se podrska za funkcije: printf(), scanf(), ... */
#include <stdio.h>
/* ukljucuje se podrska za funkciju: system() da se simuira Press any key... */
#include <stdlib.h>
/* predprocesorska definicija za maxvelicinu niza */
#define MAX_NIZ 61
/* glavna funkcija... int stoji ispred main jer je to po najnovijem standardu, sa void kao argumentom */
int main(void)
{
/* definicije:
x - ceo niz
y - sazeti niz (bez ponavljanja elemenata)
z - broj pojavljivanja elementa u sazetom nizu
n - broj elemenata niza
i - brojac
k - trenutni broj elemenata sazetog niza
j - brojac
upisan - da li je trenutni elementi niza X vec upisan u niz Y
*/
int x[MAX_NIZ], y[MAX_NIZ], z[MAX_NIZ], n, i, k, j, upisan;
/* upisi broj elemenata niza X i ne dozvoli vrednosti van opsega*/
do
{
printf( "Upisite broj elemenata niza:" );
scanf( "%d", &n );
} while( n<=0 || n>MAX_NIZ );
/* prelazak u novi red */
printf( "\n");
/* upis redom elemenata niza X */
for( i=0; i<n; i++ )
{
printf( "Upisite element niza, X[%d]=", i );
scanf( "%d", &x[i] );
}
/* Inicijalizacija na nulu, trenutni broj elemenata niza Y */
k=0;
/* petlja koja prolazi kroz sve elemente niza X */
for ( i=0; i<n; i++ )
{
/* upisan postavljamo na nulu
...a on je indikator koji ce pokazati da li je trenutni element niza X vec u nizu Y
0 - nema ga u nizu Y
1 - vec je u nizu Y
*/
upisan=0;
/* unutrasnja petlja (unutar "i" petlje) koja prolazi kroz sve elemente niza Y */
for ( j=0; j<k; j++ )
{
/* da li je trenutni element niza X vec u nizu Y */
if ( x[i] == y[j] )
{
/* jeste, zato postavi indikator na jedinicu */
upisan=1;
/* istovremeno uvecaj za jedan brojac pojavljivanja u nizu Z */
++z[j];
/* izadji odmah iz petlje "j", jer nema svrhe dalje traziti */
break;
}
}
/* ako nije upisan */
if ( upisan == 0 )
{
/* pocetni broj pojavljivanja je naravno jedan, sto upisujemo u niz Z */
z[k]=1;
/* belezimo inicijalnu pojavu u niz Y */
y[k] = x[i];
/* uvecavamo broj elemenata niza Y za jedan */
++k;
}
}
/* ispisujemo niz X */
printf( "\n\nX=(" );
for ( i=0; i<n-1; i++ )
printf( "%d,", x[i] );
printf( "%d)", x[n-1] );
/* ispisujemo niz Y */
printf( "\n\nY=(" );
for ( i=0; i<k-1; i++ )
printf( "%d,", y[i] );
printf( "%d)", y[k-1] );
/* ispisujemo niz Z */
printf( "\n\nZ=(" );
for ( i=0; i<k-1; i++ )
printf( "%d,", z[i] );
printf( "%d)", z[k-1] );
/* prelazak u novi red */
printf( "\n" );
/* Ovo nam sluzi kod konzolnih programa da vidimo rezuluate
pre nego sto program izadje iz konzole nakon zavrsetka */
system( "PAUSE" );
}
[Ovu poruku je menjao X Files dana 14.11.2008. u 09:34 GMT+1]
[ Eurora3D Team @ 18.11.2008. 01:40 ] @
Moze i ovako , da se unos brojeva i provera rade u istoj petlji. Inace princip je isti kao u kodu koji je napisao X Files
Program je testiran i radi dobro ...
Code:
#include <stdio.h>
#include <stdlib.h>
#define MAX_NIZ 61
int main()
{
int X[MAX_NIZ], Y[MAX_NIZ], Z[MAX_NIZ], No = 0 , i , ii ,yMax = 0 , ex;
printf("Program za sortiranje niza\n");
do
{
printf("Broj elemenata niza ? ");
scanf("%d",&No);
}
while(No <= 0 || No > MAX_NIZ);
printf("\n");
for( i = 0; i < No; i++ ) //
Z[i] = 0;
for( i = 0; i < No; i++ ) // upisujemo brojeve
{
printf( "Upisite element niza, X[%d]=", i );
scanf( "%d", &X[i] );
ii = 0;
ex = 0;
while(ii < yMax) // pretrazujemo niz Y da proverimo dali je trenutni broj vec upisan
{
if(Y[ii] == X[i]) // ako jeste povecavamo vrednost na toj poziciji u nizu za brojanje ponavljanja
{
Z[ii]++;
ex = 1;
break;
}
ii++;
}
if (!ex) // ako nije upisujemo ga na kraj niza Y i povecavamo index za sledeci element
{
Y[yMax] = X[i];
Z[yMax] = 1;
yMax++;
}
}
// ispis
printf( "Niz X : " );
for ( i = 0; i < No; i++ )
printf( "%d,", X[i] );
printf( "\nNiz Y : " );
for ( i = 0; i < yMax; i++ )
printf( "%d,", Y[i] );
printf( "\nNiz Z : " );
for ( i = 0; i < yMax; i++ )
printf( "%d,", Z[i] );
printf("\n");
system( "PAUSE" );
return 0;
}
Copyright (C) 2001-2024 by www.elitesecurity.org. All rights reserved.
|