Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 13 odgovora
  • 3.988 pregleda

Najnovija ↓

Pronalazenje elementa niza. 26.10.2010. u 16:44 · pre 195 meseci #1
Pozdrav svima!Zadatak je sledeci:Napisati program kojim se u datom nizu a[10] pronalazi element jednak vrednosti "dati_broj" i prikazuje na ekranu njegov indeks.
Evo ga resenje koje meni koji sam poceo da ucim nizove ne znaci mnogo pa bih Vas zamolio da mi objasnite odredjene linije programa:
Code:

#include<stdio.h>
static int a[]={0,0,0,0,0};
int i,dati_broj,indeks=-1;<----------------------------zasto je promenljivoj "indeks" zadata vrednost -1?

main()
{

 printf("\nUnesi niz od 5 brojeva: \n");<----------------cemu ovo kada se u zadatku trazi niz koji ima 10 elemenata???


  for(i=o,i<=4,i++);<-------------------ovo kapiram

   {

   printf("\n%d",i);<------------------------kapiram

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

   }

   printf("Unesi broj koji trazimo u nizu:");<--------------jasno

   scanf("%d",&dati_broj);<-------------------------jasno

   i=0;<------------------------jasno,prva vrednost brojaca je 0

  do

     if(a[i]==dati_broj)indeks=i;-----------------------???????

     i++;

    }

  while(i<=4 && indeks<0);<----------------------???????????
  
    if(indeks>=0)<----------------------------------???????????

    printf("\nIndeks unetog broja je:%d",indeks);

 else

    printf("\nU nizu nema odgovarajuceg broja\n");
 }
  



Unapred hvala!
Re: Pronalazenje elementa niza. 26.10.2010. u 17:18 · pre 195 meseci #2
Redni broj u nastavku teksta je redni broj strelice u kodu:

1. Vrednost -1 za index je specijalna vrednost koja označava da broj nije pronađen. Ako je broj pronađen onda će vrednost promenljive index biti indeks tog broja (to jest imaće vrednost od nule na više)

2. Program je napisan za zadatak sa pet brojeva, a ne sa deset. U nekoliko mesta u kodu se to vidi.

...

5. Tako se u niz "a" na mestu "i" upisuje vrednost pomoću funkcije scanf. Funkciji scanf mora da se daje adresa promenljive, da bi funkcija scanf mogla nešto da upiše u tu adresu. Operator & služi da vrati adresu onoga što ide posle, ali sudeći po tački 7 to ti je već jasno. Možda je jasnije kad se dodaju zagrade: &(a[ i ]).

...

9. Ako je pronađen broj onda se indeks tog broja čuva u promenljivoj index.

10. Petlja se vrti pet puta (od 0 do 4), ali se izlazi iz petlje i pre kraja ako je broj pronađen (to jest index prestane da bude -1).

11. Ako je broj pronađen (index >= 0) onda napiši pod kojim je indeksom, a ako nije onda napiši da nije pronađen.
Sviđa mi se1
Re: Pronalazenje elementa niza. 28.10.2010. u 02:14 · pre 194 meseca #3
Hvala Mihajlo!Ali opet me nešto muči:u pragramu se kaže da se unese niz od 5 broja:

printf("\nUnesi niz od 5 brojeva: \n")

for(i=o,i<=4,i++);

{

printf("\n%d",i);

scanf("%d",&a);

Šta bi se desilo ako bih upisao u nizu brojeve veće od 4?npr.10,11,12,13,79.Ne mogu da vidim kako se program izvršava jer ne mogu da ga pokrenem u dev-c++,evo gde je greška:



Zbog čega je ovde problem?I da ponovim pitanje,da li niz mora da ima iskljucivo brojeve manje ili jednake sa 4?

POZDRAV!
Re: Pronalazenje elementa niza. 28.10.2010. u 03:21 · pre 194 meseca
izmenjeno 1 put, poslednji put Novice93 28.10.2010. u 03:47
  1. Novice9328.10.2010. u 03:47zapis iz teksta poruke
#8
Sada je bila problem zagrada i sada program radi,ali evo kako to izgleda :


Ovakvo izvršavanje nema veze sa mozgom!

I sta je sada ovo???
Re: Pronalazenje elementa niza. 28.10.2010. u 08:14 · pre 194 meseca #9
Code (c):

#include <stdio.h>
#include <stdlib.h> // <--- Potrebno zbog: system( "PAUSE" );

// Kada u kodu na vise mesta imamo KONSTANTU treba to tako i definisati...
// Konkretno, imamo 5 elemenata, pa kasnije neku vrednost 4, za koju se ne
// zna da li je i u kakvoj je vezi sa brojem 5. Kada se uvede konstanta,
// onda je sve jasno
#define BROJ_ELEMENATA 5

// Ovako kaze standard:
// * treba da ima povratnu vrednost (int),
// * eksplicitno reci da nema argumente (void), ako nema argumente
int main( void )
{
    // static int a[] = { 0, 0, 0, 0, 0 };
    // nepotrebno:
    // 1. da bude VAN glavne funkcije main
    // 2. da bude static
    // 3. da bude incijalizovano, jer cemo svakako samim unosom dodeliti vrednosti
    // ZATO PISEMO:
    int a[BROJ_ELEMENATA];
    int i, dati_broj, indeks=-1;

    printf( "\nUnesi niz od 5 brojeva:\n" );

    // dakle, od i=0 do i<BROJ_ELEMENATA, nista CETVORKA

    //for( i=0; i<BROJ_ELEMENATA; i++ ); // <--- NIKAKO TACKA ZAREZ, JER SE PETLJA VRTI "U MESTU", NE UZIMA BLOK U OBZIR !!!!!!!!
    for( i=0; i<BROJ_ELEMENATA; i++ )
    {
         // printf( "\n%d", i );
         // Jasnije reci sta je na ekranu
         printf( "Unesite %d. broj:", i+1 ); // <--- stavili smo i+1, da bi na ekranu brojanje pocelo od JEDINICE:
         scanf( "%d", &a[i] );
    }

   printf( "Unesi broj koji trazimo u nizu:" );
   scanf( "%d", &dati_broj );

   // "i" inicijalizujemo na pocetnu vredost, jer nakon "for" petlje, vise nije NULA
   i=0;

   do
   {
       if( a[i] == dati_broj )
           indeks = i; // <--- ovime smo (ako je uslov ispunjen) definitivno dodelili vrednost vecu od -1 (minimalna vrednost indeksa je nula)
       i++;
   } while ( i < BROJ_ELEMENATA && indeks < 0 );
 
    if ( indeks >= 0 )
        printf("\nIndeks unetog broja je:%d.\n", indeks ); // <--- dodat prelaz u drugi red
    else // <--- ako je ostalo -1, jer trazeni broj nije pronadjen u listi unetih
        printf("\nU nizu nema odgovarajuceg broja.\n");
   
    system( "PAUSE" );
    return EXIT_SUCCESS;
   
}
 

Sviđa mi se1
Re: Pronalazenje elementa niza. 30.10.2010. u 02:17 · pre 194 meseca #10
Hvala Vladimire!Ja se izvinjavam zbog svoje gluposti :) ,ali moze li mi neko objasniti cemu ova petlja for:
for( i=0; i<BROJ_ELEMENATA; i++ )
{
printf( "\n%d", i );
printf( "Unesite %d. broj:", i+1 );
scanf( "%d", &a );
i zasto posle toga ponovo inicijalizujemo i=0?
Re: Pronalazenje elementa niza. 30.10.2010. u 18:44 · pre 194 meseca #12
Ma shvatio sam jos nocas kada sam postovao,hteo sam da obrisem post,medjutim izmena nije dozvoljena nocu valjda.Znas kako,programiranje ucim iz uzbenika za 2.razred elektrotehnicke skole.Knjiga je (po meni) jako lose napisana,bar sto se tice prakticnog dela dok je teorija na mestu.O tome govori i ova tema odnosno resenje zadatka ciji sam kod prepisao u prvom postu iz iste.Da mi "X Files" nije uradio prepravku koda,nikada ne bih ni ukapirao,zasto?Pa zato jer program pisan na osnovu koda iz knjige NE RADI!Imas okacenu sliku.A da sam pocetnik,jesam,to govori i moj nick :),ono,jos sam beba koja nije prohodala :) ,ali se trudim i uporan sam.
Prirucnik sam skinuo kao i knjigu u pdf-u "C programski jezik" i ljudi,sta da vam kazem sem hvala!
Re: Pronalazenje elementa niza. 30.10.2010. u 19:18 · pre 194 meseca
izmenjeno 1 put, poslednji put X Files 30.10.2010. u 19:30
  1. X Files30.10.2010. u 19:30zapis iz teksta poruke
#13
Citat:

Code:

for( i=0; i<BROJ_ELEMENATA; i++ )
{
   printf( "\n%d", i );
   printf( "Unesite %d. broj:", i+1 );
   scanf( "%d", &a );

i zasto posle toga ponovo inicijalizujemo i=0?


"for" petlja sadrzaj bloka {...} izvrsava odredjeni broj puta, pri cemu se u konkretnom primeru promenljiva "i" svaki put uvecava za jedan.

U prvom prolazu u petlji, vrednost i=0, u drugom prolazu i=1, ... , u poslednjem prolazu i=4. A kad petlja zavrsi svoj rad i program nastavi da se izvrsava, "i" ce imati cak vrednost 5 (da ne detaljisem zasto), i kao takva ce biti vidljiva u nastavku programa.

E sad, sledi ovaj kod (zapamti da i=5), i pretpostavi da NISMO inicijalizovali i na NULU:

Code:

   do
   {
       if( a[i] == dati_broj )
           indeks = i; // <--- ovime smo (ako je uslov ispunjen) definitivno dodelili vrednost vecu od -1 (minimalna vrednost indeksa je nula)
       i++;
   } while ( i < BROJ_ELEMENATA && indeks < 0 );


Ideja je da krenemo od prvog do poslednjeg elementa i pronadjemo indeks vrednosti, ako se ona nalazi negde u nizu.

Ako je i=5, (a tako je ostalo odranije) onda algoritam nece raditi jer treba krenemo od prvog (0) do polsednjeg (BROJ_ELEMENATA-1) broja. Testiraj sam.


Ovo oko petlji i promenljivih je bas jesnostavno. Napravi razliku izmedju:
1. deklaracije (uvodjenja promenljive u "igru", radi se samo jednom u bloku):
int i;

2. inicijalizacije (po potrebi):
i=10;

3. deklaracije + inicijalizacije (radi se uz deklaraciju)
int i=10;


Ovo pod 1 ili 3 se moze desiti recimo na pocetku bloka:
Code:

int main( void )
{
   int i;
   int j=0;

   // ...
}


ili (u C++) recimo cak uz "for":

Code:

int main( void )
{
   // ...
   for ( int i=0; i<10; i++ )
   {
      // ...
   }
}


U C jeziku, "for" po standardu ne dozvoljava direknu deklaraciju, pa ostaje samo inicijalizacija:
Code:

int main( void )
{
   int i;
   // ...
   for ( i=0; i<10; i++ )
   {
      // ...
   }
}
Re: Pronalazenje elementa niza. 30.10.2010. u 21:49 · pre 194 meseca #14
Jasno!Evo kako sada programcic sljaka:


Dakle,indeks prvog elementa je nula,drugog 1 i u ovom slucaju treceg 2.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme