|
[ Mix5 @ 18.05.2006. 21:41 ] @
| Ovaj projekat radi nas petoro kao sto se moze i videti a rok za izradu je mesec dana. Interesuje me vase misljenje, da li je normalno da nam daju ovako nesto da pravimo posle dva meseca predavanja iz C-a.
Kratak opis projekta: stvaranje softvera za jednostavnu simbolicku i numericku obradu matematickih izraza. Softver treba da omoguci korisniku da putem jednostavnog menija moze da interaktivnounosi aritmeticke izraze i nad njima primenjuje obradu. Meni treba da se sastoji od sledecih stavki: unos izraza, simplifikacija izraza, resavanje sistema linearnih jednacina, izracunavanje vrednosti odredjenog integrala. Korisniku treba omoguciti da svu obradu u toku jedne sesije snimi u fajl, kao i da nastavi rad na mestu snimljenom u fajl.
Raspodela aktivnosti:
Student 1: predstavljanje izraza binarnim stablom. Izraz se zadaje jednim znakovnim nizom (string) i osim simbolickih i numerickih vrednosti moze da sadrzi operatore +,-,*,/, zagrade (i), trigonometrijske funkcije, eksponencijalnu funkciju, logaritamsku funkciju, stepenu funkciju i simbol jednakosti =. Rezultujucu izraz se smesta u listu izraza. U slucaju greske, odgovarajuca poruka se ispisuje na standardnom izlazu. Ispisivanje izraza obilaskom cvorova stabla u inorder poretku
Student 2: simplifikacija aritmetickog izraza predstavljenog binarnim stablom. Rezultat simlifikacije je novo stablo koje se smesta u listu izraza. Izracunavanje vrednosti izraza uz eksplicitno zadavanje promenljivih u izrazu.
Student 3: resavanje sistema linearnih jednacina. Sistem jednacina se zadaje listom izraza za koje se trazi resenje. U slucaju da resenje postoji, ispisuje se resenje za sve promenljive na standardnom izlazu. U suprotnom ispisuje se poruka o gresci.
Student 4: izracunavanje vrednosti odredjenog integrala funkcije zadate izrazom, za zadati opseg promenljive i zadati korak
Student 5: glavni program sa menijem. Na ekranu, osim opcija menija, treba ispisivati listu unetih izraza. Omoguciti brisanje zadatog izraza, snimanje izraza u fajl i ucitavanje iz fajla.
|
[ rumpl @ 19.05.2006. 11:48 ] @
Pa i nije normalno...
U stvari, zavisi, sta si radio pre toga, da li je ovo prva godina da prgramiras, da li si vec video binarna stabla ranije, u bilo kom jeziku.
[ SHCkabbio_[2hot] @ 25.05.2006. 20:05 ] @
Pa cekaj, upisao si ETF i to smer SI. Naravno da treba na tom fakultetu naucis programiranje (i to prakicno a ne da se igras sa matricama i dinamickom memorijom).
Ovo je najbolji nacin da krenes da programiras!
Ja bih voleo da su i na opstem odseku dali da se radi projekat.
I nemoj da se zalis jer pitao bih te da pored C-a, mate (koja vam je mnogo laksa u odnosu na OO), ORT-a treba da ucis i OET.
[ nikoladsp @ 26.05.2006. 15:52 ] @
ne znam za ostale, ali ja ne bih voleo da sam student br2. 
inace mislim da nije realno, pogotovo ako nemate puno iskustva.bilo bi lepo da ako dodjete do neke interesantne literature o binarnim stablim i ostalim problemima (recimo simplifikacija istih) bacite neki link ovde.
pozdrav
[ z@re @ 28.05.2006. 02:17 ] @
Ovo spada u kolegije koji se ovdje zovu "Strukture podataka i algoritmi". I to dolazi tek nakon godinu dana C-a. Cekaj, ti zelis kazat da su vas nakon dva mjeseca predavanja iz C-a, pod hipotezom da ste krenuli od pocetka, uputili da radite matematicke algoritme i binarna stabla. Uff, to nece na dobro ;)
[ cynique @ 28.05.2006. 12:12 ] @
Student 1 i 2 će krv ispišat ukoliko nisu nikad prije radili neki elementarni lexer/parser, jer ima tu poprilično teorije za preći prije nego napišu i jedne linije koda (PS: ako je samo jedan izraz u pitanju, onda čak i nije tako teško.. :) 3. i 4. zadatak nisu tako teški, najbolje iskoristite neke već poznate metode za numeričku integraciju i rješavanje matrice sustava linearnih jednadžbi (Gaussova eliminacija, Cramerovo pravilo i sl.). Student 5 je osvojio jackpot! :D
Svejedno, za početni kolegij programiranja ovo je zadatak koji samo psihopat može sastaviti.
[ Nedeljko @ 28.05.2006. 17:03 ] @
Pravljenje parsera nije sasvim jednostavno, ali se nivo matematičkih izraza može lepo odraditi i bez teorije potisnih mašina. Ja sam to radio i bez parser generatora. No, nije baš ni da je sasvim lako.
Ni u matematici nije jasno šta je to uprošćavanje izraza. Drugi deo zadatka, ako se ne formuliše preciznije i nije korektno postavljen. Taj deo zadatka ne zahteva nikakvo parsiranje.
Citat: SHCkabbio_[2hot]: Pa cekaj, upisao si ETF i to smer SI. Naravno da treba na tom fakultetu naucis programiranje (i to prakicno a ne da se igras sa matricama i dinamickom memorijom).
To što nazivaš "igranjem matricama i dinamičkom memorijom" spada u osnove programiranja i bez toga nema ni makac dalje prema nečem ozbiljnijem.
Citat: [url=/poruka/1162488]Svejedno, za početni kolegij programiranja ovo je zadatak koji samo psihopat može sastaviti.
Potpuno se slažem.
[ c0d3r @ 28.05.2006. 22:48 ] @
Ja sam student prve godine ETFa, smer OO, i mogao bih uraditi te zadatke za 7 dana s odmorima ;) Stvari jesu relativno teske, ali zar postoji ista toliko tesko kada ti je na raspolaganju gomila literature + internet??? Istina je da imam dobro predznanje iz C-a i uopste programiranja i pre nego sto sam upisao ETF, ali vi ste ipak SI, potrudite se...
[ Nedeljko @ 29.05.2006. 08:59 ] @
Super! Reši samo drugi zadatak i svaka ti čast.
[ z@re @ 29.05.2006. 17:34 ] @
Citat: Mix5:
Student 2: simplifikacija aritmetickog izraza predstavljenog binarnim stablom. Rezultat simlifikacije je novo stablo koje se smesta u listu izraza. Izracunavanje vrednosti izraza uz eksplicitno zadavanje promenljivih u izrazu.
Ok, ovo je jako interesantno, kontajuci da su prosla dva mjeseca kursa iz C-a. Znaci, student broj 2. je u ta dva mjeseca naucio kompletne osnove C-a, aritmetiku pointera, povezane liste, i onda na kraju teoriju binarnih stabala. Oprostite gospodo, ali ovo je apsolutni kretenizam. Po meni, rjesavanje ovakvog zadatka bi studentu trebalo donijet minimalno oslobadjanje od usmenog ispita, a mozda cak i gotovu ocjenu u index prije roka. Sjecam se da je i nama dalo slican zadatak nakon mjesec dana jednosemestralnog kolegija koji je zapravo bio osnove C-a, napravit jednostavan program za upisivanje 30 studenata, njihove ocjene, prosjek, itd. Profesor je rekao bonus za onoga ko napravi u tjedan dana, bonus je zapravo bio ovisan o tome kako si ti to izveo sve skupa. Jedan kolega je napravio na najjednostavniji moguci nacin, unutar jedne petlje, da se odma varijabilno racuna prosjek nakon svakog upisa. Ja sam napravio sa nedefiniranim brojem studenata preko dinamicke alokacije memorije (znao sam C dobrano prije faxa), strukturama, finim menijem za upis itd. Mislim, zadatak je piz**rija za nekog ko zna, ali to je bio samo za "bonus", nikakav obavezan zadatak unutar kolegija. Uglavnom, kolega je dobio ocjenu vise nakon ispita, a ja sam bio oslobodjen kompletnog.
Poanta : ima ljudi koji znaju mnogo stvari od prije, ali je vecina onih koji se prvi put susrecu sa programiranjem, i suludo je nakon dva mjeseca trazit od njih ovakve stvari.
[ jokiduki @ 29.05.2006. 19:42 ] @
;'
p[[pk[[8974+654677;][899*84-*+
[ Nedeljko @ 30.05.2006. 19:30 ] @
z@are
Nikakvo znanje nijednog programskog jezika (uključujući liste, stabla itd.) nije samo po sebi dovoljno da se reši zadatak o kome diskutuješ. Taj zadatak se mora prvo matematički rešiti. Bi u matematici nije jasno šta je to zapravo uprošćavanje izraza. Taj zadatak ima smisla samo ako strogo preciziraš skup izraza i kriterijum koji je od dva ekvivalentna izraza jednostavniji.
[ z@re @ 30.05.2006. 23:41 ] @
Hmm, da, potpuno si u pravu. Ja sam se samo osvrnuo na programersku stranu problema, izgleda da su momci u jos vecoj gabuli nego sta se meni cinilo na prvi pogled.
Prosto me zanima ovo "rjesavanje odredjenog integrala". Ako je profesor to zamislio kao zadavanje aritmetickog izraza preko tog izbornika, pa onda integraciju preko navedenih granica, teoretski bi se mogao upisat najtezi integral koji se nalazi u bilo kojoj zbirci matematike sa prve godine faksa. Znaci da je navedeni lik psihopat teze klase.
[ Mix5 @ 12.06.2006. 22:15 ] @
Ovo je samo deo mog dela projekta. Molim vas da mi objasnite sta i kako trebam da prepravim da bi to radilo.
Code: #include<stdio.h>
#include"stablo.h"
#include"greska.h"
typedef struct elementListe
{
CvorStabla *root;
char *infixizraza;
struct elementListe *next;
} ElementListe;
typedef struct lista
{
struct ElementListe *prvi;
struct ElementListe *poslednji;
} Lista;
ElementListe *NapraviElement(CvorStabla *root, char *infixizraza)
{
ElementListe *e;
e = malloc(sizeof(ElementListe));
if (!e) {PrijaviGresku("Greska u pravljenju elementa");return 0;}
e -> next = NULL;
e -> infixizraza = malloc(strlen(infix)+1);
strcpy(e -> infixizraza, infix);
e -> root = root;
return e;
}
Lista *NapraviListu()
{
Lista *l;
l = malloc(sizeof(Lista));
prvi = NULL;
poslednji = NULL;
return l;
}
void DodajUListu(Lista *l, ElementListe *e)
{
if(!prvi) prvi = e;
else poslednji->next = e;
poslednji = e;
}
char *UnesiIzrazUInfixu(char *infix)
{
printf("\nUnesi izraz: ");
scanf("%s", infix);
return infix;
}
void IspisiMeni()
{
system("CLS");
printf("\n(1) Unos izraza\n");
printf("(2) Simplifikacija izraza\n");
prnitf("(3) Izracunavanje vrednodti izraza\n");
printf("(4) Resavanje sistema linearnih jednacina\n");
printf("(5) Izracunavanje vrednosti odredjenog integrala\n");
printf("(6) Snimanje u fajl\n");
printf("(7) Ucitavanje fajla\n");
printf("(8) Izbrisi element iz liste\n");
printf("(9) Izlaz\n");
printf("\nIzbor: ");
}
main ()
{
char *infix;
CvorStabla *koren;
Lista *lista;
int a;
while (a!=8)
{
IspisiMeni();
scanf("%d", &a);
switch (a)
{
case 1: lista = NapraviListu();
if (!lista) lista = NapraviListu();
infix = UnesiIzrazUInfixu(infix);
koren = NapraviStabloIzraza(infix);
DodajUListu(lista,NapraviElement(koren,infix));
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
case 7:
break;
case 8:
break;
}
}
}
Code: //greske.h
#ifndef Greske_h
#define Greske_h
void PrijaviGresku (char *poruka);
char *DohvatiGresku ();
#endif
Code: //stablo.h
#ifndef STABLO_H
#define STABLO_H
typedef struct cvorstabla
{
char tip;
double vrednost;
char oznaka[10];
struct cvorstabla *levi,*desni;
} CvorStabla;
CvorStabla *NapraviStabloIzraza(char *);
char *StabloUZnakovniNiz(CvorStabla *);
void ObrisiStablo(CvorStabla *);
#endif
[ Igor Gajic @ 13.06.2006. 22:51 ] @
Pogledaj source na ovoj adresi: http://www.singsurf.org/djep/index.html.
To je open source projekat za pojednostavljenje aritmetickih izraza uradjen u JAVI + jos nesto. 
Jeste Java, ali mislim da ces se manje vise lako snaci u kodu.
Pronadji fajl SimplificationVisitor.java, on sadrzi kod koji ti treba.
Nadam se da ce ti ovo pomoci. Inace ovaj zadatak nije normalan za studente prve godine.
Pozdrav
[ Mix5 @ 15.06.2006. 15:51 ] @
Ne treba meni simplifikacija izraza, nego da mi neko kaze kako da prepravim funkcije koje sam napisao!
[ Mix5 @ 16.06.2006. 08:03 ] @
Resio sam problem.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|