Pomoc oko zadatka o nizovima u C

1

Pomoc oko zadatka o nizovima u C

online
  • Milos Stojanovic
  • Programer u pokusaju
  • Pridružio: 31 Dec 2015
  • Poruke: 828
  • Gde živiš: Srbija / Zajecar

Pozdrav!

Potrebna mi je pomoc oko zadatka sa nizovima. Zadatak kaze da treba da unesemo dva niza i da od njih napravimo jedan. Znaci da poslednji niz treba da sadrzi sve elemente iz prethodna dva. Ja cu vam dati kod dokle sam stigao i reci gde sam zapeo.

#include<stdio.h> main() {    int n,i,m,j;    printf("Unesi broj elemenata 1. niza: ");    scanf("%i",&n);    int a[n];    for(i=0;i<n;i++)    {       printf("Unesi element 1. niza: ");        scanf("%i",&a[i]);    }    printf("Unesi broj elemenata 2. niza: ");    scanf("%i",&m);    int b[m]    for(j=0;j<m;j++)    {       printf("Unesi element 2. niza: ");        scanf("%i",&a[i]);    }    for() }

Znaci zapeo sam kad treba da sastavim ta dva niza u jedan. Ne shvatam kako. Gledao sam na internetu i vidim da ima lakih resenja koja se svode na ubacivanje novih komandi i biblioteka, ali to ovde nije cilj, odnosno, zadatak treba uraditi preko FOR ciklusa.

Hvala svakom ko pokusa da mi pomogne.



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 06 Feb 2012
  • Poruke: 1709

Prvo je potrebno da deklarises taj treci niz. Njegova dimenzija ce biti n+m. I onda ga samo "popunis" elementima.
Ako ne znas kako da u jednoj for petlji to uradis, mozes to i sa dvije for petlje. Prvu "vrtis" n-puta, a drugu m-puta. U prvoj petlji elemente dodajes na i-tu lokaciju (petlja ide od 0 do n), a u drugoj petlji elemente dodajes na lokaciju n+i, pri cemu su granice petlje od 0 do m.
To je mozda nacin na koji ces najlakse shvatiti.

*Nevezano za ovaj zadatak, moja preporuka ti je da promenljive koje ces koristiti kao brojace u petljama, deklarises u samoj petlji (kao lokalne promenljive) te da onda ne provlacis te promenljive kroz cijeli zadatak (do kraja izvrsavanja koda). Ili opcionalno ako vec zelis tako, dosta ti je jedan brojac (osim ako ne koristis ugnjezdene petlje).

*Takodje nisam siguran da li je novijim standardima omoguceno da se na kraju main-a ne pise kljucna rec return i povratna vrednost 0.

*Preporuka:
printf("Unesi %d element 1. niza: ", i+1); // pri cemu je i brojac petlje

PS.nisi naveo tip funkcije main.



online
  • Milos Stojanovic
  • Programer u pokusaju
  • Pridružio: 31 Dec 2015
  • Poruke: 828
  • Gde živiš: Srbija / Zajecar

Napisano: 02 Okt 2017 21:02

Evo, uradio sam nesto. Na kraju dobijam tacno resenje, ali mislim da zadatak nisam dobro odradio. Koliko vidim, ja sam na kraju samo ponovo odstampao prva dva niza, jel tako? Nesto mi ne ide. Ne razumem kako Citat:U prvoj petlji elemente dodajes na i-tu lokaciju (petlja ide od 0 do n), a u drugoj petlji elemente dodajes na lokaciju n+i, pri cemu su granice petlje od 0 do m.. Ako mozes to malo da mi pojasnis recima ili pak kodom da mi napises pa da ja probam da shvatim.

Inace ono sto si rekao da nisam naveo tip funkcije main. Ja stvarno ne znam na sta mislis. Ja idem u skolu u kojoj imamo casove programiranja i nismo nista radili oko funkcije main. Receno nam je samo da to treba tu i tako da stoji. Ja sam vidjao po netu da ima neke veze sa void, ako se ne varam, ali nemam pojma sta to znaci. Na kraju imam scanf("%i"), jer mi to omogucava da mi se ekran ne ugasi posto se program zavrsi. Tako sam naucio u skoli.

#include<stdio.h> main() {    int i,j,k,n,m;    printf("Unesi broj elemenata 1. niza: ");    scanf("%i",&n);    int a[n];    for(i=0;i<n;i++)    {       printf("Unesi %i element 1. niza: ",i);       scanf("%i",&a[i]);    }    printf("Unesi broj elemenata 2. niza: ");    scanf("%i",&m);    int b[m];    for(j=0;j<m;j++)    {       printf("Unesi %i element 2. niza: ",j);       scanf("%i",&b[j]);    }    int c[n+m];    for(k=0;k<n;k++)    printf("%i",a[k]);    for(k=0;k<m;k++)    printf("%i",b[k]);    scanf("%i"); }

Dopuna: 02 Okt 2017 21:24

Evo, uradio sam. Ajde molim te da mi proveris da li mi je dobro posto dobijam dobar rezultat. Ne mogu vise da gledam ocima ovaj ekran koliko mi se spava. Mucim se sa ovim celo vece.

#include<stdio.h> main() {    int i,j,k,n,m;    printf("Unesi broj elemenata 1. niza: ");    scanf("%i",&n);    int a[n];    for(i=0;i<n;i++)    {       printf("Unesi %i element 1. niza: ",i);       scanf("%i",&a[i]);    }    printf("Unesi broj elemenata 2. niza: ");    scanf("%i",&m);    int b[m];    for(j=0;j<m;j++)    {       printf("Unesi %i element 2. niza: ",j);       scanf("%i",&b[j]);    }    int c[n+m];    for(k=0;k<n;k++)    {       c[i]=a[k];       printf("%i",c[i]);    }    for(k=0;k<m;k++)    {       c[j]=b[k];       printf("%i",c[j]);    }    scanf("%i"); }

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14227
  • Gde živiš: Niš

Napisano: 02 Okt 2017 21:44

Nije dobro. Da probaš da odradiš sa razumevanjem? Very Happy Ovo si samo nabacao komande, nema nikakvog smisla...

Dopuna: 02 Okt 2017 21:46

Citat:int c[n+m];
for(k=0;k<n;k++)
{
c[i]=a[k];
printf("%i",c[i]);
}
for(k=0;k<m;k++)
{
c[j]=b[k];
printf("%i",c[j]);
}
Nigde ne menjaš promenljive j i i u druge dve for petlje. Štampanje ti jeste dobro, jer uvek štampaš elemente prva dva niza, ali ti treći niz nije ono što ti treba, pošto u njemu setuješ samo dva elementa - c[i] i c[j], a ne svaki.

online
  • Milos Stojanovic
  • Programer u pokusaju
  • Pridružio: 31 Dec 2015
  • Poruke: 828
  • Gde živiš: Srbija / Zajecar

Veruj mi da sam probao sa razumevanjem i meni ovo ima neke logike Very Happy. Ali izgleda da mi ima logike, jer ne znam i ne razumem. Zato i trazim pomoc, da, ako zelite da probate da mi pojasnite. Nije meni cilj da uradim zadatak vec da razumem kako ovo radi, jer kad budem razumeo, lako cu uraditi bilo koji zadatak ove vrste.

Nego mi ti nisi rekao gde sam pogresio. Tako da...gde sam pogresio? Very Happy

offline
  • Pridružio: 06 Feb 2012
  • Poruke: 1709

Nisi me dobro razumeo.
Taj brojac "i" koji sam ja naveo je bio samo primer. Ako si ti uzeo za brojac "k", onda koristis njega, a ne "i".
Znaci ne c[i]=a[k], nego c[k]=a[k].
Dalje, u drugoj petlji sam vec rekao da dodajes na poziciju "brojac+n", tj. c[k+n]=b[k].
Isto i kod ispisa: printf("%d",c[k+n]);
Ovdje nisi dobro prepisao: printf("Unesi %i element 1. niza: ",i+1);

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14227
  • Gde živiš: Niš

Jesam ti rekao. Very Happy Razz

online
  • Milos Stojanovic
  • Programer u pokusaju
  • Pridružio: 31 Dec 2015
  • Poruke: 828
  • Gde živiš: Srbija / Zajecar

Napisano: 02 Okt 2017 21:50

Pa jesi, ali smo pisali u isto vreme Very Happy.

Dopuna: 02 Okt 2017 21:53

Znaci treba ovako?

#include<stdio.h> main() {    int i,j,k,n,m;    printf("Unesi broj elemenata 1. niza: ");    scanf("%i",&n);    int a[n];    for(i=0;i<n;i++)    {       printf("Unesi %i element 1. niza: ",i+1);       scanf("%i",&a[i]);    }    printf("Unesi broj elemenata 2. niza: ");    scanf("%i",&m);    int b[m];    for(j=0;j<m;j++)    {       printf("Unesi %i element 2. niza: ",j+1);       scanf("%i",&b[j]);    }    int c[n+m];    for(k=0;k<n;k++)    {       c[k]=a[k];       printf("%i",c[k]);    }    for(k=0;k<m;k++)    {       c[k+n]=b[k];       printf("%i",c[k+n]);    }    scanf("%i"); }

offline
  • Pridružio: 06 Feb 2012
  • Poruke: 1709

Napisano: 03 Okt 2017 21:36

To je bila samo jedna ideja. Naravno da se zadatak može rešiti na druge načine.
Pokreni program i proveri da li radi ono što se traži tekstom zadatka.

Dopuna: 03 Okt 2017 21:39

Milos ZA ::Na kraju imam scanf("%i"), jer mi to omogucava da mi se ekran ne ugasi posto se program zavrsi.
Ovo zavisi od razvojnog okruženja koje koristiš. Nije neophodno u svakom okruženju.

online
  • Milos Stojanovic
  • Programer u pokusaju
  • Pridružio: 31 Dec 2015
  • Poruke: 828
  • Gde živiš: Srbija / Zajecar

Program radi kako treba, ali sam pitao da li je i kod dobar, posto sam u jednom od postova postavio kod koji mi na kraju odstampa prva dva niza tj. ne napravi treci niz, a rezultat na ekranu je dobar.

Da ima vise resenja, to znam. Googlao sam malo i video drugacija resenja, ali ta resenja se ne uklapaju u gradivo koje ucimo u skoli tako da ja ne smem previse da se odmacinjem od onoga sto radimo na casovima.

Ovo oko scanf komande sam rekao da bih pojasnio zasto sam je postavio tamo.

Ko je trenutno na forumu
 

Ukupno su 727 korisnika na forumu :: 47 registrovanih, 5 sakrivenih i 675 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 1567 - dana 15 Jul 2016 19:18

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: _commandos_, A.R.Chafee.Jr., aBobban, amaterSRB, aramis s, Boskovic2, bulovic, calvi, dejoglina, dulentse, duskovuk63, Eyes Wide Shut, Georgius2, Kubovac, lacko2, liman2, ljiljana.m.65, lovac12, maiden6657, Maschinekalibar, Metanoja, Mikulino, Milan A. Nikolic, Milos ZA, misa1xx, nemkea71, NenadG, nuke92, Recce, Revolucion, rkekoke, rodoljub, royst33, sekretar2, Sr.Stat., stokanovicm, Toni, trajkoni018, USSVoyager, VJ, Vlada1389, vobo, voja64, W123, yrraf, zixmix, zodiac94