Kezdőoldal » Számítástechnika » Programozás » Hogyan tudnám ezt megvalósítan...

Hogyan tudnám ezt megvalósítani C-ben?

Figyelt kérdés

Sziasztok! Van egy 5 elemű tömböm, amely számokból áll. A számok nagysága folyamatosan csökken pl.:{15,12,9,7,5}. Be szeretnék tölteni egy tetszőleges számot, például a 13-ast, úgy, hogy az nagyságrendileg oda kerüljön, ahová való (jelen esetben a 15 és a 12 közé), és valahogy így folytatódjon a tömb : {15,13,12,9,7}->mindegyik szám a 13-tól odébbtolódjon eggyel.

A programom így néz ki:

int main()

{

int a[5]={15,12,9,7,6};

int size=5;

int szam=13;

int idx,i,tmp=0;

for(idx=0;idx<size &&idx<10;idx++)

{

if (a[idx]>szam && a[idx+1]<szam)

{

for (i=idx+2;i<size &&i<10;i++)

{

a[i]=a[i-1]; // Csak a 12-es számot másolja mindenhová a 13-as után. Valami ˜ötlet a megvalósításhoz?

}

a[idx+2]=a[idx+1];

a[idx+1]=szam;


}

printf("%d ",a[idx]);

}

}


Előre is köszi a válaszokat!


2016. márc. 13. 06:46
 1/6 anonim ***** válasza:

Insertion sort.

----------------


#include<stdio.h>

int main(){


int i,j,s,temp,a[20];


printf("Enter total elements: ");

scanf("%d",&s);


printf("Enter %d elements: ",s);

for(i=0;i<s;i++)

scanf("%d",&a[i]);


for(i=1;i<s;i++){

temp=a[i];

j=i-1;

while((temp<a[j])&&(j>=0)){

a[j+1]=a[j];

j=j-1;

}

a[j+1]=temp;

}


printf("After sorting: ");

for(i=0;i<s;i++)

printf(" %d",a[i]);


return 0;

}


Output:

Enter total elements: 5

Enter 5 elements: 3 7 9 0 2

After sorting: 0 2 3 7 9

2016. márc. 13. 08:09
Hasznos számodra ez a válasz?
 2/6 anonim ***** válasza:
45%

Bocs.

----


int main()

{

int a[3],i,j,temp;

printf("Enter 5 Array Element:\n");

for(i=0;i<5;i++)

{

scanf("%d",&a[i]);

}

for(i=0;i<5;i++)

{

temp=a[i+1];

j=i;

while(temp=0)

{

a[j+1]=a[j];

j--;

}

a[j+1]=temp;

}

printf("Sorted Array id: ");

for(i=0;i<3;i++)

{

printf("%d",a[i]);

}

return 0;

}

2016. márc. 13. 08:14
Hasznos számodra ez a válasz?
 3/6 A kérdező kommentje:
Nagyon szépen köszönöm! :)
2016. márc. 13. 08:51
 4/6 anonim ***** válasza:
100%

Ugye itt arról van szó hogy sorba nézed az elemeket és ha elérsz egy olyan elemet ami már kisebb mint a bekért szám akkor oda kell beszúrni az új elemet.


Amit te csinálsz az az hogy felülírod az elemet, majd átmásolod mindig a következő helyre az előzőt. Nem felülírni kell hanem cserélni.


szam1 és szam2 értékét így cseréled ki:


int tmp = szam1; //megjegyzed szam1-et

szam1 = szam2; //felülírod szam1-et szam2-vel

szam2 = tmp; //a megjegyzett szam1 érteket beírod szam2-be


Na itt is valami ilyesmit kell csak növekvő indexekkel:


{15, 12*, 9, 7, 6} //a 13-at cseréljük 12-vel

{15, 13, 9*, 7, 6} //a 12-t cseréljük 9-cel

{15, 13, 12, 7*, 6} //a 9-et cseréljük 7-tel

{15, 13, 12, 9, 6*} //a 7-et cseréljük 6-tal

{15, 13, 12, 9, 7}


[link]

2016. márc. 13. 11:20
Hasznos számodra ez a válasz?
 5/6 anonim ***** válasza:
Még annyit hogy úgy is lehet hogy te csináltad, mindent egy ciklus alá, de ne félj különválasztani a részfeladatokat ha úgy egyszerűbb vagy átláthatóbb lesz a program.
2016. márc. 13. 11:28
Hasznos számodra ez a válasz?
 6/6 A kérdező kommentje:
Nagyon szépen köszönöm a választ. Próbálkoztam cserével is, csak nem ciklusban, azért nem működött. Nagyon szépen köszönöm mégegyszer!
2016. márc. 15. 19:05

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!