/*
* najdenie parnych cisel v jednorozmernom poli
* datum: 25.10.2011
*/
#include<stdio.h>
#include<stdlib.h>
int parne(int x[], int y[], int pocet){
int i, parne=0;
//cyklus prebehne cele pole x
for(i=0;i<pocet;i++){
//porovna prvok v poli ci je parny (ziaden zvysok po deleni 2)
if(x[i]%2==0){
//ak je najdeny parny prvok, vlozi sa do pola y a zvysi pocet parnych cisel
y[parne]=x[i];
parne++;
}
}
/*
* ak je parnych cisel menej, nez prvkov v poli x (nie vsetky su parne)
* vlozi na dalsiu poziciu v poli y cislo 1 (pre neskorsie porovnavanie)
* usetri nam to dalsiu premennu, ktora si bude pamatat pocet parnych cisel
* (vo funkcii main ich potrebujeme na 2 miestach)
* takto sme nepatrne znzili pamatove naroky
*/
if(parne<pocet)
y[parne]=1;
return parne;
}
int main(void) {
int pocet, i;
scanf("%d", &pocet);
//malokuje miesto pre pole x (vstupne pole) a y (parne cisla)
int *x=(int *)malloc(pocet * sizeof(int));
/*
* pole y moze byt vacsie, nez je treba (ak sa v poli x nachadza aspoj neden neparny prvok)
* avsak zatial nevieme kolko parnych prvkov pole x bude obsahovat
* urcite ich ale nebude viac, nez pocet prvkov v poli x
*
* ina moznost je, zistti najprv pocet parnych prvkov a potom alokovat miesto pre
* pole y, to by ale vyzadovalo znovu porovavat prvky pre parnost a vkladat ich do pola y
*
* ja som zvolil vykon na ukor pamatovych narokov.
*/
int *y=(int *)malloc(pocet * sizeof(int));
//nacita do pola x prvky
for(i=0; i<pocet; i++)
scanf("%d", &x[i]);
printf("Povodne pole: ");
//vypise povodne pole x
for(i=0; i<pocet; i++)
printf("%d ",x[i]);
//vypise pocet parnych funkcii, ktory ziska ako navratovu hodnotu funkcie parne
printf("\nPocet parnych prvkov pola: %d\n",parne(x, y, pocet)); /*1*/
printf("Parne cisla: ");
//vypise prvky pola y
//ak sa v poli y nachadza 1, znamena to, ze tam nie je viac parnych prvkov
for(i=0; y[i]!=1 && i<pocet; i++) /*2*/
printf("%d ",y[i]);
printf("\n");
getchar();
return 0;
}
Comments
0 B
|👍
/👎
0 B
|0 👍
/0 👎
0 B
|0 👍
/0 👎