maxsal1995 Δημοσ. 5 Ιανουαρίου 2015 Δημοσ. 5 Ιανουαρίου 2015 καλησπερα,εχω να μετατρεψω ενα ψευδοκωδικα σε γλωσσα c και εχω σκαλωσει λιγακι. SW algorithm: Lhor=5; Lver=5; penalty=1/3; LA=length(A); (πλήθος δεδομένων αρχείου Α) M=LA+1; LB=length(Β); (πλήθος δεδομένων αρχείου Β) N=LB+1; Fill A; (γεμίζουμε τον πίνακα Α με τα στοιχεία του αρχείου Α) FILL B; (γεμίζουμε τον πίνακα Β με τα στοιχεία του αρχείου Β) % Αρχικοποιήσεις D=zeros(M,N); (αρχικοποίηση D πίνακα διαστάσεων Ν*Μ με 0) for i=1:LA (για i από 1 μέχρι LA) for j=1:LB (για j από 1 μέχρι LB) if A(i)==B(j) D(i+1,j+1)=1; else D(i+1,j+1)=-penalty; end end end % τέλος αρχικοποιήσεων acc_cost=zeros(M,N); (αρχικοποίηση acc_cost πίνακα διαστάσεων Ν*Μ με 0) % αρχή επξεργασίας for i=2:M %για κάθε γραμμή (η πρώτη γραμμή είναι γεμάτη με 0 και παραμένει έτσι μέχρι το τέλος) for j=2:N %για κάθε στήλη (η πρώτη στήλη είναι γεμάτη με 0 και παραμένει έτσι μέχρι το τέλος) temp_max=D(i,j); % Διαγώνια επεξεργασία if acc_cost(i-1,j-1)+ D(i,j)>temp_max temp_max=acc_cost(i-1,j-1)+ D(i,j); end % Κάθετη σάρωση: στοιχεία (1,j),(2,j),...,(i-1,j) if i-Lver>=1 rowstart=i-Lver; else rowstart=1; end for row=rowstart:i-1 if acc_cost(row,j)-(1+(penalty)*(i-row))>temp_max temp_max=acc_cost(row,j)-(1+(penalty)*(i-row)); end end % Οριζόντια σάρωση: στοιχεία (i,1),(i,2),...,(i,j-1) if j-Lhor>=1 colstart=j-Lhor; else colstart=1; end for col=colstart:j-1 if acc_cost(i,col)-(1+(penalty)*(j-col))>temp_max temp_max= acc_cost(i,col)-(1+(penalty)*(j-col)); end end % Τέλος. Απομένει να βρεθεί η μέγιστη ομοιότητα if temp_max>0 acc_cost(i,j)=temp_max; end end end % τέλος επεξεργασίας maxv=max(acc_cost); % (εύρεση μέγιστου στοιχείου του πίνακα acc_cost) ο αλγοριθμος ειναι ο παραπανω.μπορει καποιος να μου πει τι μενει να προστεθει περιπου για να τρεχει?ευχαριστω.
maxsal1995 Δημοσ. 8 Ιανουαρίου 2015 Μέλος Δημοσ. 8 Ιανουαρίου 2015 λοιπον το παλεψα και εχω αυτο το κομματι: #include <stdio.h>#define penalty 1/3;int Lhor=5;int Lver=5;int N,i,j=0;int LA=21;int M=LA+1;LB=length(LIST_B);N=LB+1;int fa=0;int fb=0;LISTA='grep ls.txt';for fa in $LISTA{do{ awk '{print $1}'done}}LIST_B='grep ls -a.txt'for fb in $LIST_Bdo{ awk '{print $1}done } int main(){D=zeros[M,N];for(i=1;i <=LA;i++){for(j=1;j<=LB;j++){if (A==B){D[i+1,j+1]=1;}else {D[i+1,j+1]=-penalty;acc_cost=zeros(M,N);for(i=2; i<=M;i++){for(j=2; i<=N; j++){temp_max=D[i,j];if((acc_cost[i-1,j-1) + D[i,j])>temp_max){temp_max=acc_cost[i-1,j-1]+D[i,j]}if((i-Lver)>=1){rowstart=i-Lver;}else { D[i+1,j+1]=-penalty; acc_cost=zeros(M,N);for(i=2; i<=M;i++){for(j=2; i<=N; j++){temp_max=D[i,j];if((acc_cost[i-1,j-1) + D[i,j])>temp_max){temp_max=acc_cost[i-1,j-1]+D[i,j]}if((i-Lver)>=1){rowstart=i-Lver;}else {rowstart=1;}if((acc_cost[row,j]-(1+(penalty)*i-row))>temp_max){temp_max=acc_cost[row,j]-(1+penalty)*(i-row));}if((j-Lhor)>=1){ colstart=j-Lhor; }else{colstart=1;}for(col=colstart;col<=j-1;col++){if((acc_cost[i,col]-(1+(penalty)*(j-col)>temp_max){temp_max=acc_cost[i,col]-(1+(penalty)*(j-col));}if(temp_max>0){acc_cost[i,j]=temp_max;}maxv=max[acc_cost];} και δυστυχως τα errors ειναι αρκετα.εχει κανεις να προτεινει καμια μικρη διορθωση?
akis_fc Δημοσ. 8 Ιανουαρίου 2015 Δημοσ. 8 Ιανουαρίου 2015 Έχεις μπλέξει σε αρκετά σημεία C με bash ΔΕΝ είναι το ίδιο αυτά! Για να διορθώσεις τα loop σου: http://www.cprogramming.com/tutorial/c/lesson3.html Για να διαβάσεις από αρχείο: http://www.cprogramming.com/tutorial/cfileio.html Επίσης ξέρεις τι κάνεις αυτό το κομμάτι ? D=zeros[M,N]; Γενικά έχεις περάσει C 1ου εξαμήνου? Δεν φαίνεται να έχεις ιδέα τι γράφεις...
maxsal1995 Δημοσ. 8 Ιανουαρίου 2015 Μέλος Δημοσ. 8 Ιανουαρίου 2015 δεν ειναι καθαρη c φιλε μου.ειναι για linux. gcc συγκεκριμενα.εμενα με νοιαζει να διορθωσω τα κομματια που εχουν c.εκει ζηταω βοηθεια...απο εκει και περα τα υπολοιπα σχολια περισσευουν...
Moderators Kercyn Δημοσ. 8 Ιανουαρίου 2015 Moderators Δημοσ. 8 Ιανουαρίου 2015 Το ότι είναι για Linux δε σημαίνει ότι δε θα πρέπει να γίνει compile. Ο gcc κάνει compile C, όχι λίγο C λίγο bash λίγο κάτι άλλο.
maxsal1995 Δημοσ. 8 Ιανουαρίου 2015 Μέλος Δημοσ. 8 Ιανουαρίου 2015 ωραια,μια συμβουλη για να ξεκινησω να ξεμπλεκω το κουβαρι αν γινεται γιατι εχω χαθει λιγο?ευχαριστω παντως.
Moderators Kercyn Δημοσ. 8 Ιανουαρίου 2015 Moderators Δημοσ. 8 Ιανουαρίου 2015 Κατ' αρχάς δες τι σου λέει ο compiler. Τα περισσότερα, αν όχι όλα, από τα λάθη που σου βγάζει είναι επειδή αυτό που γράφεις δεν είναι C. Παράδειγμα: LISTA[i]='grep ls.txt'; Το grep είναι πρόγραμμα του Linux το οποίο μπορείς να καλέσεις από το bash. Αυτό που, υποθέτω, θες να κάνεις είναι να βάλεις τα ονόματα όλων των αρχείων και φακέλων σε ένα directory μέσα στη LISTA, με το κάθε αρχείο/φάκελο να καταλαμβάνει μία θέση. Αυτό μπορείς να το κάνεις με C αλλά είναι πολύ πιο εύκολο να το κάνεις με bash. Αν δεν πρέπει να το κάνεις με C, δοκίμασε να γράψεις όλο το πρόγραμμά σου με bash. Αν πρέπει σώνει και καλά να το κάνεις με C, δες τις opendir, readdir και closedir.
akis_fc Δημοσ. 8 Ιανουαρίου 2015 Δημοσ. 8 Ιανουαρίου 2015 @Kercyn ο φίλος αναφέρεται στο επισυναπτόμενο οπότε δεν θέλει να κάνει αυτό που περιγράφεις θέλει απλά να διαβάσει από αρχείο. project.pdf
maxsal1995 Δημοσ. 8 Ιανουαρίου 2015 Μέλος Δημοσ. 8 Ιανουαρίου 2015 μαλιστα.σε ευχαριστω πολυ.πρεπει να γινει σε c παντως ειναι ξεκαθαρο.οποτε θα κοιταξω τις εντολες αυτες.κατι αλλο να προσεξω υπαρχει? ακριβως αυτο ειναι φιλε μου.και εχω κολλησει στη μετατροπη.εχω μπλεχτει πολυ βασικα.
Moderators Kercyn Δημοσ. 8 Ιανουαρίου 2015 Moderators Δημοσ. 8 Ιανουαρίου 2015 Ο ψευδοκώδικας που σου δίνει δεν έχει εντολές σε 1-1 αντιστοιχία με τη C. Πράγματα όπως Fill, zeros κλπ πρέπει να δεις πώς θα τα υλοποιήσεις σε C.
akis_fc Δημοσ. 8 Ιανουαρίου 2015 Δημοσ. 8 Ιανουαρίου 2015 Όπως σου είπε ο Kercyn κάθε γραμμή που σου πετάει error ο compiler κοιτάς να δείς πως γράφεται σε C. Πρέπει όμως να καταλαβαίνεις τι θέλεις να κάνεις σε κάθε γραμμή για αυτό σε ρώτησα παραπάνω για το D=zeros[M,N]; όπως με πρόλαβε ο Kercyn η λειτουργία που κάνει αυτή η γραμμή πρέπει εσύ να την υλοιποίσεις.
maxsal1995 Δημοσ. 8 Ιανουαρίου 2015 Μέλος Δημοσ. 8 Ιανουαρίου 2015 οκ καταλαβα πληρως!σας ευχαριστω πολυ!
giorgos147 Δημοσ. 10 Ιανουαρίου 2015 Δημοσ. 10 Ιανουαρίου 2015 3ατομική εργασία, όλη πάνω σου την πήρες ρε λεβέντη; Ρε ήρωα της επιστήμης; Ρε καλλιτέχνη των κομπιούτερς; Αχ αχ αχ.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα