Domaci iz programskih jezika

Započeo MilosM, 06.03.2011, 20:17

prethodna tema - sledeća tema

MilosM

mi smo dobili domaci: Napisati program koji proverava da li su zagrade ( i ) dobro uparene. Na primer :
()(()()) tačno, ()())() netačno.
Da li da ga radim preko stringova (preko neke funkcije poredjenja) ili preko obicnih funkcija?
mI!

holodoc

Interesantno. Baš da vidim kakve će ideje da izniknu oko pisanja ovako jednog malečkog parsera :)
<?php
abstract class Ignorance extends Stupidity implements Unavoidable 
    private function 
__construct(){
        
parent::__destruct();
    }; 

// EOF -> life.php

MilosM

 :D Polako holodoc, radicemo mi i teze programe :D
mI!

Zepi

Ova je jedna od klasičnijih problematika koja se naravno kasnije komplikuje upotebom svih zagrada {[()]}.

Odmah i naznaka da će biti i težih zadataka :)

Poenta je da ovaj zadatak rešite na bilo koji način sa znanjem koje posedujete do sad.

Funkcije počinjemo sledećeg časa...

Ovo je više logički problem nego problem načina realizacije.

Unosite znakove dok ne unesete enter a onda u unetom tekstu proverite zagrade!!!

Marko Аcović

Jeste da malo kasnim, ali evo jedne ideje. Mozda nekom bude od koristi.


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX 1024

int checkBrackets(char *s)
{
int i, status = 0;
int size = strlen(s);
char openBracket = '(';
char closeBracket = ')';

if (s[0] == closeBracket || s[size - 1] == openBracket) {
status = 1;
return status;
}

for(i = 0; i < size; ++i)
{
if (s[i] == openBracket)  status ++;
if (s[i] == closeBracket) status --;
}

return status;
}

int main(void)
{
char* inputString;
inputString = (char *)calloc(MAX, sizeof(char));

printf("Unesi ulazni string: ");
gets(inputString);

printf("%s", checkBrackets(inputString) ? "NETACNO" : "TACNO");
printf("\n");

return EXIT_SUCCESS;
}


Nisam detaljno testirao kod tako da moguce da mozda ima neki bug  :)

marjan

09.03.2011, 23:38 #5 Poslednja Izmena: 09.03.2011, 23:40 od marjan
Reče čovek da funkcije rade tek narednog časa  :D
Markova verzija je "na steroidima".

Nego.. ideja je, je li, da se proveri da li string počinje sa otvorenom i završava sa zatvorenom zagradom, a onda se broje zagrade i za svaku otvorenu uveća brojač, a za svaku zatvorenu smanji. Ako je nula na kraju, OK, u suprotnom su neispravne zagrade.
Unix is user-friendly—it's just choosy about who its friends are.

Marko Аcović

Zato sam i sacekao malo dok ne predju i funkcije tako da lako mogu da isprate ovo sto sam postovao. :) Ne znam samo da li su radili pokazivace. Ako nekom nije jasno, neka se javi pa da pojasnimo. :)

holodoc

Oho imamo i veterana na temi :D Čekamo da vidimo da li još neko da se javi pa da ja pokupim lepo sve Bambije na kraju  :dzavo: Ima valjda Bambija za nagradu? :((
<?php
abstract class Ignorance extends Stupidity implements Unavoidable 
    private function 
__construct(){
        
parent::__destruct();
    }; 

// EOF -> life.php

Marko Аcović

Ako imas elegantnije resenje, dobijas bambije :)

holodoc

Citat: marko_gm  10.03.2011, 00:16
Ako imas elegantnije resenje, dobijas bambije :)
Onda spremaj Bambije :P

Sad stvarno jel ima još neka ideja? :D

Umešao sam se u priču samo zato što sam pre nekih mesečak dana postavio identičan zadatak osobi koja se sprema da upiše faks pa tako voli da kad-kad ukrade po neki trik iz programiranja. Prvo je i on rešio zadatak sa proverom prve i poslednje zagrade i brojanjem ukupnog broja otvorenih i zatvorenih zagrada. Onda sam mu rekao da zaboravi na matematiku i logiku i porazmisli šta je to baš karakteristično za uparivanje :)

Proveo je skoro tri dana crtkajući zagrada ali je na kraju uz moju (malu) pomoć došao do rešenja :)
<?php
abstract class Ignorance extends Stupidity implements Unavoidable 
    private function 
__construct(){
        
parent::__destruct();
    }; 

// EOF -> life.php

Marko Аcović

Da mi ne bismo provodili po tri dana, kazi koja je fora :)

holodoc

Citat: marko_gm  10.03.2011, 00:30
Da mi ne bismo provodili po tri dana, kazi koja je fora :)
Ma strpi se malo možda nekome nešto još padne na pamet mada ne znam koliko je "legalno" to što se mi mešamo u rađenje domaćih zadataka :D Žepi ima da nas pošalje u kosmos bez toplog donjeg veša  :dzavo:

Elem da ne ispadne da samo duvam u žito a od žiške ni traga ni glasa reći ću samo da je caka u preciznoj definiciji uslova uparenosti zagrada: "svaka otvarajuća zagrada mora da ima odgovarajuću zatvarajuću zagradu". Potreban alat? Ako sam dobro izračunao samo jedna if i for petlja. Nikakve statusne promenjljive nisu potrebne :D Ajd ostaviću malo da prenoći ideja pa možda neko shvati šta sam hteo da kažem.
<?php
abstract class Ignorance extends Stupidity implements Unavoidable 
    private function 
__construct(){
        
parent::__destruct();
    }; 

// EOF -> life.php

Zepi

Veoma interesantna diskusija. Verovatno su se i studenti koji treba da rese domaci obradovali :)

Videcu sad na casu ko je sta uradio pa krecemo sa funkcijama a pokazivace pocinjem za jedno 4 casa tako da im Markovo resenje verovatno samo unosi zabunu.

Kada je rec samo o () zagradama logika je veoma prosta i bukvalno jedan if resava stvar samo kada se logicki resi problem.
Prica sa svim zagradama je vec malo slozenija, ali ima vremena i za to :)


Marko Аcović

CitatVidecu sad na casu ko je sta uradio pa krecemo sa funkcijama a pokazivace pocinjem za jedno 4 casa tako da im Markovo resenje verovatno samo unosi zabunu.
Bice im jasno kad za to dodje vreme :)

maxogm

Koristi LIFO stack.
Kad se kreces kroz dobijeni string, sve otvarajuce zagrade stavljas na stack. Kad naidjes na neku zatvarajucu zagradu nju proveravas sa elementom sa vrha stack-a itd...

Ideja je ne samo za () vec i za {} [] ()

Kod necu jos da postavim :)