Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

καλησπερα,εχω να μετατρεψω ενα ψευδοκωδικα σε γλωσσα 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)
 
ο αλγοριθμος ειναι ο παραπανω.μπορει καποιος να μου πει τι μενει να προστεθει περιπου για να τρεχει?ευχαριστω.
Δημοσ.

λοιπον το παλεψα και εχω αυτο το κομματι:

 

#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_B
do{
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 ειναι αρκετα.εχει κανεις να προτεινει καμια μικρη διορθωση?

Δημοσ.

Έχεις μπλέξει σε αρκετά σημεία C με bash ΔΕΝ είναι το ίδιο αυτά!

 

Για να διορθώσεις τα loop σου: 

http://www.cprogramming.com/tutorial/c/lesson3.html

 

Για να διαβάσεις από αρχείο:

http://www.cprogramming.com/tutorial/cfileio.html

 

Επίσης ξέρεις τι κάνεις αυτό το κομμάτι ? 

D=zeros[M,N];

Γενικά έχεις περάσει C 1ου εξαμήνου? Δεν φαίνεται να έχεις ιδέα τι γράφεις...

Δημοσ.

δεν ειναι καθαρη c φιλε μου.ειναι για linux. gcc συγκεκριμενα.εμενα με νοιαζει να διορθωσω τα κομματια που εχουν c.εκει ζηταω βοηθεια...απο εκει και περα τα υπολοιπα σχολια περισσευουν...

  • Moderators
Δημοσ.

Το ότι είναι για Linux δε σημαίνει ότι δε θα πρέπει να γίνει compile. Ο gcc κάνει compile C, όχι λίγο C λίγο bash λίγο κάτι άλλο.

  • Moderators
Δημοσ.

Κατ' αρχάς δες τι σου λέει ο compiler. Τα περισσότερα, αν όχι όλα, από τα λάθη που σου βγάζει είναι επειδή αυτό που γράφεις δεν είναι C. Παράδειγμα:

LISTA[i]='grep ls.txt';

Το grep είναι πρόγραμμα του Linux το οποίο μπορείς να καλέσεις από το bash. Αυτό που, υποθέτω, θες να κάνεις είναι να βάλεις τα ονόματα όλων των αρχείων και φακέλων σε ένα directory μέσα στη LISTA, με το κάθε αρχείο/φάκελο να καταλαμβάνει μία θέση. Αυτό μπορείς να το κάνεις με C αλλά είναι πολύ πιο εύκολο να το κάνεις με bash. Αν δεν πρέπει να το κάνεις με C, δοκίμασε να γράψεις όλο το πρόγραμμά σου με bash. Αν πρέπει σώνει και καλά να το κάνεις με C, δες τις opendir, readdir και closedir.

Δημοσ.

μαλιστα.σε ευχαριστω πολυ.πρεπει να γινει σε c παντως ειναι ξεκαθαρο.οποτε θα κοιταξω τις εντολες αυτες.κατι αλλο να προσεξω υπαρχει?


ακριβως αυτο ειναι φιλε μου.και εχω κολλησει στη μετατροπη.εχω μπλεχτει πολυ βασικα.

  • Moderators
Δημοσ.

Ο ψευδοκώδικας που σου δίνει δεν έχει εντολές σε 1-1 αντιστοιχία με τη C. Πράγματα όπως Fill, zeros κλπ πρέπει να δεις πώς θα τα υλοποιήσεις σε C.

Δημοσ.

Όπως σου είπε ο Kercyn κάθε γραμμή που σου πετάει error ο compiler κοιτάς να δείς πως γράφεται σε C. 

 

Πρέπει όμως να καταλαβαίνεις τι θέλεις να κάνεις σε κάθε γραμμή για αυτό σε ρώτησα παραπάνω για το 

D=zeros[M,N];

όπως με πρόλαβε ο Kercyn η λειτουργία που κάνει αυτή η γραμμή πρέπει εσύ να την υλοιποίσεις.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...