Domaci iz programskih jezika

Započeo MilosM, 06.03.2011, 20:17

prethodna tema - sledeća tema

Marko Аcović

Vezano za break i continue, mislim da je najbolje da pogledate Krausovu knjigu "Programski jezik C" gde su slikovito prikazani kako funkcionisu break i continue.

Asrijel

Break smo radili za continue hvala.
For the glory of Bob!

Krule

I možemo li dobiti rešenje tog famoznog zadatka za domaći ?

Citat: MilosM  18.03.2011, 20:31
. 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
Inače nisam na kursu RT al me živo interesuje rešenje jer moj kod SAMO ispisuje rešenja?  >:D<

holodoc

Citat: Krule  05.04.2011, 14:55
I možemo li dobiti rešenje tog famoznog zadatka za domaći ?

Citat: MilosM  18.03.2011, 20:31
. 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
Inače nisam na kursu RT al me živo interesuje rešenje jer moj kod SAMO ispisuje rešenja?  >:D<
Pa možeš da postaviš kod ovde i dole staviš jedan veliki debeli copyright da te ostali ne bi kopirali a onda možemo da vidimo kako možeš da dovršiš zadatak :)
<?php
abstract class Ignorance extends Stupidity implements Unavoidable 
    private function 
__construct(){
        
parent::__destruct();
    }; 

// EOF -> life.php

Zepi

Tema je otvorena za diskusiju pa ne bi bilo interesantno da se postavi resenje.

Najbolje bi bilo da svako ko ima problema postavi svoj kod koji bi diskutovali.

Krule

Evo mog koda:
//autor: Krule
//Copyright 2011 Mirko Kruscic. All rights reserved.                       

#include "stdio.h"

void unos(int n, int a[50])
{                                 
for (int i=0; i<n; i++)         
{                           
printf("A[%d]= ",i+1); 
scanf("%d",&a[i]);       
}
}                               
void func(int a[50], int n, int k)
{
int i,j,s;
k=0;
for (i=0;i<n;)
{
s=a[i];
for (j=i+1;j<n;j++)
if (a[i]==a[j])
s+=a[j];
else
{
i=j;
break;
}
a[k]=s;
k+=1;
}
}

void ispis(int a[50], int k)
{
for (int i=0; i<k-1; i++)       
printf("A[%d]= %2d , ",i+1,a[i]);
}

int main()
{
int a[50],n,k=0;
printf("Unesi dimenziju a potom i elemente niza: ");
scanf("%d",&n);
printf("\n");
unos(n,a);
func(a,n,k);
printf("Novi niz je: \n");
ispis(a,k);

getchar();
return 0;
}


Koristim Visual Studio 2008 i konstantno mi pokazuje gresku : Unhandled exception at 0x00000004 in sazimanje niza cpp.exe: 0xC0000005: Access violation reading location 0x00000004.
:mad:
Tako da za kod ne mogu 100% da garantujem :dontknow:

Marko Аcović

Nemam na poslu VS pa ne mogu da probam. Probaj da debugujes liniju po liniju da vidis gde puca.

marjan

07.04.2011, 10:16 #52 Poslednja Izmena: 07.04.2011, 10:28 od marjan
Puca svakako. Negde u func
Ako kreneš da dibaguješ, verovatno ćeš ostati jaaako dugo, jer ova petlja nema kraja:
for (i=0;i<n;)
a i se posle ne uvećava nikako i for loopuje non-stop.

A ona funkcija ispis ti radi sa k, a k stavljaš da je nula, pa ispis ne odradi ništa.
BTW1, među argumentima funkcija nema potrebe stavljati dimenziju niza, dovoljno je int a[] ili čak int *a.
BTW2, komentarisanje koda je dosadno, ali se isplati.

Tako da - natrag za crtaću tablu ;)
Unix is user-friendly—it's just choosy about who its friends are.

Zepi

Velika greska koju pravis je u funkciji func jer ne uspevas da vratis dimenziju novog niza K na nacin na koji si zamislio.

Funkcije koje tenutno radimo vrse prenos parametara po vrednosti pa je svaka promenljiva koja se prenosi preko argumenata funkcije lokarno kopirana unutar funkcije i svaka promena na njoj se ne vidi van funkcije.

U prevodu
Citat
void func(int a[50], int n, int k)

nece  imati nikakvu vrednost za sledecu funkciju pa ti se nikada nece ni ispisati niz jer k nema vrednost koju treba da ima.

Probaj da je ispises pre funkcije ispis tj.
Citat
printf("k= %d ", k);
void ispis(int a[50], int k)

Moraces k da vratis kao rezultat funkcije da bi ovo radilio.

Citat
Puca svakako. Negde u func
Ako kreneš da dibaguješ, verovatno ćeš ostati jaaako dugo, jer ova petlja nema kraja:
for (i=0;i<n;)
a i se posle ne uvećava nikako i for loopuje non-stop.

Nije beskonacna petlja jer radi dodelu i=j kad god susedna dva elementa u nizu nisu ista pa se tako pomera i pa ce i petlja da se zavrsi :)

marjan

07.04.2011, 10:36 #54 Poslednja Izmena: 07.04.2011, 10:43 od marjan
CitatNije beskonacna petlja jer radi dodelu i=j kad god susedna dva elementa u nizu nisu ista pa se tako pomera i pa ce i petlja da se zavrsi
A šta kada su svi elementi različiti??

Evo npr kako loopuje.. Da budem precizniji - ovo je potencijalno beskonačna petlja :)

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

Zepi

Kompajlirao na brzinu u glavi i pogledao kod koji radi kada jesu isti.

Jeste problem sa razlicitim elementima jer nema nastavak iteracije pa je uvek i<n.

marjan

Nisam se ja udubljivao mnogo u kod, samo sam pustio i video otprilike prvi "prelaz" da ima falinki.
Najbolje da Mirko malo ispravi, iskomentariše, isproba, pa polako ;)
Unix is user-friendly—it's just choosy about who its friends are.

Krule

07.04.2011, 13:13 #57 Poslednja Izmena: 07.04.2011, 13:28 od Krule
Mislio sam da mi bag prijavljuje zbog VS, jer tek sam počeo da radim sa njim pa nisam znao da treba da menjam kod, zato sam i reko da ne garantujem da je ispravan jer nisam uspeo da ga proverim. :whistle2:

Hvala na komentarima i ispravkama, odoh o5 da se bacim na kod pa se javljam sa novim rez.  =P~

edit: a[50] >> 50 treba samo u deklaraciji ne i u argumentima f-je... my bad  :banghead:   
Thx  :klanja:

marjan

07.04.2011, 13:30 #58 Poslednja Izmena: 07.04.2011, 13:33 od marjan
Možda bi ti neko i konkretnije pomogao, ispravljajući kod, ali si stavio
//Copyright 2011 Mirko Kruscic. All rights reserved.
tako da moraš ti.
:)

Citattreba samo u deklaraciji ne i u argumentima f-je... my bad
Funkcija može da uzme samo pokazivač, odnosno početak niza i da "tera" po njemu. Ne možeš prenositi čitav niz kao parametar. U stvari, kada bi moglo, bilo bi vrlo nezgodno, jer bi lako potrošio stek, kopirajući elemente pri pozivu funkcije. A i trebaju nam svakako izmene nad originalom.
Unix is user-friendly—it's just choosy about who its friends are.

Zepi

Sto se tice nizova i njihovog vracanja kroz funkcije sve ce biti jasnije uskoro kad se pocne sa pokazivacima, ali o tom potom.