THMMY.gr

Μαθήματα Βασικού Κύκλου => Δομημένος Προγραμματισμός => Topic started by: vasso on April 11, 2008, 05:33:08 am



Title: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: vasso on April 11, 2008, 05:33:08 am
Εκφώνηση:
Για να δοθεί άδεια λειτουργίας ενός ραδιοφωνικού σταθμού ο σταθμός υποβάλει έναν πίνακα ο οποίος περιέχει το πολύ 50 συχνότητες εκπομπής. Να γραφεί το πρόγραμμα το οποίο επεξεργάζεται τον πίνακα με n συχνότητες που κατέθεσε ο σταθμός Α και τον πίνακα με m συχνότητες που κατέθεσε ο σταθμός Β και σχηματίζει και εκτυπώνει τον πίνακα over ο οποίος περιέχει τις συχνότητες που είναι κοινές και για τους δύο σταθμούς. Το πρόγραμμα να σχηματίζει και να εκτυπώνει ακόμη, δύο νέους πίνακες συχνοτήτων για τους σταθμούς Α και Β αφού αφαιρέσει από τους αρχικούς πίνακες που κατέθεσαν οι σταθμοί τις συχνότητες που βρέθηκαν να είναι κοινές.

Τέλος το πρόγραμμα να υπολογίζει και να εκτυπώνει, για τους νέους πίνακες συχνοτήτων, τη συχνότητα fA του σταθμού Α και τη συχνότητα fB του σταθμού Β για τις οποίες η διαφορά |fA-fB| είναι ελάχιστη.



Παρακαλώ μέχρι τη λήξη της προθεσμίας μην γράφετε στο τόπικ δημόσια μεγάλα κομμάτια του κώδικά σας για αποφυγή αντιγραφών. Στείλτε τον κώδικα με πι εμ :)


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: Emfanever on April 11, 2008, 20:55:56 pm
Πως είναι καλύτερα να εκτυπώνονται τα στοιχεία του πίνακα, οριζόντια ή κάθετα??   :)


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: TED on April 11, 2008, 20:59:37 pm
Θα έλεγα πως είναι καλύτερα να εκτιπώνονται κάθετα, αφού 50 τιμές δεν χωράνε σε μία σειρά οπότε θα γίνει περίεργο αν το εκτιπώσεις οριζόντια...

Ερώτηση: Έχετε κάνει συναρτήσεις; (αν και δε νομίζω ακόμα...)


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: Emfanever on April 11, 2008, 21:05:09 pm
Ναι, στο τελευταίο μάθημα μίλησε και για συναρτήσεις. Συγκεκριμένα θυμάμαι μια συνάρτηση που βρίσκει παραγοντικό.


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: TED on April 11, 2008, 21:08:09 pm
Γιούπι!!! και δε μ' άρεζε καθόλου χωρίς συνάρτηση απόλυτης τιμής της διαφοράς των συχνοτήτων :)


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: antonios on April 11, 2008, 23:04:04 pm
Βρε παιδιά please βοηθήστε με λίγο. Για να εκτυπώσουμε κάποια πράγματα και μετά για να αλλάξουμε γραμμή τι πρέπει να γράψουμε?? π.χ. γράφω printf("asdjhabsdjhbasjdh/n") και δεν δουλεύει. Μήπως κάποιος μπορεί να με διορθώσει???


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: AgentCain on April 11, 2008, 23:13:04 pm
To "/" ειναι "\"


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: antonios on April 11, 2008, 23:15:47 pm
Α, όλο αυτό ήταν το λάθος.....?? :o :o Εντάξει, ευχαριστώ πολύ!! Καλή προσπάθεια σε όσους επιχειρούν να την φτιάξουν...


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: leon-SPT on April 12, 2008, 17:33:46 pm
Χρειάζεται τίποτα malloc ή τίποτα τέτοιο?????


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: Nikos! on April 12, 2008, 18:13:41 pm
Παιδια λιγο help please. Ο καθηγητης εχει πει τους pointers ? Γιατι νομιζω χρειαζονται στην εργασια, μπορει να κανω και λαθος δεν ξερω.


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: vasso on April 12, 2008, 18:16:58 pm
αν τους χρειάζεσαι, βάλτους :) αλίμονο αν προγραμματίζουμε μόνο με όσα μας είπαν στην τάξη..


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: AgentCain on April 12, 2008, 19:00:12 pm
Παιδια λιγο help please. Ο καθηγητης εχει πει τους pointers ? Γιατι νομιζω χρειαζονται στην εργασια, μπορει να κανω και λαθος δεν ξερω.
Ναι τους είπε


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: kanele on April 12, 2008, 19:14:01 pm

Παρακαλώ μέχρι τη λήξη της προθεσμίας μην γράφετε στο τόπικ δημόσια μεγάλα κομμάτια του κώδικά σας για αποφυγή αντιγραφών. Στείλτε τον κώδικα με πι εμ :)

    Με συγχωρείς, αλλά τι λογική είναι αυτη; Εδώ ο κόσμος "παλεύει" ;D για το open source, και εμείς θα κρύβουμε τα if και  τα else.

 Εξάλλου, αν κάποιος απλά αντιγράφει --> μια τρύπα στο νερό <--, κακό του κεφαλιού του κάνει, έτσι;

Γι¨αυτό, cool ;)


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: AgentCain on April 12, 2008, 20:00:44 pm
1)Οι πίνακες θα πρέπει να έχουν προκαθορισμένο μέγεθος (<50) ή θα εκχωρείται δυναμικά η μνήμη (και πώς το κάνουμε αυτό?) ?
Νομίζω αναφερθήκαμε μόνο στο 1ο.

2)Τα στοιχεία θα πρέπει να δίδονται από το χρήστη ή θα είναι ενσωματωμένα στο πρόγραμμα?


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: stefos on April 12, 2008, 20:40:51 pm
Με την εντολή malloc γίνεται η δυναμική κατανομή μνήμης. Υπάρχει στις σημειώσεις.
Εγώ πιστεύω πως οι συχνότητες θα ζητούνται από τον χρήστη. Αλλιώς πώς θα μπορούσε να γίνει σύγκριση ή και δημιουργία του over?


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: ifigeneia on April 12, 2008, 21:25:40 pm
Κι εγώ δεν πιστεύω οτι χρειάζεται malloc(δυναμική δεσμευση μνήμης δηλ.)
Αυτό που κατάλαβα εγώ(κι έχω κάνει μέχρι στιγμής) είναι οτι οταν ορίζουμε τους πίνακες το μεγεθος τους είναι 50(μέγιστος αριθμός συχνοτήτων που θα καταχωρήσουμε).. μετά όταν καταχωρείς τις συχνότητες στον πινακα Α πχ μέσω ενός for(i=0;i,50;i++)  απλώς για να σταματήσεις τις καταχωρήσεις σε περίπτωση λιγότερων συχνοτήτων από 50 χρησιμοποιείς ένα break για να σπάσεις τον βρόχο.
αυτό μου βγαίνει σωστό οταν καταχωρω στον Α.. μετά για κάποιο λόγο-ενώ έχω ακριβώς τον ίδιο κώδικα- δε λειτουργεί για τον πινακα Β... τώρα που έχω κάνει λάθος...αλλά νομίζω οτι αυτό είναι το σκεπτικο...
Αλλωστε δε νομίζω να έχει διδάξει malloc στο μάθημα..


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: Emfanever on April 12, 2008, 21:53:44 pm
Το break που ακριβώς το βάζεις??Μέσα στη for πάντως δεν πιστεύω γιατί δεν έχει νόημα.Εγώ το κάνω με άλλο τρόπο:

Ζητάω από το χρήστη να  δώσει πρώτα τον αριθμό των στοιχείων που θέλει να καταχωρήσει στον πίνακα και μετά τα καταχωρεί.


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: ripper_george on April 12, 2008, 22:17:04 pm
Ρε παιδια, τι malloc και dynamic memory allocation....
Απλώς με πίνακες γίνεται....
Εκτός των άλλων, και στην εκφώνηση πίνακες ζητά....
Δεν είπε τίποτα για dynamic memory allocation ο καθηγητής στο μάθημα....
Το πρόγραμμα είναι deadly simple....
Επαναλήψεις, if κτλ.....


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: ifigeneia on April 12, 2008, 22:38:36 pm
Το break που ακριβώς το βάζεις??Μέσα στη for πάντως δεν πιστεύω γιατί δεν έχει νόημα.Εγώ το κάνω με άλλο τρόπο:

Ζητάω από το χρήστη να  δώσει πρώτα τον αριθμό των στοιχείων που θέλει να καταχωρήσει στον πίνακα και μετά τα καταχωρεί.
Στη ουσία αυτό που κάνουμε είναι παρόμοιο... εγώ απλώς δηλώνω με printf εξαρχής οτι οταν θέλει ο χρήστης να σταματήσει να καταχωρεί αριθμούς πρέπει να πατήσει ένα συγκεκριμένο πλήκτρο που έχω ορίσει.. κι ε΄κεί ακριβώς μπαίνει το break....
πάντως απλό απλό αλλά σπαστικό το πρόβλημα...! :P


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: ifigeneia on April 12, 2008, 22:49:53 pm
εννοείται οτι μέσα στο for έχω βάλει if-- δηλ. if "δωθει το πλήκτρο που όρισα" τότε break..


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: Emfanever on April 12, 2008, 22:53:29 pm
ok κατάλαβα! ::) Έτσι όπως το κάνεις έχει νόημα,απλά δεν το είχες εξηγήσει από την αρχή ,γι'αυτό ρώτησα!!  ;)


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: vasso on April 13, 2008, 05:21:18 am

Παρακαλώ μέχρι τη λήξη της προθεσμίας μην γράφετε στο τόπικ δημόσια μεγάλα κομμάτια του κώδικά σας για αποφυγή αντιγραφών. Στείλτε τον κώδικα με πι εμ :)

    Με συγχωρείς, αλλά τι λογική είναι αυτη; Εδώ ο κόσμος "παλεύει" ;D για το open source, και εμείς θα κρύβουμε τα if και  τα else.

 Εξάλλου, αν κάποιος απλά αντιγράφει --> μια τρύπα στο νερό <--, κακό του κεφαλιού του κάνει, έτσι;

Γι¨αυτό, cool ;)

Σαφώς και έτσι θα έπρεπε να είναι. Γιατί είμαστε και μεγάλα παιδιά και ξέρουμε ότι δεν πρέπει να αντιγράφουμε έτοιμες εργασίες. Αν όμως τη δει κάποιος έτοιμη, παρόλο που είχε σκοπό να την κάνει και είναι τελευταία μέρα και έχει και champions league ή τελοσπάντων έναν εναλλακτικό (καλύτερο) τρόπο να περάσει το βράδυ του, ε νομίζω ότι θα την αντιγράψει. Ή και κάποιος που βαριέται. Ή και κάποιος που δεν θέλει να μάθει προγραμματισμό ακόμα και θεωρεί ότι θα τα διαβάσει στην εξεταστική, θα γράψει ένα 5 και θα περάσει.
  Και όπως και να 'χει, το να κυκλοφορούν απαντήσεις εργασιών δημόσια, πριν την λήξη υποβολής τους, σε ένα αρκετά μεγάλο και αρκετά γνωστό φόρουμ, δεν θα ακούγεται ωραίο ούτε στον καθηγητή.

Ακριβώς το αντίθετο συμβαίνει για μετά τη λήξη της προθεσμίας. Εκεί, σχεδόν επιβάλλεται να σταλθεί η απάντηση με τη λύση για να δεις πώς τις έκαναν οι άλλοι, πώς σκέφτηκαν και αν είχαν καμιά καλύτερη ιδέα από εσένα...


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: solli144 on April 13, 2008, 16:40:55 pm
παιδια ξέρει κανένας τη συνάρτηση για την απόλυτη τιμή? Νομίζω είναι στο include math.h αλλα δεν ξέρω πως λέγεται.....μήπως να φτιάξω εγώ μία?  :???:


Title: Απ: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: Tonia on April 13, 2008, 16:45:05 pm
δεν είναι abs() ??
αλλά δεν ανήκει στο math.h
δε θυμάμαι και για σίγουρα..

νομίζω ένα από τα τρία από τα παρακάτω:

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


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: gkarip on April 13, 2008, 16:58:19 pm
Γνωρίζει κανείς πως γίνεται διαγραφή στοιχείου απο πίνακα? Λογικά χρειάζονται pointers...


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: wetman0 on April 13, 2008, 17:05:11 pm
Στο math.h νομιζω ειναι..abs() λεγεται αλλά για float θελει fabs()


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: solli144 on April 13, 2008, 17:08:46 pm
thanks tonia το stdlib.h είναι τελικά   :)


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: costas122 on April 13, 2008, 18:05:22 pm
Γιατί      if (a[k]==0.0) break;     και όχι απλά      if (a[k]==0) break;   ????


Title: Re: Απ: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: Emfanever on April 13, 2008, 18:08:01 pm
δεν είναι abs() ??
αλλά δεν ανήκει στο math.h
δε θυμάμαι και για σίγουρα..

νομίζω ένα από τα τρία από τα παρακάτω:

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

Και στο math.h υπάρχει....


Στο math.h νομιζω ειναι..abs() λεγεται αλλά για float θελει fabs()

Σίγουρα θέλει fabs();  γιατί εμένα δουλεύει και με abs()


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: Emfanever on April 13, 2008, 18:13:54 pm
Έχω γράψει αυτό το κομμάτι κώδικα για να εισάγω τις συχνότητες αλλά κατι δεν πάει καλά όταν το τρέχω και σταματάει νωρίτερα από ότι θα έπρεπε(δεν έχω πληκτρολογήσει 50 συχνότητες ούτε '0').Μπορεί να πει κανείς καμιά ιδέα για το τι φταίει???


int k;
float a[100],b[100],over[50],a_2[50],b_2[50];

  printf ("Dwse apo 1 mexri 50 syxnotites gia ton A stathmo.\n Patise '0' gia na stamatiseis \n");

  for(k=0;k<=49;k++)
    {
      scanf(" %f ",a[k]);
      if (a[k]==0.0) break;
     }

  printf("twra dwse apo 1 mexri 50 syxnotites gia ton B stathmo.\n Patise '0' gia na stmatiseis\n");

  for (k=0;k<=49;k++)
    {
      scanf("%f",b[k]);
      if (b[k]==0.0) break;
     }

Και κάτι ακόμα.Όταν πληκτλογώ τις συχνότητες για να τις ξεχωρίσω την μια από την άλλη πατάω enter?????

πρέπει να γράψεις scanf("%f",&a[k]);  Ξέχασες το &


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: OtiNaNAi on April 13, 2008, 19:02:33 pm
Γιατί     if (a[k]==0.0) break;     και όχι απλά      if (a[k]==0) break;   ????

βασικα δεν ειναι λαθος αλλα εξαρταται απο το compiler, καποιοι το αναγνωριζουν σαν λαθος και καποιοι οχι

το α [κ]  ειναι float ενω το 0 ειναι int και το 0.0 float, στην if τα στοιχεια που συγκρινονται πρεπει να ειναι ιδιου τυπου



Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: screambloodygore on April 13, 2008, 19:59:01 pm
μπορεί κανείς να δώσει κανένα tip για τη δημιουργία των νέων πινάκων χωρίς τα κοινά???κοντεύω να σπάσω το κεφάλι μου!προσπαθώ να συγκρίνω τα στοιχεία των δυο πινάκων και να μου δώσει τελικά αυτά που δεν είναι ίδια αλλά έμπλεξα με τα for και δεν βγαίνει.πάντως κάπως έτσι δεν γίνεται?


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: solli144 on April 13, 2008, 20:19:19 pm
εχω γράψει το πρόγραμμα ( μάλλον σωστά ) το κάνω compile μου γράφει success αλλα όταν το κάνω run βγάζει ένα μύνημα με αλαμπουρνέζικα και δεν μπορει να το τρέξει, ο ίδιο και το exe αρχείο που δημιουργεί.

Τι λέτε να φταίει ???                                                    >:( >:( >:( >:( >:( >:( >:( >:( >:( >:( >:( >:( >:(


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: zeus90 on April 13, 2008, 22:37:11 pm
Ευχαριστώ για τη βοήθεια!!!Τελικά έφταιγε το & που είχα ξεχάσει... :-[
Τώρα δουλεύει ρολόι!!


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: Emfanever on April 13, 2008, 23:28:25 pm
μπορεί κανείς να δώσει κανένα tip για τη δημιουργία των νέων πινάκων χωρίς τα κοινά???κοντεύω να σπάσω το κεφάλι μου!προσπαθώ να συγκρίνω τα στοιχεία των δυο πινάκων και να μου δώσει τελικά αυτά που δεν είναι ίδια αλλά έμπλεξα με τα for και δεν βγαίνει.πάντως κάπως έτσι δεν γίνεται?

Μηδένισε τα κοινά στοιχεία στους πίνακες και αποθήκευσε σε νέους πίνακες τα μη μηδενικά στοιχεία των αρχικών.


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: TED on April 13, 2008, 23:43:39 pm
Γιατί      if (a[k]==0.0) break;     και όχι απλά      if (a[k]==0) break;   ????

Και γιατί όχι (!a[k])?

εχω γράψει το πρόγραμμα ( μάλλον σωστά ) το κάνω compile μου γράφει success αλλα όταν το κάνω run βγάζει ένα μύνημα με αλαμπουρνέζικα και δεν μπορει να το τρέξει, ο ίδιο και το exe αρχείο που δημιουργεί.

Τι λέτε να φταίει ???                                                    >:( >:( >:( >:( >:( >:( >:( >:( >:( >:( >:( >:( >:(

Ποιός comiler? Κάποιοι δεν υποστηρίζουν Ελληνικά... Επίσης πρόσεξε μήπως έχεις βγεί έξω από τη μνήμη σου και διαβάζεις άλλα πράγματα... κάπου εκεί στην αλλαγή των στοιχείων, στον over ίσως...

μπορεί κανείς να δώσει κανένα tip για τη δημιουργία των νέων πινάκων χωρίς τα κοινά???κοντεύω να σπάσω το κεφάλι μου!προσπαθώ να συγκρίνω τα στοιχεία των δυο πινάκων και να μου δώσει τελικά αυτά που δεν είναι ίδια αλλά έμπλεξα με τα for και δεν βγαίνει.πάντως κάπως έτσι δεν γίνεται?


Κάπου ίσως σε βοηθήσει και κάποιος μετρητής που θα μετράει πόσα στοιχεία πρέπει να υπάρχουν στον νέο πίνακα...


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: leon-SPT on April 13, 2008, 23:53:22 pm
Παιδια τις συχνότητες δεν πρέπει να τις δίνει ο χρήστης?? Πρέπει δηλαδή αν του ζητάμε και τις τιμές τους έτσι?


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: TED on April 14, 2008, 00:01:54 am
ναι, ο χρήστης πρέπει να τις δίνει... Πάντα ισχύει αυτό στον πέτρου, όταν δεν λέει από πού προέρχεται κάτι, προέρχεται από τον χρήστη και πρέπει να κάνεις όλη τη διαδικασία ανάγνωσης...


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: solli144 on April 14, 2008, 00:04:48 am
ο compiler μου ειναι ο Borland. Δεν χρησιμοποιώ ελληνικά αλλα έχω δηλώσει έναν πίνακα που είναι κάπως μεγάλος  ::) 2500 θέσεις. Μπορεί να φταίει αυτο?


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: TED on April 14, 2008, 00:08:43 am
2500??? τι θα τον κάνεις τέτοιο πίνακα βρε; από μόνος του ο πίνακας δεν έχει πρόβλημα, άν τον χειρίζεσαι σωστά... Αλλά μηπως κάπου διαβάζεις πράγματα που δέν έχεις αρχικοποιήσει;

άν θέλεις να ασχοληθείς με προγραμματισμό, παράτησε τον borland... Dev C και πάνω!


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: Wade on April 14, 2008, 00:15:52 am
Νομίζω ότι είχαμε και πέρσι μια εργασία που ζητούσε πίνακα με 2500 θέσεις, και στον Borland υπήρχε πρόβλημα με τόσο μεγάλο πίνακα.  Εγώ είχα μικρύνει τον πίνακα για να τρέχει το πρόγραμμα...


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: aggalitsas on April 14, 2008, 00:41:48 am
Γιατί δεν δουλεύει αυτό? καμία ιδεα?

Code:
    float *over=NULL;
for....{
 if(A[i]==B[i])
                     {
     
                     counter++;
                     over=(float*)realloc(over,(counter)*sizeof(float));
                     }
        }


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: Goklagie on April 14, 2008, 00:46:24 am
Ρε παιδιά. μου βγάζει constant expression required εκεί που ορίζω τους Α,Β στο παρακάτω:

Quote
#include <stdio.h>

void main()
{
   int x,y,i,j,a,c;
   scanf("%d %d",&x,&y);
      while (x>50 && y>50)
      {
      printf("Oi arithmoi sas prepei na einai mikroteroi tou 50\n");
      scanf("%d %d",&x,&y);
      }
   
#define a x
#define c y

   int A[a],B[c],count;

Έχετε καμιά ιδέα γιατί?
Ο Κορτέσης κάνει το κολπάκι με το define σε 1 παράδειγμά του.
Θα σπάσω το κεφάλι μου.


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: portinos on April 14, 2008, 01:20:47 am
Να ρωτήσω κάτι; Έφτιαξα το πρόγραμμα, κάνει το compilation σωστά χωρίς να εμφανίζει κανένα σφάλμα. Όταν όμως τρέξω το αρχεί μου βγάζει ότι στο exe εντοπίστηκε σφάλμα και θα αποσταλεί στην επίλυση σφαλμάτων και ένα warninig που λέει memery fragmentation. Δεν έγραψα όμως κάπου έξω από τις περιοχές μνήμης που είχα δεσμεύσει. Τι μπορεί κανείς να κάνει γι' αυτό. Βοήθεια  ^beg^ ^beg^


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: wetman0 on April 14, 2008, 01:21:31 am
Στο math.h νομιζω ειναι..abs() λεγεται αλλά για float θελει fabs()

Σίγουρα θέλει fabs();  γιατί εμένα δουλεύει και με abs()
Με μια σελίδα καθυστερηση βεβαια αλλα...
Ναι fabs() είναι σιγουρα αλλα δεν ξερω μηπως παιζει κατι  με τους διαφορετικους compilers.
Εμενα ας πουμε ο gcc μου βγαζει λαθος αν δεν βαλω fabs.


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: TED on April 14, 2008, 01:25:57 am
Ρε παιδιά. μου βγάζει constant expression required εκεί που ορίζω τους Α,Β στο παρακάτω:

Quote
#include <stdio.h>

void main()
{
   int x,y,i,j,a,c;
   scanf("%d %d",&x,&y);
      while (x>50 && y>50)
      {
      printf("Oi arithmoi sas prepei na einai mikroteroi tou 50\n");
      scanf("%d %d",&x,&y);
      }
   
#define a x
#define c y

   int A[a],B[c],count;

Έχετε καμιά ιδέα γιατί?
Ο Κορτέσης κάνει το κολπάκι με το define σε 1 παράδειγμά του.
Θα σπάσω το κεφάλι μου.

Είσαι σίγουρος πως μπορείς να δηλώσεις στατικές τιμές μέσα στη main?
Επίσης, έχεις ήδη δηλώσει τα a και c ώς integer... Ή μεταβλητές θα είναι ή σταθερές, όχι και τα 2


Να ρωτήσω κάτι; Έφτιαξα το πρόγραμμα, κάνει το compilation σωστά χωρίς να εμφανίζει κανένα σφάλμα. Όταν όμως τρέξω το αρχεί μου βγάζει ότι στο exe εντοπίστηκε σφάλμα και θα αποσταλεί στην επίλυση σφαλμάτων και ένα warninig που λέει memery fragmentation. Δεν έγραψα όμως κάπου έξω από τις περιοχές μνήμης που είχα δεσμεύσει. Τι μπορεί κανείς να κάνει γι' αυτό. Βοήθεια  ^beg^ ^beg^


Κάπου έχεις κάποιο λογικό λάθος... Δες μήπως πάς να γράψεις σε μνήμη που δέν έχεις δεσμεύσει. Ίσως δεν βάζεις αρχική τιμή σε κάποιον μετρητή, ή δεν έχει ακριβώς τις τιμές που θέλεις κάποιος δείκτης...


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: TED on April 14, 2008, 01:30:05 am
Στο math.h νομιζω ειναι..abs() λεγεται αλλά για float θελει fabs()

Σίγουρα θέλει fabs();  γιατί εμένα δουλεύει και με abs()


Βρε παιδιά, αναφέρεστε τώρα σε μία συνάρτηση 3 σειρών... φτιάξτε την εκεί στα γρήγορα να τελειώνετε... ένα if είναι!


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: solli144 on April 14, 2008, 14:26:24 pm
sτο dev C++ το κάνω compile kai μου αποθηκεύει ένα αρχείο .cpp και όταν κάνω run μου λέει compilation complete και παπαριές ενώ περιμένω να μου το τρέξει. Τι πρέπει να κάνω

υστερόγραφο:  έχω βίστα   


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: sarovios on April 14, 2008, 18:55:33 pm
Πρεπει να εχουμε διαβασει και συναρτησεις για αυτη την εργασια? Τους πινακες απλα vα πρεπει να τουσ διαβαζει ετσι?  P.S. δεν ξερω και πολλα απο c... Επισης οι πινακες σε τι διασταση πρεπει να ειναι?


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: iliasp on April 14, 2008, 19:01:43 pm
μπορει μηπως καποιος να ενεβασει την ασκηση Β ??
οπως την προηγουμενη φορα...μας ειχε βοηθησει πολυ εμας που εχουμε "κενα" στη c !
 :( :(
help!!
Ευχαρηστω,αν μπορεσετε και προσφερετε βοηθεια!!


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: stefos on April 14, 2008, 20:05:51 pm
Πρεπει να εχουμε διαβασει και συναρτησεις για αυτη την εργασια? Τους πινακες απλα vα πρεπει να τουσ διαβαζει ετσι?  P.S. δεν ξερω και πολλα απο c... Επισης οι πινακες σε τι διαστασει πρεπει να ειναι?
Δεν είναι απαραίτητο να την κάνεις με συναρτήσεις.
Προφανώς θα πρέπει να τους γεμίζεις τους πίνακες και να δημιουργείς τον over με μέγεθος που προκύπτει από τα δεδομένα σου.


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: elen// on April 14, 2008, 20:35:55 pm
ξερει καποιος ως που εχει πει θεωρια?ευχαριστω


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: screambloodygore on April 14, 2008, 20:37:08 pm
για το τελευταίο κομμάτι της άσκησης έγραψα αυτόν τον κώδικα και εκτός από τα ζευγάρια των συχνοτήτων Α,Β μου βγάζει και κάτι ζευγάρια μηδενικά.βλέπει κανείς το λάθος??(όπου n ο αριθμός των συχνοτήτων που εισάγει ο χρήστης)
for (q=0 ; q<n ; q++)
       for (r=n-1 ; r>=0 ; r--){
       diafora=A[q]-B[r]>0?A[q]-B[r]:B[r]-A[q];
            if(diafora<=e){

       printf("\n%f\n%f",A[q],B[r]);}}


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: dimvam on April 14, 2008, 20:42:21 pm
για το τελευταίο κομμάτι της άσκησης έγραψα αυτόν τον κώδικα και εκτός από τα ζευγάρια των συχνοτήτων Α,Β μου βγάζει και κάτι ζευγάρια μηδενικά.βλέπει κανείς το λάθος??(όπου n ο αριθμός των συχνοτήτων που εισάγει ο χρήστης)
for (q=0 ; q<n ; q++)
       for (r=n-1 ; r>=0 ; r--){
       diafora=A[q]-B[r]>0?A[q]-B[r]:B[r]-A[q];
            if(diafora<=e){

       printf("\n%f\n%f",A[q],B[r]);}}

Βάζε παντού παρενθέσεις. Βάλε για να είσαι σίγουρος, και αν δε δουλέψει το συζητάμε ξανά.
πχ γράψε το n-1 (n-1)


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: fourier on April 14, 2008, 21:17:38 pm
Γνωριζει κανεις εαν οι συχνοτητες θα πρεπει να περιοριστουν στην περιοχη 87,5 - 108 MHz, δηλ. στη μπαντα των FM?
Ρωταω διοτι σ' αυτην την περιπτωση θα πρεπει να προβλεφθει επιπλεον λειτουργια απορριψης των εκτος μπαντας συχνοτητων απο τους πινακες.

Στελνω mail στον Κορτεση για διευκρινιση.


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: sarovios on April 14, 2008, 21:32:00 pm
Μπορειτε να μου πειτε τι κανω λαθος σε αυτο το κοματι του κωδικα???

Code:
#include <stdio.h>

int main()
{
    float K[50][2],over[50];
    int i,j,z,n,m;
   
    printf ("Dose ton aritho ton sixnotiton tis etairias A\n");
    scanf ("%d",&n);
   
    printf ("Dose ton arithmo ton sixnotiton tis etairias B\n");
    scanf ("%d",&m);
   
    for (i=0 ; i<n ; i++)
    {
        printf ("Dose sixnotites A etairias\n");
        scanf ("%f",&K[i][0]);
    }   
        for (i=0 ; i<m ; i++)
        {
            printf ("Dose sixnotites B etairias\n");
            scanf ("%f",&K[i][1]);
        }
        for (i=0 ; i<n ; i++)
        {
            for (i=0 ; i<m ; i++)
            {
                if (K[i][0]=K[i][1])
                over[z]=K[i][0];
                z++;
            }   
        }   
    printf ("over[%f]",over[z]);
    return 0;
}           


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: fourier on April 14, 2008, 22:30:36 pm
Και αλλη μια ερωτηση:

Για να δηλωθει ενας πινακας χωρις δυναμικη δεσμευση μνημης (malloc) πρεπει να δωσουμε τη διασταση του. Η διασταση αυτη πρεπει να ειναι απο την αρχη δηλωμενος αριθμος? Εγω εκανα το εξης:
Δηλωσα στην αρχη της main τις μεταβλητες n και m στις οποιες δεν εδωσα τιμη.
Με scanf ζηταω να δωθουν τιμες για τις n και m (ποσες συχνοτητες θα εχει ο καθε πινακας).
Και μετα δηλωνω τους πινακες με διασταση n και m αντιστοιχα. Τη στιγμη που το προγραμμα παει να δηλωσει τους πινακες, η διασταση τους εχει ηδη υπολογιστει απο τα scanf.

Το δοκιμασα και δουλευει (χρησιμοποιω DevC++) αλλα φοβαμαι μηπως ειναι γενικα λαθος...


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: OtiNaNAi on April 14, 2008, 22:43:53 pm
Και αλλη μια ερωτηση:

Για να δηλωθει ενας πινακας χωρις δυναμικη δεσμευση μνημης (malloc) πρεπει να δωσουμε τη διασταση του. Η διασταση αυτη πρεπει να ειναι απο την αρχη δηλωμενος αριθμος? Εγω εκανα το εξης:
Δηλωσα στην αρχη της main τις μεταβλητες n και m στις οποιες δεν εδωσα τιμη.
Με scanf ζηταω να δωθουν τιμες για τις n και m (ποσες συχνοτητες θα εχει ο καθε πινακας).
Και μετα δηλωνω τους πινακες με διασταση n και m αντιστοιχα. Τη στιγμη που το προγραμμα παει να δηλωσει τους πινακες, η διασταση τους εχει ηδη υπολογιστει απο τα scanf.

Το δοκιμασα και δουλευει (χρησιμοποιω DevC++) αλλα φοβαμαι μηπως ειναι γενικα λαθος...

Ειναι λαθος, η διασταση του πινακα πρεπει να δηλωνεται εξαρχης πριν εκτελεστει το προγραμμα, δλδ πρεπει να ειναι αριθμος ή καποια μεταβλητη η τιμή της οποίας έχει ορίστεί με την εντολή define.

Το ότι δουλεύει οφείλεται στο συγκεκριμένο compiler , γενικά όμως ειναι λάθος


@sarovios

Code:
for (i=0 ; i<n ; i++)
        {
            for (i=0 ; i<m ; i++)
            {
                if (K[i][0]=K[i][1])
                over[z]=K[i][0];
                z++;
            }   
        }   

Και στα δυο for χρησιμοποιείς ως μετρητη το i και επιπλεον δεν εχεις μηδενισει αρχικα το z οποτε το z++ δεν εχει νοημα και στο if βαζεις == ΟΧΙ =

δλδ το σωστο

Code:
z=0;
for (i=0 ; i<n ; i++)
        {
            for (j=0 ; j<m ; j++)
            {
                if (K[i][0]==K[j][1])
                over[z]=K[i][0];
                z++;
            }   
        }   





Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: Mikros_Nikolas on April 14, 2008, 22:52:29 pm
Και αλλη μια ερωτηση:

Για να δηλωθει ενας πινακας χωρις δυναμικη δεσμευση μνημης (malloc) πρεπει να δωσουμε τη διασταση του. Η διασταση αυτη πρεπει να ειναι απο την αρχη δηλωμενος αριθμος? Εγω εκανα το εξης:
Δηλωσα στην αρχη της main τις μεταβλητες n και m στις οποιες δεν εδωσα τιμη.
Με scanf ζηταω να δωθουν τιμες για τις n και m (ποσες συχνοτητες θα εχει ο καθε πινακας).
Και μετα δηλωνω τους πινακες με διασταση n και m αντιστοιχα. Τη στιγμη που το προγραμμα παει να δηλωσει τους πινακες, η διασταση τους εχει ηδη υπολογιστει απο τα scanf.

Το δοκιμασα και δουλευει (χρησιμοποιω DevC++) αλλα φοβαμαι μηπως ειναι γενικα λαθος...

Λειτουργεί έτσι όπως λες αλλά όντως γενικά είναι λάθος λογική.
Αυτό που έκανες πρέπει να το κάνεις ΜΟΝΟ με malloc.

Έτσι όπως το έκανες, το πρόγραμμά σου μετά το compile έχει ορίσει έναν πίνακα τάδε διάστασης.
Το ζητούμενο είναι την ώρα της εκτέλεσης να δεσμεύεται η μνήμη για τον πίνακα. Και αυτό γίνεται με την malloc.

Δεν ξέρω κατά πόσο είναι σωστά σε θεωρητικό επίπεδο αυτά που λέω, πάντως το σίγουρο είναι ότι πέρυσι αυτοί που μας έκαναν εργαστήριο, μας είπαν για το ίδιο θέμα ότι πρέπει να χρησιμοποιούμε malloc.
Όπως και να έχει, είναι μια λογική πρώτη σκέψη, "λάθος" όμως! ;)


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: Emfanever on April 14, 2008, 23:09:32 pm
Γνωριζει κανεις εαν οι συχνοτητες θα πρεπει να περιοριστουν στην περιοχη 87,5 - 108 MHz, δηλ. στη μπαντα των FM?
Ρωταω διοτι σ' αυτην την περιπτωση θα πρεπει να προβλεφθει επιπλεον λειτουργια απορριψης των εκτος μπαντας συχνοτητων απο τους πινακες.

Στελνω mail στον Κορτεση για διευκρινιση.

Μπα, δε νομίζω.Προσωπικά, ο μόνος περιορισμός που έχω βάλει είναι ότι οι συχνότητες πρέπει να είναι διάφορες του μηδενός.


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: solli144 on April 14, 2008, 23:50:16 pm
ξερει καποιος ως που εχει πει θεωρια?ευχαριστω

θεωρία από τις σημειώσεις του έχει πει μέχρι και τους πίνακες


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: TED on April 15, 2008, 00:32:41 am
υστερόγραφο:  έχω βίστα   

Και είχα αρχίσει να αναρωτιέμαι ποιό είναι το σφάλμα σου...
Καλά είσαι, εγώ ούτε καν κατάφερα να φτιάξω το exe σε vista :(
Πρεπει να εχουμε διαβασει και συναρτησεις για αυτη την εργασια? Τους πινακες απλα vα πρεπει να τουσ διαβαζει ετσι?  P.S. δεν ξερω και πολλα απο c... Επισης οι πινακες σε τι διασταση πρεπει να ειναι?

ε αν δε θέλεις δε βάζεις συναρτήσεις, στο χέρι σου είναι...
τους πίνακες τους διαβάζεις στην αρχή του προγράμματος και μετά τους χρησιμοποιείς...

Quote
απλα υα πρεπει να τουσ
Τί ζημιές κάνει αυτό το msn...


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: evageliav on April 15, 2008, 02:55:23 am
Αν χρησιμοποιήσουμε την συνάρτηση abs και δεν τη φτιάξουμε εμείς ,στο όρισμα της έχει καμιά ιδιαιτερότητα,
ή βάζουμε π.χ (Α[ι]-


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: evageliav on April 15, 2008, 03:00:15 am
sorry αλλά κόπηκε ένα κομμάτι *στο post ...εννοούσα abs(Α-B[j]) ,ή ορίζεται κάπως αλλιώς;

*Αλλά πως να λειτουργείς φυσιολογικά μετά από τόσες ώρες προγραμματισμό ...ειδικά αν είσαι και αρχάριος :-\


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: gagas on April 15, 2008, 03:08:28 am
γνωριζει-με σιγουρια- να μας πει καποιος αν θα χρησιμοποιησουμε δυναμικη δεσμευση μνημης ή θα τους βαλουμε ολους τους πινακες με μεγεθος 50?
ο καθενας απο οτι καταλαβα το κανει οπως θελει..


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: TED on April 15, 2008, 03:50:40 am
Αυτό που ζητάει ο Κορτέσης είναι να χρησιμοποιήσεις στατικούς πίνακες. Αλλιώς δεν θα περιόριζε... Τώρα αν κάποιος το κάνει με δυναμικούς δικό του θέμα. Και τα 2 σωστά είναι...


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: gagas on April 15, 2008, 04:04:39 am
ευχαριστω πολυ!


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: leon-SPT on April 15, 2008, 10:54:30 am
Παιδια plzzz μπορεί  να στείλει κανείς το Loop  με την δημιουργία του πίνακα που δεν εχει κοινες τιμες με τον Α? Να πάρω καμιά ιδέα...


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: TED on April 15, 2008, 13:11:14 pm
Θεωρώ
sizA το μέγεθος του Α
over[k] με k τα κοινά στοιχεία A και Β (και προφανώς το μέγεθος του over)


Code:

I=0;
for (i=0;i<sizA;i++)
{
flag=0;
for (j=0;j<k;j++)
{
if (A[i]==over[j])
{
flag=1;
break;
}
}

if (!flag)
{
newA[I]=A[i];
I++;
}
}


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: Liverpoylian on April 15, 2008, 14:23:22 pm
Ρε παιδιά τρεις μέρες διάβαζα τα posts σας και το μόνο που καταφέρνατε ήταν να με μπερδέψετε. javascript:void(0);
bang_headΈπιασα λοιπόν την εργασία και χωρίς πολλά πολλά βγήκε άνετα. Μη ψάχνετε να μπερδευτείτε. Εσείς από Θεσσαλονίκη για Αθήνα πάτε πρώτα  Καβάλα, μετά Κέρκυρα και μετά Αθήνα! Η εργασία είναι πάρα πολύ απλή. Όποιος(και κυρίως όποια...) θέλει να τον βοηθήσω ας μου στείλει μήνυμα
Όλος δικός σας...(Αυτό μόνο στις κυρίες παέι!)


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: KaiGiaSas on April 15, 2008, 15:50:40 pm
το μειλ μου ειναι tstsonhs@hotmail.com οποιος μπορει ας μου στειλει τον κωδικα γατι εχω φαει τρελο κολλημα.
ευχαριστω εκ των προτερων


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: portinos on April 15, 2008, 16:08:49 pm
Μπορεί κάποιος να μου πει πως να βάλω τα στοιχεία ενός πίνακα κατά αύξουσα σειρά. Έχω κολλήσει και δε μπορώ να σκεφτώ τίποτα


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: KaiGiaSas on April 15, 2008, 16:23:06 pm
μπορει καποιος να γραψει την εντολη με την οποια εμφανιζει στην οθονη εναν πινακα Κ με ν γραμμες και μ στηλες?
ευχαριστω


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: λήθη on April 15, 2008, 16:40:12 pm
Μπορεί κάποιος να μου πει πως να βάλω τα στοιχεία ενός πίνακα κατά αύξουσα σειρά. Έχω κολλήσει και δε μπορώ να σκεφτώ τίποτα

Αν και δε σου χρειαζεται..(προφανως εννοεις το bubblesort)

Code:
for(i=0;i<n;i++){
 for(j=0;j<n-i;j++){
  if(A[j]>A[j+1]){
   k=A[j];
   A[j]=A[j+1];
   A[j+1]=k;
  }
 }
}

μπορει καποιος να γραψει την εντολη με την οποια εμφανιζει στην οθονη εναν πινακα Κ με ν γραμμες και μ στηλες?
ευχαριστω

Ηeres an idea..

Code:
for(i=0;i<n;i++){
 for(j=0;j<m;j++){
  printf("%f",A[i][j]);
 }
printf("\n");
}


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: demP on April 15, 2008, 17:06:55 pm
παιδια γεια σας, εγω ειμαι πολυ ασχετος και δεν καταλαβαινω τιποτα σχεδον απο αυτα που λέτε, διαβαζω τις σημειωσεις του τυπου και προσπαθω να κάνω και εγω κατι.

εχω φτασει στο σημειο που συγκρινεις τους 2 πινακες και εκτυπωνει 1 πινακα με
τις κοινες συχνοτητες.
έχω φτασει εδώ.
.
.
.

Code:
for(i=0; i<x; i++)
  {
for(j=0; j<y; j++)
if (m[i]==n[j])
    {
over[i]=m[i];

printf("%d\t",over[i])

χ,y, αριθμος συχνοτητων


Το θεμα ειναι ότι αν ένας πίνακας έχει παραπάνω απο 1 συχν κοινες μου τις πεταει
και στον over.

π.χ. Α { 1, 2, 2, 3 }    Β { 5, 6, 2, 3}

ο over θα ειναι { 2, 2, 3 } <------έχει ένα 2 παραπάνω

πως θα το ξεφορτωθώ ?   


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: dimvam on April 15, 2008, 17:10:10 pm
παιδια γεια σας, εγω ειμαι πολυ ασχετος και δεν καταλαβαινω τιποτα σχεδον απο αυτα που λέτε, διαβαζω τις σημειωσεις του τυπου και προσπαθω να κάνω και εγω κατι.

εχω φτασει στο σημειο που συγκρινεις τους 2 πινακες και εκτυπωνει 1 πινακα με
τις κοινες συχνοτητες.
έχω φτασει εδώ.
.
.
.

for(i=0; i<x; i++)
  {
for(j=0; j<y; j++)
if (m==n[j])
    {
   over=m;

printf("%d\t",over)

χ,y, αριθμος συχνοτητων


Το θεμα ειναι ότι αν ένας πίνακας έχει παραπάνω απο 1 συχν κοινες μου τις πεταει
και στον over.

π.χ. Α { 1, 2, 2, 3 }    Β { 5, 6, 2, 3}

ο over θα ειναι { 2, 2, 3 } <------έχει ένα 2 παραπάνω

πως θα το ξεφορτωθώ ?   

Δες το λίγο λογικά, μην σκέφτεσαι αυστηρά προγραμματιστικά.
Ο πίνακας περιέχεις τις συχνότητες εκπομπής ενός ραδιοφωνικού σταθμού, άρα δεν έχει νόημα να είναι ένα στοιχείο ίδιο στον πίνακα.


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: portinos on April 15, 2008, 17:15:42 pm
Ναι πράγματι δεν το χρειάζομαι. Τελικά ξεκόλλησα και βρήκα κάτι πιο λογικό να κάνω. Αυτό ήταν μεγάλη χαζομάρα που ζητούσα. Anyway thanks!!!


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: sarovios on April 15, 2008, 19:55:54 pm
Εχω φαει τρελο κολλημα.Εχω τον παρακατω κωδικα και μου τυπωνει 0.0000.Οτι και να βαλω για τιμες συχνοτητων... Μπορειτε να μου πειτε τι λαθος κανω ???

Code:
#include <stdio.h>

int main()
{
    float A[50],B[50],over[50];
    int i,j,z,n,m;
   
    printf ("Dose ton aritho ton sixnotiton tis etairias A\n");
    scanf ("%d",&n);
   
    printf ("Dose ton arithmo ton sixnotiton tis etairias B\n");
    scanf ("%d",&m);
   
    for (i=0 ; i<n ; i++)
    {
        printf ("Dose tis sixnotites tis etairias A\n");
        scanf ("%f",&A[i]);
    }
   
        for (j=0 ; j<m ; j++)
        {
            printf ("Dose sixnotites tis etairias B\n");
            scanf ("%f",&B[j]);
        }
       
        z=0;
        for (i=0 ; i<n ; i++)
        {
            for (j=0 ; j<m ; j++)
            {
                if (A[i]==B[j])
                over[z]=A[i];
                z++;
            }
        }
        printf ("%f",over[z]);
        return 0;
}               


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: portinos on April 15, 2008, 20:20:55 pm
Έχω μία τελευταία απορία. Αφού καλέσω τη συνάρτηση abs βάζω, όλα τα στοιχεία που βρίσκω σε ένα καινούργιο πίνακα. Μετά βρίσκω το μικρότερο στοιχείο του πίνακα και το εκτυπώνω. Στην εκφώνηση όμως ζητάει να εκτιπώσουμε και τις συχνότητες από τις οποίες παράγεται αυτό το στοιχείο. Πως γίνεται να το κάνουμε αυτό ^confused^.


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: Goklagie on April 15, 2008, 20:34:46 pm
Έτσι εγκυκλοπαιδικά, όσων αφορά το δικό μου πρόβλημα, ρώτησα τον Κορτέση και είπε πως τα incude εκτελούνται κατά την μετάφραση, άρα δεν έχει νόημα να δώσεις δεδομένα που εισάγει ο χρήστης. ;)


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: Mendoza on April 15, 2008, 20:48:12 pm
Εχω φαει τρελο κολλημα.Εχω τον παρακατω κωδικα και μου τυπωνει 0.0000.Οτι και να βαλω για τιμες συχνοτητων... Μπορειτε να μου πειτε τι λαθος κανω ???

Code:
#include <stdio.h>

int main()
{
    float A[50],B[50],over[50];
    int i,j,z,n,m;
   
    printf ("Dose ton aritho ton sixnotiton tis etairias A\n");
    scanf ("%d",&n);
   
    printf ("Dose ton arithmo ton sixnotiton tis etairias B\n");
    scanf ("%d",&m);
   
    for (i=0 ; i<n ; i++)
    {
        printf ("Dose tis sixnotites tis etairias A\n");
        scanf ("%f",&A[i]);
    }
   
        for (j=0 ; j<m ; j++)
        {
            printf ("Dose sixnotites tis etairias B\n");
            scanf ("%f",&B[j]);
        }
       
        z=0;
        for (i=0 ; i<n ; i++)
        {
            for (j=0 ; j<m ; j++)
            {
                if (A[i]==B[j])
                over[z]=A[i];
                z++;
            }
        }
        printf ("%f",over[z]);
        return 0;
}               
Εκ πρωτης οψεως φαινεται οτι εκτυπωνεις λαθος τον πινακα

Οχι printf ( " % f ",over [ z ] );  οπως γραφεις αλλα
 
for( i = 0 ; i < z ; i + + ) {
 printf(" % f ",over[ i ] );
}

δηλαδη για να εκτυπωσεις ενα πινακα αριθμων πρεπει να εκτυπωσεις καθε μια τιμη του ξεχωριστα με ενα for


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: sarovios on April 15, 2008, 20:58:00 pm
Εχω φαει τρελο κολλημα.Εχω τον παρακατω κωδικα και μου τυπωνει 0.0000.Οτι και να βαλω για τιμες συχνοτητων... Μπορειτε να μου πειτε τι λαθος κανω ???

Code:
#include <stdio.h>

int main()
{
    float A[50],B[50],over[50];
    int i,j,z,n,m;
   
    printf ("Dose ton aritho ton sixnotiton tis etairias A\n");
    scanf ("%d",&n);
   
    printf ("Dose ton arithmo ton sixnotiton tis etairias B\n");
    scanf ("%d",&m);
   
    for (i=0 ; i<n ; i++)
    {
        printf ("Dose tis sixnotites tis etairias A\n");
        scanf ("%f",&A[i]);
    }
   
        for (j=0 ; j<m ; j++)
        {
            printf ("Dose sixnotites tis etairias B\n");
            scanf ("%f",&B[j]);
        }
       
        z=0;
        for (i=0 ; i<n ; i++)
        {
            for (j=0 ; j<m ; j++)
            {
                if (A[i]==B[j])
                over[z]=A[i];
                z++;
            }
        }
        printf ("%f",over[z]);
        return 0;
}               
Εκ πρωτης οψεως φαινεται οτι εκτυπωνεις λαθος τον πινακα

Οχι printf ( " % f ",over [ z ] );  οπως γραφεις αλλα
 
for( i = 0 ; i < z ; z + + ) {
 printf(" % f ",over[ i ] );
}

δηλαδη για να εκτυπωσεις ενα πινακα αριθμων πρεπει να εκτυπωσεις καθε μια τιμη του ξεχωριστα με ενα for


Tωρα οταν βαζω τιμες για τον Α---->2 6 9 10 και γιατον Β--->4 6 9 10 μου τυπωνει συνεχεια 0.0006.Μονο τον ενα κοινο αριθμο.
P.S.χρησιμοποιω dev c++ 5 betta


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: Wanderer on April 15, 2008, 21:04:47 pm
Μια μικρή διόρθωση για την παρατήρηση του Board Rider: έχω την εντύπωση ότι στο loop πρέπει να μπει "από 0 έως z-1", διότι στον κώδικά του ο sarovios αυξάνει στο τέλος του ελέγχου τον z (βλακεία είπα). Sarovios δίνεις ξανά τον τροποποιημένο κώδικα;

@Portinos: μπορείς να κάνεις αυτό (έστω C και D οι νέοι πίνακες):

min=abs(C[0]-D[0]);
di=0;
dj=0;

for(i=0;i<n;i++) {
  for(j=0;j<m;j++) {
    if(abs(C-D[j])<min) {
      min=abs(C-D[j]);
      di=i;
      dj=j;
    }
  }
}

Και έτσι έχεις τα στοιχεία που ζητάς.


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: sarovios on April 15, 2008, 21:09:00 pm
Αυτο που εχω γραψει ειναι:
Code:
#include <stdio.h>

int main()
{
    float A[50],B[50],over[50];
    int i,j,z,n,m;
   
    printf ("Dose ton aritho ton sixnotiton tis etairias A\n");
    scanf ("%d",&n);
   
    printf ("Dose ton arithmo ton sixnotiton tis etairias B\n");
    scanf ("%d",&m);
   
    for (i=0 ; i<n ; i++)
    {
        printf ("Dose tis sixnotites tis etairias A\n");
        scanf ("%f",&A[i]);
    }
   
        for (j=0 ; j<m ; j++)
        {
            printf ("Dose sixnotites tis etairias B\n");
            scanf ("%f",&B[j]);
        }
       
        z=0;
        for (i=0 ; i<n ; i++)
        {
            for (j=0 ; j<m ; j++)
            {
                if (A[i]==B[j])
                over[z]=A[i];
                z++;
            }
        }
        printf ("%f",over[z]);
        return 0;
}               
το το τροποπειησα και αντι του τελευταιου printf γραφω
Code:
for (i=0 ; i<z ; z++)
        {
            printf ("%f",over[i]);
        }
και δημιουργειται το προβλημα που ειπα παραπανω...


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: Wanderer on April 15, 2008, 21:21:43 pm
ντοίγκ! :D Αυξάνεις το z όχι το i το loop!

for (i=0 ; i<z ; z++)


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: sarovios on April 15, 2008, 21:25:22 pm
ντοίγκ! :D Αυξάνεις το z όχι το i το loop!

for (i=0 ; i<z ; z++)

Αυτο ακριβως γραφω αν μιλας για το τελευταιο loop...


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: Wanderer on April 15, 2008, 21:28:24 pm
Ναι αλλά εσύ θέλεις να αυξάνεται το i και όχι το z, αυτό λέω ;)

Η συνθήκη πρέπει να είναι for (i=0 ; i<z ; i++)

Για να βρίσκεις εύκολα πού κάνεις λάθος (διότι γενικά αυτά τα λαθάκια είναι λίγο δύσκολο να βρεθούν, ειδικά αν είσαι και κάπως κουρασμένος) κατ'αρχάς πιστεύω βοηθάει να σκέφτεσαι: "σε ποιό σημείο κολάει;" Αφού "κολάει" στο σημείο που τρέχεις loop με πεπερασμένες επαναλήψεις, προφανώς εκεί εντοπίζεται το λάθος. Διότι το z ό,τι λάθη και να έκανες παραπάνω, αποκλείεται να σου βγει αρνητικό, επομένως κάτι συμβαίνει με τη συνθήκη του τελευταίου βρόγχου επανάληψης.

Επίσης ένας πολύ αποτελεσματικός τρόπος είναι να χρησιμοποιείες εντολές printf(..); και getch(); σε σημεία κλειδιά του προγράμματος, για να διαπιστώσεις σε ποιό σημείο δεν τρέχει σωστά.


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: difotiad on April 15, 2008, 21:58:59 pm
Μια μικρή διόρθωση για την παρατήρηση του Board Rider: έχω την εντύπωση ότι στο loop πρέπει να μπει "από 0 έως z-1", διότι στον κώδικά του ο sarovios αυξάνει στο τέλος του ελέγχου τον z (βλακεία είπα). Sarovios δίνεις ξανά τον τροποποιημένο κώδικα;

@Portinos: μπορείς να κάνεις αυτό (έστω C και D οι νέοι πίνακες):

min=abs(C[0]-D[0]);
di=0;
dj=0;

for(i=0;i<n;i++) {
  for(j=0;j<m;j++) {
    if(abs(C-D[j])<min) {
      min=abs(C-D[j]);
      di=i;
      dj=j;
    }
  }
}

Και έτσι έχεις τα στοιχεία που ζητάς.

@wanderer: αυτα που διεγραψες ειναι το πρωτο πραγμα για το οποιο με διορθωσε ο Κορτεσης σημερα που του εδειξα σε κατι κολλες Α4 τον κωδικα που εχω γραψει.Και μου ειπε π.χ. οτι αν ο over τελικα εχει μονο ενα στοιχειο (προφανως στο over[0]) το z θα εχει γινει 1.Αλλα εχω μπερδευτει λιγο και μου φαινεται οτι κανει λαθος ο Κορτεσης


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: Wanderer on April 15, 2008, 22:13:53 pm
Αυτό που έσβησα είναι λάθος επειδή ο Board Rider γράφει:

for( i = 0 ; i < z ; i + + )

Συνεπώς με βάση αυτό επιβάλλεται να είναι αυξημένος κατα ένα ο z σε σχέση με το πλήθος των στοιχείων του πίνακα. Π.χ.: αν έχει ένα μόνο στοιχείο ο z θα είναι 1 και η συνθήκη θα τερματιστεί κανονικά στην ώρα της (αφού για i=1 θα είναι i=z, επομένως η συνθήκη θα είναι ψευδής).

Σε περίπτωση όμως που ο κώδικας ήταν for( i = 0 ; i == z ; i + + ) τότε προφανώς το z θα έπρεπε να μειωθεί κατα 1 για να τρέξει σωστά το πρόγραμμα, για να είναι ίσο με το πλήθος των στοιχείων του πίνακα.


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: fourier on April 15, 2008, 23:37:55 pm
Εχω γραψει το προγραμμα σχεδον ολοκληρο, και λειτουργει σωστα. Μου μενει μονο το τελευταιο κομματι.
Δηλαδη, εχω βρει τους νεους πινακες απ' οπου λειπουν οι κοινες συχνοτητες, και μενει η απολυτη τιμη της διαφορας, αλλα εχω κολλησει.

Κατ' αρχην, θα πρεπει να γινουν <= 50*50=2500 αφαιρεσεις και fabs απο πανω τους, ωστε να αφαιρεθει καθε πιθανη συχνοτητα του Α απο καθε πιθανη του Β. Αυτο δεν ειναι προβλημα, γινεται σε 2 γραμμες.
Το θεμα ειναι, αντε και καναμε την αφαιρεση, αντε και βρηκαμε με καποιον τροπο ποιο απο τα αποτελεσματα εχει τη μικροτερη απολυτη τιμη, μετα πώς θα βρουμε απο ποιων συναρτησεων τη διαφορα δημιουργηθηκε?

Καμια ιδεα????


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: difotiad on April 15, 2008, 23:48:05 pm
συμφωνω Wanderer.Εχω ξανα το ιδιο προβλημα με την εργασια Α,δλδ μολις δωσω τα πληθη συχνοτητων για Α και Β και στη συνεχεια την καθε μια συχνοτητα για Α και Β αντιστοιχα,κλεινει το πτραθυρο του Run.Εχω βαλει int main() και πριν την τελευταια αγκυλη που κλεινει το int main() εχω βαλει getch() και return=0.Αλλα παλι το παραθυρο χανεται στο ιδιο σημειο της εκτελεσης.Οποιος γνωριζει ας βοηθησει



Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: fourier on April 15, 2008, 23:51:52 pm
συμφωνω Wanderer.Εχω ξανα το ιδιο προβλημα με την εργασια Α,δλδ μολις δωσω τα πληθη συχνοτητων για Α και Β και στη συνεχεια την καθε μια συχνοτητα για Α και Β αντιστοιχα,κλεινει το πτραθυρο του Run.Εχω βαλει int main() και πριν την τελευταια αγκυλη που κλεινει το int main() εχω βαλει getch() και return=0.Αλλα παλι το παραθυρο χανεται στο ιδιο σημειο της εκτελεσης.Οποιος γνωριζει ας βοηθησει

Δηλωσε στην αρχη μια μεταβλητη int lala.
Στο τελος, πριν το "return 0" βαλε τις εξης σειρες:

Code:
printf("\n\nGrapse ena noumero gia na kleisei to para8yri: ");
scanf("%d",&lala);

Τωρα μολις το προγραμμα σου ολοκληρωθει, το παραθυρο δεν θα κλεισει, γιατι θα περιμενει να γραψεις ενα οποιοδηποτε νουμερο για να το αποθηκευσει στη lala
;)


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: difotiad on April 15, 2008, 23:52:33 pm
τα εβαλα αναποδα και διορθωθηκε.Για οποιον του τυχει..


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: AgentCain on April 16, 2008, 00:02:59 am

Κατ' αρχην, θα πρεπει να γινουν <= 50*50=2500 αφαιρεσεις και fabs απο πανω τους, ωστε να αφαιρεθει καθε πιθανη συχνοτητα του Α απο καθε πιθανη του Β. Αυτο δεν ειναι προβλημα, γινεται σε 2 γραμμες.
Το θεμα ειναι, αντε και καναμε την αφαιρεση, αντε και βρηκαμε με καποιον τροπο ποιο απο τα αποτελεσματα εχει τη μικροτερη απολυτη τιμη, μετα πώς θα βρουμε απο ποιων συναρτησεων τη διαφορα δημιουργηθηκε?

Κάθε φορά που θα συγκρίνεις τη διαφορά με την τελευταία ελάχιστη (για να βρεις εν τέλει την τελική ελάχιστη) θα κρατάς σε δύο μεταβλητές τη θέση των αντίστοιχων στοιχείων των πινάκων.
Μετά δεν έχεις παρά να τα εμφανίσεις χρησιμοποιώντας αυτές τις μεταβλητές.  ;)


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: ^^DaRk_HunTeR on April 16, 2008, 00:37:11 am
Θα εσκαγα αν δεν εβρισκα εναλλακτικη λυση
περα απο το εχ8ρικο προγραμμα του Πασχαλη :P
Στη Βεργινα  αποσυντονιστηκα σημερα... (ας με συγχωρεσουν οσοι ηταν παροντες)

οριστε λοιπον:


Code:
#include <stdio.h>
#include <stdlib.h>

int main(){  //o dev dexetai mono int main
    int s,i,d,j,n,m,z,t,x,k=0;
    float a[50],b[50],A[50],B[50],over[50],min,min_A,min_B;
 
   
    printf("dwse to n\n");
    scanf("%d",&n);
    printf("dwse to m\n");
    scanf("%d",&m);
    for(i=0;i<n;i++){
     printf("dwse Stoixeia tou pinaka a: \n");
     scanf("%f",&a[i]);
     }
    for(i=0;i<m;i++){
      printf("dwse Stoixeia tou pinaka b: \n");
      scanf("%f",&b[i]);
      }
    /* for(i=0;i<n;i++)
      printf("o pinakas a: %f\n",a[i]);
     
     for(i=0;i<m;i++)
     printf("o pinakas b: %f\n",b[i]);  */
     
     for (i=0;i<n;i++)
      { for (j=0;j<m;j++)
     { if (a[i]==b[j])
{over[k]=a[i];
k++;
break;}
       }
   }
  printf("oi koines suxnothtes einai:\n");
  for (i=0;i<k;i++)
    printf("%f \n",over[i]);
   
 
  s=d=0;
  for (i=0;i<n;i++)
     {for (j=0;j<k;j++)
       {if(a[i]==over[j])
          s++;   
      }
     if(s==0){
       A[d]=a[i];
       d++;
      }
     else{
         s=0;
      }
   }         
  printf("o neos pinakas tou stathmou a apoteleitai apo ta stoixeia:\n");
  for (i=0;i<d;i++)
   printf ("%f \n",A[i]);
   
   t=x=0;
  for (i=0;i<m;i++)
     {for (j=0;j<k;j++)
       {if(b[i]==over[j])
         t++;
         }
        if(t==0){
          B[x]=b[i];
          x++;
        }
        else{
        t=0;
        }           
   }         
  printf("o neos pinakas tou stathmou b apoteleitai apo ta stoixeia:\n");
  for (i=0;i<x;i++)
   printf ("%f \n",B[i]);
   
  min=abs(A[0]-B[0]); // arxikopoiw ena min gia na mporesei na ektelestei toul mia fora h sugkrish
  min_A=A[0];
  min_B=B[0];
  for(i=0;i<d;i++){
    for(j=0;j<x;j++){
       if(abs(A[i]-B[j])<min)
       { min=abs(A[i]-B[j]);
       min_A=A[i];
       min_B=B[j];
       }
     }
   }   
  printf("h suxnothta tou pinaka A pou elaxistopoiei thn diafora fa-fb einai h: %f\n",min_A);
  printf("h suxnothta tou pinaka B pou elaxistopoiei thn diafora fa-fb einai h: %f\n",min_B);                   
   
  scanf("%d",&z); //gia na mhn me petaei sthn ektelesh
}                     

Δοκιμασα τα νουμερα α0=1 α1=2 α2=8 α3=5
                              b0=1 b1=4 b2=2

Και a0=1 a1=8 a2=25 a3=5
     b0=1 b1=4 b2=20 b3=5

και εδωσε τα αναμενομενα σωστα αποτελεσματα...

(δεν εκανα ελεγχο για το εως 50 γιατι βαριεμαι και δεν εχει και πολυ νοημα ενιγουει)


[P.S]: δεν υπαρχει (c)  ;)


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: difotiad on April 16, 2008, 00:58:24 am
Θα εσκαγα αν δεν εβρισκα εναλλακτικη λυση
περα απο το εχ8ρικο προγραμμα του Πασχαλη :P
Στη Βεργινα  αποσυντονιστηκα σημερα... (ας με συγχωρεσουν οσοι ηταν παροντες)

οριστε λοιπον:


Code:
#include <stdio.h>
#include <stdlib.h>

int main(){  //o dev dexetai mono int main
    int s,i,d,j,n,m,z,t,x,k=0;
    float a[50],b[50],A[50],B[50],over[50],min,min_A,min_B;
 
   
    printf("dwse to n\n");
    scanf("%d",&n);
    printf("dwse to m\n");
    scanf("%d",&m);
    for(i=0;i<n;i++){
     printf("dwse Stoixeia tou pinaka a: \n");
     scanf("%f",&a[i]);
     }
    for(i=0;i<m;i++){
      printf("dwse Stoixeia tou pinaka b: \n");
      scanf("%f",&b[i]);
      }
    /* for(i=0;i<n;i++)
      printf("o pinakas a: %f\n",a[i]);
     
     for(i=0;i<m;i++)
     printf("o pinakas b: %f\n",b[i]);  */
     
     for (i=0;i<n;i++)
      { for (j=0;j<m;j++)
     { if (a[i]==b[j])
{over[k]=a[i];
k++;
break;}
       }
   }
  printf("oi koines suxnothtes einai:\n");
  for (i=0;i<k;i++)
    printf("%f \n",over[i]);
   
 
  s=d=0;
  for (i=0;i<n;i++)
     {for (j=0;j<k;j++)
       {if(a[i]==over[j])
          s++;   
      }
     if(s==0){
       A[d]=a[i];
       d++;
      }
     else{
         s=0;
      }
   }         
  printf("o neos pinakas tou stathmou a apoteleitai apo ta stoixeia:\n");
  for (i=0;i<d;i++)
   printf ("%f \n",A[i]);
   
   t=x=0;
  for (i=0;i<m;i++)
     {for (j=0;j<k;j++)
       {if(b[i]==over[j])
         t++;
         }
        if(t==0){
          B[x]=b[i];
          x++;
        }
        else{
        t=0;
        }           
   }         
  printf("o neos pinakas tou stathmou b apoteleitai apo ta stoixeia:\n");
  for (i=0;i<x;i++)
   printf ("%f \n",B[i]);
   
  min=abs(A[0]-B[0]); // arxikopoiw ena min gia na mporesei na ektelestei toul mia fora h sugkrish
  min_A=A[0];
  min_B=B[0];
  for(i=0;i<d;i++){
    for(j=0;j<x;j++){
       if(abs(A[i]-B[j])<min)
       { min=abs(A[i]-B[j]);
       min_A=A[i];
       min_B=B[j];
       }
     }
   }   
  printf("h suxnothta tou pinaka A pou elaxistopoiei thn diafora fa-fb einai h: %f\n",min_A);
  printf("h suxnothta tou pinaka B pou elaxistopoiei thn diafora fa-fb einai h: %f\n",min_B);                   
   
  scanf("%d",&z); //gia na mhn me petaei sthn ektelesh
}                     

Δοκιμασα τα νουμερα α0=1 α1=2 α2=8 α3=5
                              b0=1 b1=4 b2=2

Και a0=1 a1=8 a2=25 a3=5
     b0=1 b1=4 b2=20 b3=5

και εδωσε τα αναμενομενα σωστα αποτελεσματα...

(δεν εκανα ελεγχο για το εως 50 γιατι βαριεμαι και δεν εχει και πολυ νοημα ενιγουει)


[P.S]: δεν υπαρχει (c)  ;)


φαινονται ολα οκ,απλα εχω μια απορια που προεκυψε απο τον δικο μου κωδικα.Εφοσον η διαφορα a1-b0 ειναι ιδια με  a3-b1 ποιες συχνοτητες θα εμφανιζονται ως αυτες που ελαχιστοποιουν τη διαφορα?


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: ^^DaRk_HunTeR on April 16, 2008, 01:25:51 am
τρεξ' το και δες....

βαζοντας εγω ao=1 a1=2 a2=5 a3=4
                   b0=1 b1=3 b2=6 b3=2

μου εμφανιζει το 5 και το 6  (με δικα του κριτηρια υποθετω :P) αντι του 3 και 4
μπορεις να αλλαξεις ευκολα το προγραμματακι ωστε να σου εμφανιζει ολες τις περιπτωσεις με ιδια διαφορα...
διαλεξε και παρε...


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: dimvam on April 16, 2008, 02:26:57 am
φαινονται ολα οκ,απλα εχω μια απορια που προεκυψε απο τον δικο μου κωδικα.Εφοσον η διαφορα a1-b0 ειναι ιδια με  a3-b1 ποιες συχνοτητες θα εμφανιζονται ως αυτες που ελαχιστοποιουν τη διαφορα?

Ανάλογα πως γράφεις το πρόγραμμα, με  = ή όχι στο if(...<min) ή if(...<=min).
Αν βάζεις, θα σου βγάλει το τελευταίο κατά σειρά, αλλιώς αυτό που προηγείται.
Με μια μικρή παραλλαγή μπορείς να τροποποιήσεις το πρόγραμμα να βγάζει όλες τις συχνότητες, αλλά δεν ξέρω αν αξίζει τέτοια ώρα!


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: difotiad on April 16, 2008, 02:31:56 am
mallon oxi ;)


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: Emfanever on April 16, 2008, 05:00:11 am
Μια μικρή διόρθωση για την παρατήρηση του Board Rider: έχω την εντύπωση ότι στο loop πρέπει να μπει "από 0 έως z-1", διότι στον κώδικά του ο sarovios αυξάνει στο τέλος του ελέγχου τον z (βλακεία είπα). Sarovios δίνεις ξανά τον τροποποιημένο κώδικα;





@wanderer: αυτα που διεγραψες ειναι το πρωτο πραγμα για το οποιο με διορθωσε ο Κορτεσης σημερα που του εδειξα σε κατι κολλες Α4 τον κωδικα που εχω γραψει.Και μου ειπε π.χ. οτι αν ο over τελικα εχει μονο ενα στοιχειο (προφανως στο over[0]) το z θα εχει γινει 1.Αλλα εχω μπερδευτει λιγο και μου φαινεται οτι κανει λαθος ο Κορτεσης
Σωστά σου είπε  ο Κορτέσης. Δες τον κώδικα που υπολογίζει τον over:


z=0;
        for (i=0 ; i<n ; i++)
        {
            for (j=0 ; j<m ; j++)
           
                if (A[ι]==B[j])
                {    over[z]=A[ι];
                     z++;
                }           
        }

Αρχικά το z είναι μηδέν. Άρα ,αν υποθέσουμε ότι ο over  έχει μόνο ένα στοιχείο τότε θα ισχύσει μόνο μια φορά το if  με αποτέλεσμα :

1. Να αποθηκευτεί η τιμή αυτή στη θέση over[0];
2.Να εκτελεστεί η εντολή z++ ; ,αφού και αυτή ανήκει μέσα στο if. Άρα το z από 0 θα γίνει -> 1. Βέβαια στο over[1] δεν αποθηκεύεται ποτέ τίποτα αφού υποθέσαμε ότι υπάρχει ένα μόνο κοινό στοιχείο.

Γιαυτό βάζουμε κατά την εκτύπωση του over
for (i=0;i<z;i++) ,δλδ στο παράδειγμά μας θα είναι  (i=0;i<1;i++) ,για να εκτυπωθεί μόνο το over[0].

Το ίδιο γίνεται και όταν αποθηκεύονται περισσότερα στοιχεία στον over.


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: Emfanever on April 16, 2008, 05:17:22 am
Αυτο που εχω γραψει ειναι:
#include <stdio.h>

int main()
{
    float A[50],B[50],over[50];
    int i,j,z,n,m;
   
    printf ("Dose ton aritho ton sixnotiton tis etairias A\n");
    scanf ("%d",&n);
   
    printf ("Dose ton arithmo ton sixnotiton tis etairias B\n");
    scanf ("%d",&m);
   
    for (i=0 ; i<n ; i++)
    {
        printf ("Dose tis sixnotites tis etairias A\n");
        scanf ("%f",&A);
    }
   
        for (j=0 ; j<m ; j++)
        {
            printf ("Dose sixnotites tis etairias B\n");
            scanf ("%f",&B[j]);
        }
       
        z=0;
        for (i=0 ; i<n ; i++)
        {
            for (j=0 ; j<m ; j++)
            {
                if (A==B[j])
                over[z]=A;
                z++;

            }
        }
        printf ("%f",over[z]);
        return 0;
}               
το το τροποπειησα και αντι του τελευταιου printf γραφω

for (i=0 ; i<z ; z++)
        {
            printf("%f",over[ι])
        }
και δημιουργειται το προβλημα που ειπα παραπανω...

1.Πρέπει το z++ να είναι μέσα στο if δηλάδή πρέπει να βάλεις άγκιστρα:

  if (A[ι]==B[j])
   {             over[z]=A[ι];
                z++;
   }

2. και επίσης όπως προαναφέρθηκε γράφεις:
for (i=0;i<z;i++)
     printf ("%f",over[ι]);

Μπορείς όμως να αποφύγεις αυτό το for γράφοντας μέσα στο if:

  if (A[ι]==B[j])
   {             over[z]=A;
                 printf("%f\n",over[z]);
                 z++;
   }


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: demP on April 16, 2008, 08:18:58 am
Aς πουμε εχω αυτο εδώ που ζητάω να βαλει τιμες στους πινακες...


Code:
 printf("dwse to n\n");
 scanf("%d",&n);
 printf("dwse to m\n");
 scanf("%d",&m);

 for(i=0;i<n;i++)
     {
     printf("dwse Stoixeia tou pinaka a: \n");
     scanf("%f",&a[i]);
     }
    for(i=0;i<m;i++)
    {
      printf("dwse Stoixeia tou pinaka b: \n");
      scanf("%f",&b[i]);
    }

Θελω να βαλω ενα όριο σε περιπτωση που βαλει καποιος >50 τιμών **

κατι τετοιο ας πουμε..

if ((x>50)||(y>50))
{
   printf("megalo arithmo sixnotitvn\n");
goto a;

Αν θελω να αποφυγω το goto στον code που έδωσα,
πως αλλιως μπορω να το κανω ?
καμια ιδεα?

Προσπαθησα με συνδιασμο while / break; αλλα δεν τα καταφερα.


** Θέλω να παρω καμια ιδεα κυριως να μπω στο νοημα
οκ μπορω με μια printf να του γραψω δωσε μεχρι 50, αλλα
δεν ειναι εκει το θεμα.


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: portinos on April 16, 2008, 10:56:59 am
Καλημέρα. Μπορεί κάποιος να μου πει τι λογικό σφάλμα έχει αυτό το κομμάτι κώδικα γιατί στην εκτέλεση με πετάει έξω ένω στο compilation και το debugging δε μου βγάζει τίποτα. Έχω κουραστεί τόσο που τώρα δε μπορώ να το βρω
g=0;
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            if(A==B[j])
            {
                over[g]=A;
                g++;
            }         
            else
            {
                A=C[k];
                B=D[l];
            }
        }           
    }
    printf("O pinakas over periexei tis koines syxnotites\n");
    for(i=0;i<g;i++)
    printf("%f\n",over);
    printf("O pinakas C periexei tis mi koines syxnotites tou A.\n");
    for(i=0;i<k;i++)
    printf("%f\n",C);
    printf("O pinakas D periexei tis mi koines syxnotitestou B.\n");
    for(i=0;i<l;i++)
    printf("%f\n",D);


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: stefos on April 16, 2008, 11:46:01 am

Θελω να βαλω ενα όριο σε περιπτωση που βαλει καποιος >50 τιμών **

κατι τετοιο ας πουμε..

if ((x>50)||(y>50))
{
   printf("megalo arithmo sixnotitvn\n");
goto a;

Αν θελω να αποφυγω το goto στον code που έδωσα,
πως αλλιως μπορω να το κανω ?
καμια ιδεα?

Προσπαθησα με συνδιασμο while / break; αλλα δεν τα καταφερα.


** Θέλω να παρω καμια ιδεα κυριως να μπω στο νοημα
οκ μπορω με μια printf να του γραψω δωσε μεχρι 50, αλλα
δεν ειναι εκει το θεμα.

Μπορείς με ένα loop
do{

}
while(x<0)||(x>50)
να ζητάς μέσα σ'αυτό να σου δώσει τον αριθμό συχνοτήτων μέχρις ότου να σου δώσει αριθμό μέχρι 50.


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: Wanderer on April 16, 2008, 13:07:56 pm
@demP: Με while/break:

printf("Megisto: 50 theseis\n";
p1=-1;
int check=0;
while(p1<49) {
  printf("Dose %d stoixeio of table A\n",p1+1);
  scanf("%d",A[p1+1]);
  p1++;
  if(p1==49) {
    printf("Oles oi thesis gemisan. Pieste ena pliktro gia synexeia\n";
    getch();
    break;
  }
  printf("Press '1' to give another stoixeio\n");
  check=getch();
  if(check!=1) break;
}


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: TED on April 16, 2008, 13:45:56 pm
Μπορείτε να βάζετε αντί για scanf() στο τέλος του προγράμματος την εντολή system("pause");
Είναι πολύ πιό κυμπάρικο :)
(από τη Βάσσω το πρωτοάκουσα αυτό :):))


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: TED on April 16, 2008, 13:48:43 pm
  printf("Press '1' to give another stoixeio\n");

χαχαχαα! press 1 to give another στοιχείο :):):)


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: ^^DaRk_HunTeR on April 16, 2008, 13:51:45 pm
Μπορείτε να βάζετε αντί για scanf() στο τέλος του προγράμματος την εντολή system("pause");
Είναι πολύ πιό κυμπάρικο :)
(από τη Βάσσω το πρωτοάκουσα αυτό :):))
;D :D ;D :D ;D :D ;D :D

Αυτη η Βασω πια ολους τους διδασκει :P


file->new project-> console application (ok->save)
oh magic...


[P.S]: προτιμω το scanf re...  και το s++



Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: Emfanever on April 16, 2008, 14:44:51 pm
Καλημέρα. Μπορεί κάποιος να μου πει τι λογικό σφάλμα έχει αυτό το κομμάτι κώδικα γιατί στην εκτέλεση με πετάει έξω ένω στο compilation και το debugging δε μου βγάζει τίποτα. Έχω κουραστεί τόσο που τώρα δε μπορώ να το βρω
g=0;
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            if(A==B[j])
            {
                over[g]=A;
                g++;
            }         
            else
            {
                A=C[k];
                B=D[l];

            }
        }           
    }
    printf("O pinakas over periexei tis koines syxnotites\n");
    for(i=0;i<g;i++)
    printf("%f\n",over);
    printf("O pinakas C periexei tis mi koines syxnotites tou A.\n");
    for(i=0;i<k;i++)
    printf("%f\n",C);
    printf("O pinakas D periexei tis mi koines syxnotitestou B.\n");
    for(i=0;i<l;i++)
    printf("%f\n",D);

Το κ και l τι είναι? Τα έχεις μηδενίσει?Και δεν έχεις βάλει μετρητή γι'αυτά τα δύο. Αλλά και πάλι είναι λάθος νομίζω να το κάνεις έτσι γιατί θα αποθηκεύσει τα ίδια στοιχεία περισσότερες από μια φορές.


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: Larry_Flynt on April 16, 2008, 15:16:23 pm
1. Αν του δώσω μια συχνότητα π.χ. 101.7 μου το κάνει 101.699997 ή κάτι τέτοιο, το γαμημένο. Αυτά αποθηκεύονται σαν float... δεν έχει την απαιτούμενη ακρίβεια ο float;

2. Για το τελικό κομμάτι του κώδικα η abs νομίζω πως μου πετάει ακέραιο. Και για να γίνω πιο σαφής:

Έστω πως ο σταθμός Α έχει δώσει τις συχνότητες 100.00 και 102.10 και ο δεύτερος την 101.00.

Εαν ο πρώτος έδινε τις 100 και 102 και ο  δεύτερος την 101 τότε το πρόγραμμά μου δίνει σαν τελική απάντηση πως οι συχνότητες με τη μικρότερη διαφορά είναι οι 100 - 101 και 102 - 101, καθώς η 101 απέχει εξίσου απο τις 100 και 102.

Ας επανέλθω όμως στις παραπάνω συχνότητες, τις 100, 102.10 και 101. Εδώ θα έπρεπε να μου δίνει μόνο το ζεύγος 100 - 101, αλλά μου δίνει και το 102,2 - 101... το γαμημένο. Μάλλον το 0.1 παραπάνω το εξαφανίζει.

Καμια ιδέα;


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: python on April 16, 2008, 17:06:59 pm
1. Αν του δώσω μια συχνότητα π.χ. 101.7 μου το κάνει 101.699997 ή κάτι τέτοιο, το γαμημένο

2. Για το τελικό κομμάτι του κώδικα η abs νομίζω πως μου πετάει ακέραιο.

1. γράψε π.χ   printf("%4.2f ",x)    για να εκτυπώσει 2 δεκαδικά ψηφία και 4 ψηφία ακέραιο μέρος

2. fabs()   για να παίρνεις διαφορά τύπου float


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: Larry_Flynt on April 16, 2008, 17:14:56 pm
2/2

Ευχαριστώ πολύ!

Να σημειώσω πως η fabs θέλει include το math.h


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: adianohtos on April 16, 2008, 19:37:14 pm
Παιδια στο compile βγαζει σχεδον σε ολες τις loop μου error "statment missing" και σε καποια αλλα σημεια warnings "code has no effect" !! Κυριως οσον αναφορα το 1ο ξερει κανεις τι μπορει να εννοει??


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: MonteCristo on April 16, 2008, 19:46:02 pm
Αν δεν γράψεις το κομμάτι του κώδικα που σου βγάζει σφάλμα (ή καλύτερα όλο τον κώδικα), δύσκολα θα βρεθεί το πρόβλημα... :)


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: adianohtos on April 16, 2008, 19:59:42 pm
Ναι σωστο και αυτο  :D οριστε!
Code:
#include <stdio.h>
#include <stdlib.h>

int main(){
    int m,n,i,j,k,d,q,z,e;
    float a[50],b[50],C[50],D[50],over[50],min,mina,minb;
   
    printf("dwse to n\n");
    scanf("%f",&n);
    printf("dwse to m\n");
    scanf("%f",&m);
   
    for(i=0;i<=n;i++){
     printf("katethese ti syxnotita tou stathmou A\n");
     scanf("%f",&a[i]);
    }
    for(i=0;i<=m;i++){
      printf("katethese ti syxnotita tou stathmou B\n");
      scanf("%f",&b[i]);
    }   

    d=e=k=z=D[0]=0
    for(i=0;i<=n;i++){
        for(j=0;j<=m;j++){
            if(a[i]==b[j]){
            over[k]=a[i];
            k++;
            d=1;
            }
            else{
                for(q=0;q<=z;q++){
                if(D[z]!=b[j]){
                D[z]=b[j];
                z++;
                }   
            }   
           }
        }
        if(d=0){
            C[e]=a[i];
            e++;
            d=0;
        }   
    }
    printf("Oi koines syxnotites einai:\n")
    for(i=0;i<=k;i++){
        printf("%f\n",over[i])}
    printf("O neow pinakas tou stathmou A\n")
    for(i=0;i<=e;i++){
        printf("%f\n",C[i])}
    printf("O neos pinakas tou stathmou B\n")
    for(i=0;i<=z;i++){
        printf("%f\n",D[i])}
       
    min=abs(C[0]-D[0]);
    mina=C[0];
    minb=D[0];
    for(i=0;i<e;i++){
        for(j=0;j<z;j++){
            if(abs(C[i]-D[j])<min){
                min=abs(C[i]-D[j]);
                mina=C[i];
                minb=D[j];
            }
        }
    }
    printf("Oi syxnotites twn stathmwn A kai B gia tis opoies i diafora |fa-fb| einai i elaxisti einai oi antistoixes times: %f",mina);
    printf("kai %f",minb);
}   


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: sarovios on April 16, 2008, 20:06:01 pm
Θα ηταν σωστο αν στο κομματι που θελουμε να τυπωσουμε τους νεους Α,Β να λεγαμε if A!=B[j]  σε ενα  loop και μετα να τους τυπωναμε? Βασικα με ενδιαφερει το != αν ειναι σωστο


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: screambloodygore on April 16, 2008, 20:13:51 pm
ξέρει κανείς στα σίγουρα αν υπάρχει κάποιο πρόβλημα με το να ανεβάσω μια διορθωμένη εργασία ή θα καταχωρηθεί σαν δυο εργασίες.γιατί στη σελίδα λέει πως θα ακυρώνονται οι διπλές εργασίες.??????


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: Larry_Flynt on April 16, 2008, 20:16:56 pm
Τελικά δεν πρέπει να το κάνουμε με pointers?????



Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: adianohtos on April 16, 2008, 20:21:59 pm
Αν επρεπε θα το ζητουσε κιολας!!  :P


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: Larry_Flynt on April 16, 2008, 20:27:56 pm
Ναι σωστο και αυτο  :D οριστε!
Code:
#include <stdio.h>
#include <stdlib.h>

int main(){
    int m,n,i,j,k,d,q,z,e;
    float a[50],b[50],C[50],D[50],over[50],min,mina,minb;
   
    printf("dwse to n\n");
    scanf("%f",&n);
    printf("dwse to m\n");
    scanf("%f",&m);
   
   [b] for(i=0;i<=n;i++){[/b]
     printf("katethese ti syxnotita tou stathmou A\n");
     scanf("%f",&a[i]);
    }
    [b]for(i=0;i<=m;i++){[/b]
      printf("katethese ti syxnotita tou stathmou B\n");
      scanf("%f",&b[i]);
    }   

    d=e=k=z=D[0]=0
    for(i=0;i<=n;i++){
        for(j=0;j<=m;j++){
            if(a[i]==b[j]){
            over[k]=a[i];
            k++;
            d=1;
            }
            else{
                for(q=0;q<=z;q++){
                if(D[z]!=b[j]){
                D[z]=b[j];
                z++;
                }   
            }   
           }
        }
        if(d=0){
            C[e]=a[i];
            e++;
            d=0;
        }   
    }
    printf("Oi koines syxnotites einai:\n")
    for(i=0;i<=k;i++){
        printf("%f\n",over[i])}
    printf("O neow pinakas tou stathmou A\n")
    for(i=0;i<=e;i++){
        printf("%f\n",C[i])}
    printf("O neos pinakas tou stathmou B\n")
    for(i=0;i<=z;i++){
        printf("%f\n",D[i])}
       
    min=abs(C[0]-D[0]);
    mina=C[0];
    minb=D[0];
    for(i=0;i<e;i++){
        for(j=0;j<z;j++){
            if(abs(C[i]-D[j])<min){
                min=abs(C[i]-D[j]);
                mina=C[i];
                minb=D[j];
            }
        }
    }
    printf("Oi syxnotites twn stathmwn A kai B gia tis opoies i diafora |fa-fb| einai i elaxisti einai oi antistoixes times: %f",mina);
    printf("kai %f",minb);
}   

Εκτελείς τις loopες 1 φορά παραπάνω. Βγάλε το <= και κάντο <


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: adianohtos on April 16, 2008, 20:32:43 pm
Δεν νομιζω να φταιει αυτο, το διορθωσα και παλι το ιδιο μου βγαζει   :(  help!!!

 ^beg^


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: ^^DaRk_HunTeR on April 16, 2008, 21:52:43 pm

Code:
    d=e=k=z=D[0]=0
    for(i=0;i<=n;i++){
        for(j=0;j<=m;j++){
            if(a[i]==b[j]){
            over[k]=a[i];
            k++;
            d=1;
            }
            else{
                for(q=0;q<=z;q++){
                if(D[z]!=b[j]){
                D[z]=b[j];
                z++;
                }   
            }   
           }
        }
        if(d=0){
            C[e]=a[i];
            e++;
            d=0;
        }   
    }
 
Εκτος απο τα λογικα λα8η που δεν ειναι λιγα,εχεις λα8η και στη συνταξη του προγραμματος...

Για παραδειγμα βαζεις στο 3ο λουπ εως z, ναι ομως ποσο ειναι το z οεο??(αν ειναι μηδεν που απο οτι φαινεται τοσο ειναι δεν εχει νοημα το φορ  που ουτως η αλλως και να ετρεχε ως καποιο σημειο θα γεμιζε τον πινακα με λα8ος στοιχεια...)

Περα απο αυτα τα απλα...
αυτο το κομματι ειναι λα8ος ολο μετα την ευρεση του οβερ...
Θα σου προτεινω,γιατι η αναλυση απο το φορουμ ειναι εν γενει δυσκολη,να κοιταξεις το αντιστοιχο κομματι του κωδικα μου και αν δεν το καταλαβεις προσπα8ησε να ξαναγραψεις με αλλον τροπο μονο το συγκεκριμενο...

Κατα τα αλλα το υπολοιπο προγραμμα(που δεν εχω κοουταρει) σωστο μου φαινεται


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: adianohtos on April 16, 2008, 22:04:25 pm
Το Ζ ξεκιναει 0 και καθε φορα που μπαινει μεσα στη for αυξανεται κατα ενα. Τεσπα, εμενα μου βγαζει προβλημα σε πολλες for και συγκεκριμενα βγαζει statement missing. Ας πουμε αναφερεται στην πρωτη for του κοματιου που εχεις στο post σου!!!
Τη δικια σου την εχω δει τα min απο σενα τα ψιλοπηρα βαριομουν να τα κανω!  :P Στα αλλα επιγκεντρωθηκα..


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: demP on April 16, 2008, 22:05:55 pm
Για το θεμα "Πως θα περιορισω τον χρηστη να μην δωσει απο 50 τιμες....

@ stefos
@ Wanderer
σας ευχαριστω πολυ προσπαθω να το ενσωματωσω στο δικο μου  :)

Βλέπω πολλους να βαζουν break στον έλεγχο των  πινακων για τον over.
 
Code:
for (i=0; i<n; i++)
   {
      for (j=0; j<m; j++)
     {

     if (a[i]==b[j])

{over[k]=a[i];       
k++;
break;
}
     }
   }

H break εδω, ετσι όπως το βλέπω εγώ, δεν αποσκοπει καπου.
Αφου έτσι κι αλλιώς με τις δυο for θα ελεγχθουν όλα τα στοιχεια
των πινακων, θα γινει ο οver και μετα θα φυγει απο το loops,

Δεν θα κερδισουμε χρονο απο καπου έτσι δεν ειναι?


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: fourier on April 16, 2008, 22:16:51 pm
Η διορια ληγει σε λιγες ωρες, οποτε ανεβαζω την εργασια μου, οπως την εστειλα πριν λιγο:

Code:
#include <stdio.h>
#include <math.h>

int main(void){

int i, j, k, n, m, mini, minj;
float A[50], B[50], OVER[50], A_NEW[50], B_NEW[50];
float mindiff, temp;


/* 8ETOUME WS DEFAULT THN TIMH MHDEN GIA OLA TA KELIA TWN PINAKWN. STH SYNEXEIA 8A DWSOUME
TIMES DIAFORES TOU MHDEN SE OSA KELIA 8ELOUME */


for (i=0; i<50; i++) {
A[i]=0;
B[i]=0;
A_NEW[i]=0;
B_NEW[i]=0;
OVER[i]=0;
}


/* AKOLOU8EI H EISAGWGH TWN SYXNOTHTWN KAI H ANTIKATASTASH TWN MHDENIKWN.
H ANTIKATASTASH STAMATAEI MOLIS DW8EI GIA PRWTH FORA MHDENIKH SYXNOTHTA,
OPOTE OLES OI EPOMENES PARAMENOUN MHDENIKES */

printf("\nSyxnothtes radiofwnikou sta8mou A: \n");
n=0;
for (i=1; i<=50; i++) {
printf("Eisagete thn %dh syxnothta tou A sta8mou: ",i);
scanf("%f",&A[i-1]);
if (A[i-1]==0) {
break;
}
n++;
}

printf("\nSyxnothtes radiofwnikou sta8mou B: \n");
m=0;
for (j=1; j<=50; j++) {
printf("Eisagete thn %dh syxnothta tou B sta8mou: ",j);
scanf("%f",&B[j-1]);
if (B[j-1]==0) {
break;
}
m++;
}
printf("\nO sta8mos A kate8ese %d syxnothtes.",n);
printf("\nO sta8mos B kate8ese %d syxnothtes.",m);


/* AKOLOU8EI H SYGKRISH TWN PINAKWN, H ANTIGRAFH TWN KOINWN SYXNOTHTWN STON PINAKA "OVER"
KAI H EKTYPWSH TOU. */

for (i=0; i<50; i++) {
for (j=0; j<50; j++) {
if (A[i]==B[j]) {
OVER[i]=A[i];
}
}
}

printf("\n\nOi koines syxnothtes twn dyo sta8mwn einai:\n");
for (k=0; k<50; k++) {
if(OVER[k]!=0) {
printf("  %4.1f  |",OVER[k]);
}
}

/* DINOUME STOUS PINAKES "A_NEW" KAI "B_NEW" TIS IDIES TIMES ME TOUS "A" KAI "B" ANTISTOIXA */

for (i=0; i<50; i++) {
A_NEW[i]=A[i];
B_NEW[i]=B[i];
}


/* H SYGKRISH TWN PINAKWN EPANALAMBANETAI, AFTH TH FORA OMWS ANTISTROFA:
OI PINAKES "A" KAI "B" SYGKRINONTAI ME TON "OVER", O OPOIOS PERIEXEI TIS KOINES SYXNOTHTES.
KA8E FORA POU ENTOPIZETAI KOINH TIMH METAKSY "A" KAI "OVER", MHDENIZOUME THN ANTISTOIXH
STON "A_NEW", KAI OMOIWS GIA TON "B" KAI TON "B_NEW" */

for (i=0; i<50; i++) {
for (k=0; k<50; k++) {
if (A[i]==OVER[k]) {
A_NEW[i]=0;
}
}
}

for (j=0; j<50; j++) {
for (k=0; k<50; k++) {
if (B[j]==OVER[k]) {
B_NEW[j]=0;
}
}
}


/* AKOLOU8EI H EKTYPWSH TWN TELIKWN PINAKWN.
H DIAMORFWSH TOU PROGRAMMATOS GINETAI ETSI WSTE SE OLES TIS PERIPTWSEIS NA
EKTYPWNONTAI MONO OI MH MHDENIKES SYXNOTHTES. */


printf("\n\nOi telikes syxnothtes tou sta8mou A, xwris tis koines, einai: \n");
for (i=0; i<50; i++) {
if (A_NEW[i]!=0) {
printf("  %4.1f  |",A_NEW[i]);
}
}
printf("\nOi telikes syxnothtes tou sta8mou B, xwris tis koines, einai: \n");
for (j=0; j<50; j++) {
if (B_NEW[j]!=0) {
printf("  %4.1f  |",B_NEW[j]);
}
}
 

/* AKOLOU8EI H SYGKRISH TWN NEWN SYXNOTHTWN GIA NA BRE8OUN AFTES, H APOLYTH TIMH
THS DIAFORAS TWN OPOIWN EINAI H MIKROTERH DYNATH.
8ETOUME ARXIKA WS ELAXISTH KAT' APOLYTH TIMH DIAFORA TON ARI8MO 999999, 8EWRWNTAS PWS EINAI ARKETA
MEGALOS WSTE NA MHN DHMHIOURGH8EI PROBLHMA STH SYGKRISH,,
KAI META TH SYGKRINOUME ME OLES TIS PI8ANES AFAIRESEIS. */

mindiff=999999;
mini=0;
minj=0;

for (i=0; i<50; i++) {
for (j=0; j<50; j++) {
if (A_NEW[i]!=0 && B_NEW[j]!=0) {
temp=fabs(A_NEW[i]-B_NEW[j]);
if (temp<mindiff) {
mindiff=temp;
mini=i;
minj=j;
}
}
}
}

printf("\n\nH elaxisth kat' apolyth timh diafora meta3y syxnothtwn twn dyo sta8mwn einai: %4.2f",mindiff);
printf("\nkai emfanizetai gia tis syxnothtes: fA = %4.1f kai fB = %4.1f\n\n",A_NEW[mini],B_NEW[minj]);

printf("\nTelos programmatos!\n\n");

return 0;
}


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: Emfanever on April 16, 2008, 22:36:52 pm
Παιδια στο compile βγαζει σχεδον σε ολες τις loop μου error "statment missing" και σε καποια αλλα σημεια warnings "code has no effect" !! Κυριως οσον αναφορα το 1ο ξερει κανεις τι μπορει να εννοει??

Αυτό το error το βγάζει ως συνήθως όταν ξεχνάς το ερωτηματικό ; ή κανένα άγκιστρο {  .Βεβαιώσου ότι τα έχεις σωστά.


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: ^^DaRk_HunTeR on April 16, 2008, 22:43:40 pm
@adianohtos
ρε φιλε τι κα8ομαστε και λεμε τοση ωρα....

βαλε κανα ερωτηματικο σε κανα printf :P
που να τρεξει ετσι το προγραμμα

Τεσπα την παλευω και γω... utr


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: portinos on April 16, 2008, 22:49:17 pm
Τελείωσα. Την έστειλα  ^wav^. Πάντως μια βόλτα στην παραλία σε φυσήξει το αεράκι είναι ο καλύτερος τρόπος να ξεκαθαρίσει το κεφάλι σου. Πήγα το απόγευμα και τώρα που γύρισα τα κατάφερα με τη πρώτη να την κάνω να τρέξει σωστά


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: ^^DaRk_HunTeR on April 16, 2008, 22:49:30 pm
Code:
#include <stdio.h>
#include <stdlib.h>

int main(){
    int m,n,i,j,k,d,q,z,e,x;
    float a[50],b[50],C[50],D[50],over[50],min,mina,minb;
   
    printf("dwse to n\n");
    scanf("%f",&n);
    printf("dwse to m\n");
    scanf("%f",&m);
   
    for(i=0;i<n;i++){
     printf("katethese ti syxnotita tou stathmou A\n");
     scanf("%f",&a[i]);
    }
    for(i=0;i<m;i++){
      printf("katethese ti syxnotita tou stathmou B\n");
      scanf("%f",&b[i]);
    }   

    d=e=k=z=0;
    for(i=0;i<n;i++){
        for(j=0;j<m;j++){
           
            if(a[i]==b[j]){
            over[k]=a[i];
            k++;
            d=1;}
  }
         }
    for(i=0;i<k;i++){
for(j=0;j<m;j++){
             
              if(over[i]!=b[j]){
                D[z]=b[j];
                z++;}
         }   
               
             
               
        if(d=0){
            C[e]=a[i];
            e++;
            d=0;}
       
    }
    printf("Oi koines syxnotites einai:\n");
    for(i=0;i<k;i++){
        printf("%f\n",over[i]);
        }
    printf("O neow pinakas tou stathmou A\n");
    for(i=0;i<e;i++){
        printf("%f\n",C[i]);
        }
    printf("O neos pinakas tou stathmou B\n");
    for(i=0;i<z;i++){
        printf("%f\n",D[i]);
        }
       
    min=abs(C[0]-D[0]);
    mina=C[0];
    minb=D[0];
    for(i=0;i<e;i++){
        for(j=0;j<z;j++){
            if(abs(C[i]-D[j])<min){
                min=abs(C[i]-D[j]);
                mina=C[i];
                minb=D[j];
            }
        }
    }
    printf("Oi syxnotites twn stathmwn A kai B gia tis opoies i diafora |fa-fb| einai i elaxisti einai oi antistoixes times: %f",mina);
    printf("kai %f",minb);
    scanf("%d",&x);
}

@adianohtos
Τρεχει...
εβαλα τα ερωτηματικα που ελειπαν και τις αγκυλες...
αλλα οπως σ πα δεν εχει νοημα...
απο εδω και περα προσπα8ησε να αλλαξεις τη λογικη σε εκεινο το κομματι...
*αφου ετρεξε εισαι σε καλο δρομο :P


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: adianohtos on April 16, 2008, 23:19:51 pm
Ωραιος, ευχαριστω, θα το παλεψω οσο μπορω γιατι εχω θολωσει λιγο  :D


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: Emfanever on April 17, 2008, 00:22:30 am
έληξε η προθεσμία......
να δούμε τι μας επιφυλάσσει η καινούργια...! :D :D :D


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: AgentCain on April 17, 2008, 20:07:56 pm
έληξε η προθεσμία......
να δούμε τι μας επιφυλάσσει η καινούργια...! :D :D :D

ΣΥΝΑΡΤΗΣΕΙΣ !!!  ^hello^


Title: Re: [Δομημένος Προγραμματισμός] Εργασία Β 2008
Post by: vasso on April 25, 2008, 23:08:22 pm
ανεβάζω κι εγώ μια εργασία, όπως την έφτιαξα πριν από λίγο (ξέρω, άργησα κάπως, κάλλιο αργά.. :P )

Code:
#include <stdio.h>
#include <stdlib.h>


int main()
{
    int i,j,m=500,n=500,k,t=0;
    float A1[50]={},B1[50]={},over[50]={},diafora[50],diaforaA[50],diaforaB[50],dif,difmin=500;
   
    //diavazw ta m kai n mikrotera toy 50
    printf("eisagete m kai n:\n");
    while(m>51 ||m<0 ||n>51 || n<0)   
       scanf("%d%d",&m,&n);
   
   
    //gemizw tous pinakes
    printf("eisagete tis suxnotites toy A:\n");
    for(i=0;i<m;i++)
        scanf("%f",&A1[i]);
     
    printf("eisagete tis suxnotites toy B:\n");
    for(i=0;i<n;i++)
        scanf("%f",&B1[i]);
   
    //elegxw an to stoixeio tou A uparxei idi ston over. An nai, proxwraw sto epomeno
    //elegxw gia kathe stoixeio tou A an uparxei ston B kai an nai to grafoume ston over
    for(i=0;i<m;i++)
    {
        for(k=0;k<t;k++)
        {
            if(A1[i]!=over[k])
              continue;
            else
            {
              i++;
              break;
            }   
        }
             
        for(j=0;j<n;j++)
        {
            if(A1[i]==B1[j])
            {
                over[t]=A1[i];
                t++;
                break;
            }
         }
    } 
    //typwnw ton over
    printf("o pinakas over:\n");
    for(i=0;i<t;i++)
      printf("%.2f\n",over[i]);
     
    //afairw apo tous A kai B tis koines suxnotites
    for(i=0;i<m;i++)
        for(k=0;k<t;k++)
            if(A1[i]==over[k])
               A1[i]=0;
               
    for(j=0;j<n;j++)
        for(k=0;k<t;k++)
           if(B1[j]==over[k])
               B1[j]=0;
               
    //typwnw toys kainoyrioys A kai B
    printf("o neos pinakas A:\n");
    for(i=0;i<m;i++)
      if(A1[i])
         printf("%.2f\n",A1[i]);
    printf("o neos pinakas B:\n");
    for(j=0;j<n;j++)
      if(B1[j])
         printf("%.2f\n",B1[j]);
         
     
     //gemizw ton pinaka diafora me tin elaxisti diafora tou ka8e stoixeiou tou A apo ta stoixeia tou B kai apo8ikeyw ta dio stoixeia twn opoiwn pairnw ti diafora se dio kainourious pinakes
     //initializing
      for(i=0;i<50;i++)
        diafora[i]=500;
     k=0;
     //main
     for(i=0;i<m;i++)
     {
         if(A1[i])
         {
             for(j=0;j<n;j++)
             {
                 if(B1[j])
                 {
                     dif=(A1[i]-B1[j])>0?(A1[i]-B1[j]):(B1[j]-A1[i]);
                     if(dif<diafora[k])
                     {
                       diafora[k]=dif;
                       diaforaA[k]=A1[i];
                       diaforaB[k]=B1[j];
                      }   
                 }
             }
            k++;
           }
       }
       
       //vriskw to pio mikro stoixeio tou pinaka diafora
       for(i=0;i<50;i++)
          if(diafora[i]<difmin)
          {
              difmin=diafora[i];
              t=i;               
          }
        printf("h elaxisti diafora einai: %.2f\n", diafora[t]);
        printf("to Fa einai %.2f.\n", diaforaA[t]);
        printf("to Fb einai %.2f.\n", diaforaB[t]);
       
   
    system("pause");
}   

στον dev δουλεύει τέλεια, η μόνη περίπτωση που γκρινιάζει είναι όταν η συχνότητα που θέλει ο σταθμός είναι 0. Τότε, καλά να πάθει. :P