Domaci iz programskih jezika

Započeo MilosM, 06.03.2011, 20:17

prethodna tema - sledeća tema

PulSaR

je l moze neko da postavi taj drugi domaci? hvala

Marko Аcović

Citatje l moze neko da postavi taj drugi domaci? hvala

1. Koji je drugi domaci? :)
2. Nemoj da ocekujes da ce neko da vam radi domace a da ne mrdnete ni prstom? Forum ne sluzi za to!

Zepi

Citat
je l moze neko da postavi taj drugi domaci? hvala

Treba ti resenje ili tekst ???


PulSaR


MilosM

. Napisati funkciju koja radi sazimanje istih elemenata niza na sledeci nacin:
•   Isti elementi niza koji se pojavljuju zaredom se zamenjuju sa sumom njihovih vrednosti.
•   Nije dozvoljeno koriscenje pomocnog niza
2,2,2,2,3,4,4,5,6,6,5      //dobija se
8,3,8,5,12,5

ja imam problem samo oko pomeranja niza, u smislu dobijam bas iz ovog primera 8,2,2,2,3,8,4,5,12,5
mI!

holodoc

Jeste li radili continue direktivu? Uz pomoć nje možeš bilo gde u petlji da nasilno izazoveš prelazak na sledeću iteraciju for petlje kojom prelaziš kroz kompletan niz :)

Dakle generalna ideja je da koristiš petlju koja će prolaziti kroz kompletan niz i da u svakoj petlji ispituješ da li je neki uslov ispunjen pa ako jeste da nešto odradiš i da izazoveš sledeću iteraciju a ako nije treba da uradiš nešto da naznačiš rezultat dotadašnjih iteracija :)

Neću namerno da postavljam kod jer je ovo poprilično lak zadatak ako znaš da koristiš continue direktivu :) Ako baš želiš dodatnu pomoć možeš da postaviš svoj kod ovde. Naravno ako to nije protiv pravila :)
<?php
abstract class Ignorance extends Stupidity implements Unavoidable 
    private function 
__construct(){
        
parent::__destruct();
    }; 

// EOF -> life.php

marjan

18.03.2011, 22:26 #36 Poslednja Izmena: 18.03.2011, 22:49 od marjan
Super su ovi domaći...
Malo da se "prokrče" ganglije.
Continue, continue, šta to bi  :o Može i bez continue, bar ovo što sam nešto "sklepao" na brzinu (dobro, nije baš na brzinu :)))
Dakle, neki algoritam je da jedan brojač ide normalno redom kroz elemente, a drugi da se kreće "brže", sabirajući usput one koji se ponavljaju i smeštajući zbirove u elemente redom (prema prvom brojaču).


Unix is user-friendly—it's just choosy about who its friends are.

holodoc

18.03.2011, 23:48 #37 Poslednja Izmena: 18.03.2011, 23:51 od holodoc
Citat: marjan  18.03.2011, 22:26
Super su ovi domaći...
Malo da se "prokrče" ganglije.
Continue, continue, šta to bi  :o Može i bez continue, bar ovo što sam nešto "sklepao" na brzinu (dobro, nije baš na brzinu :)))
Dakle, neki algoritam je da jedan brojač ide normalno redom kroz elemente, a drugi da se kreće "brže", sabirajući usput one koji se ponavljaju i smeštajući zbirove u elemente redom (prema prvom brojaču).
Možda nisam dobro razumeo ideju ali šta tačno podrazumevaš pod time da se drugi algoritam kreće "brže"? :) To mi nekako liči na još jednu for petlju. Plus što je uslov zadatka da nisu dozvoljeni pomoćni nizovi. Mašim li poentu negde?

EDIT: Zadatak bi bio mnogo praktičniji i vredniji kada bi se rezultati obrade ipak smeštali u neki rezultantni niz ne samo da se ispišu :)
<?php
abstract class Ignorance extends Stupidity implements Unavoidable 
    private function 
__construct(){
        
parent::__destruct();
    }; 

// EOF -> life.php

Marko Аcović

CitatZadatak bi bio mnogo praktičniji i vredniji kada bi se rezultati obrade ipak smeštali u neki rezultantni niz ne samo da se ispišu
Slazem se sa ovim. Ako je potrebno da se rezultat koristi na dalje, bolje da se smesti u poseban niz. Mozda ne bi bilo lose da se taj uslov skine iz zadatka.

marjan

19.03.2011, 00:07 #39 Poslednja Izmena: 19.03.2011, 00:10 od marjan
CitatMožda nisam dobro razumeo ideju ali šta tačno podrazumevaš pod time da se drugi algoritam kreće "brže"?  To mi nekako liči na još jednu for petlju. Plus što je uslov zadatka da nisu dozvoljeni pomoćni nizovi. Mašim li poentu negde?
Pa i ne koristi se nikakav pomoćni niz, nego se "gazi" postojeći.
Rekoh već da sam primer sklepao, ima for i while, nije lep, ali radi.
Šta ću, nešto nabadam perl ovih dana, pa sam raspoložen za quick 'n' dirty kod. Što se nekad pretvori u "just dirty" kod:D

A niz je tu, novi-stari, a i  mala "kvaka" je to "pomeranje niza", kako ga nazva kolega.
Unix is user-friendly—it's just choosy about who its friends are.

Zepi

Citat
EDIT: Zadatak bi bio mnogo praktičniji i vredniji kada bi se rezultati obrade ipak smeštali u neki rezultantni niz ne samo da se ispišu

Samo da ponovim da se radi sazimanje niza tj rezultat se ne ispisuje nego se niz sazima i u njemu se nalazi rezultat koji se kasnije moze ponovo obradjivati ali je normalno original niza unisten.

Ipak takav je ovaj zadatak, sazimanje niza bez koriscenja pomocnog niza :)

holodoc

Citat: Zepi  19.03.2011, 00:10Samo da ponovim da se radi sazimanje niza tj rezultat se ne ispisuje nego se niz sazima i u njemu se nalazi rezultat koji se kasnije moze ponovo obradjivati ali je normalno original niza unisten.

Ipak takav je ovaj zadatak, sazimanje niza bez koriscenja pomocnog niza :)
Nisam baš siguran da je dobra ideja mešati početne podatke i rezultate obrade a evo i zašto :)

Recimo da su za početne podatke izabrane sledeće vrednosti int array[] = {2,2,2,2,3,4,4,5,6,6,5}; Dakle to je direktno inicijalizovan početni niz bez eksplicintog navođenja dužine koja u ovom slučaju iznosi 11 elemenata. 

Ako je rezultat obrade 8,3,8,5,12,5 to znači da će na kraju niz izgledati ovako. array = {8,3,8,5,12,5,4,5,6,6,5};
Šta su od ovoga početni podaci a šta rezultat? :D

Sve dok ne počnu da se rade pokazivači ili makar strukture ovakve funkcije i nemaju baš mnogo preterane koristi u praksi :)
<?php
abstract class Ignorance extends Stupidity implements Unavoidable 
    private function 
__construct(){
        
parent::__destruct();
    }; 

// EOF -> life.php

Zepi

19.03.2011, 00:42 #42 Poslednja Izmena: 19.03.2011, 00:44 od Zepi
Za sad im je poenta da logici rese ovaj problem a to resenje dimenzije novog niza da vrate kao rezultat funkcije.

Na taj nacin se prevazilazi problem elemenata koji ostaju u nizu, sto i nije neka greska sobzirom ako se zna da svaki staticki alociran niz osim kada je potpuno iskoriscen ima elemente koje ne treba koristiti, tj. koristi se cuveno n kao dimenzija niza sto ne znaci da ih posle tog n nema vise :)

Zato treba da naprave funkciju int sazimanje(int a[], int n) koja bi vratila kao rezultat novo n tj bila bi pozvana na sledeci nacin u main-u
n = sazimanje(a, n);

A nakon ovoga se nastavlja sa koricenjem klasicnog n za npr ispis niza
ispis(a, n);

MilosM

Znaci funkcija sazimanje niza menja dimenziju niza na onoliko koliko se puta sazimanje dogodi...
dobro... probacu nesto...   :whistle2:
Hvala svima 'veteranima' na pomoci!!!  :bravo:
PS: Nismo radili continue...
mI!

holodoc

Citat: MilosM  19.03.2011, 13:17PS: Nismo radili continue...
Čudno... Ako ste radili petlje (for, while, do) onda bi trebalo da ste se upoznali sa continue i break jer dobar deo algoritama se oslanja na njih. Ajd da budem bar malko od koristi :) Komentari u kodu bi trebali da budu i više nego jasni ali ako ima pitanja... Well... Pa tu smo negde :)

continue se koristi za bezuslovni prelazak na sledeću iteraciju petlje (bilo da je for, while ili možda do) dok break služi za bezuslovan prekid najbliže petlje i prelazak na izvršavanje prve linije koje dolazi posle prekinutog bloka.

continue direktiva
/**
* Izracunavanje sume svih brojeva koji nisu deljivi sa brojem 7 uz pomoc continue direktive.
*/
#include <stdio.h>
#include <stdlib.h> // Zaglavlje sadrzi konstantu EXIT_SUCCESS

int main(){
int i, sum = 0, length;
int data[] = {1,3,7,15,47,49,127};

// Duzina niza (dobija se deljenjem ukupnog prostora u memoriji sa velicinom koju zauzima jedan takav podatak, u ovom slucaju int).
length = sizeof(data) / sizeof(int);

for(i = 0; i < length; i++){ // Za svaki element niza...
if(!(data[i] % 7)){ // ... proverava se da li njegov moduo 7 ne ostavlja ostatak sto znaci da je broj deljiv sa 7...
continue; // ... pa ako jeste njega cemo da preskocimo i odmah prelazimo na sledecu iteraciju for petlje (nista se od ove linije nadalje u ovoj iteraciji ne izvrsava).
}
sum += data[i]; // Do ovog dela stizemo samo ako je broj nedeljiv sa 7.
}
printf("Suma svih brojeva koji nisu deljivi sa 7 je: %d!\n", sum);
getchar(); // Sluzi cisto da se ekran ne zatvori kod testiranja - u prakticnim programima ne sluzi nicemu.
return EXIT_SUCCESS; // Koriscenje EXIT_SUCCESS-a umesto nule je bolje jer garantuje kompatibiulnost sa svim C kompajlerima (nije svuda nula indikacija uspesnog izvrsenja)
}


break direktiva
/**
* Izracunavanje sume vrednosti u nizu do prvog "naleta@ na broj deljiv sa 7.
*/
#include <stdio.h>
#include <stdlib.h> // Sadrzi EXIT_SUCCESS

int main(){
int i = 0, sum = 0, length;
int data[] = {47, 87, 12, 16, 17, 16, 15, 119, 6, 13};
length = sizeof(data) / sizeof(int); // Duzina niza

do { // Petlja se vrti sve dok se ne ispuni uslov iz while linije (pogledati dole)...
if(!(data[i] % 7)){ // ... ukoliko je neki od elemenata deljiv sa sedam...
break; // momentalno se prekida najbliza petlja (u ovom slucaju do) i prelazi na prvu liniju posle nje (to bi bio if blok oznacen sa #1).
}
sum += data[i]; //... u suprotnom posto broj nije deljiv sa sedam petlja se nastavlja a suma uvecava...
i++;
} while (i < length); // ... sve dok je redni broj elementa niza manji od ukupnog broja (zato sto je i zero-based a length non-zero-based!!!)

// #1
if(i < length - 1){ // Ukoliko je vrednost i po izlasku iz petlje manja od broja clanova niza znaci da je bilo nasilnog izlaza iz petlje...
printf("Doslo je do prekida na %d. elementu!\nSuma DO elementa pod rednim brojem %d je %d.\n", i + 1, i + 1, sum);
} else { // ... u suprotnom nije bilo elemenata koji su deljivi sa sedam.
printf("Nema prekida.\nUkupna suma je %d.\n", sum);
}

getchar();
return EXIT_SUCCESS;
}

<?php
abstract class Ignorance extends Stupidity implements Unavoidable 
    private function 
__construct(){
        
parent::__destruct();
    }; 

// EOF -> life.php