THMMY.gr

Μαθήματα Βασικού Κύκλου => Δομημένος Προγραμματισμός => Topic started by: pentium4 on March 04, 2013, 18:22:09 pm



Title: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: pentium4 on March 04, 2013, 18:22:09 pm
Τόπικ για απορίες ασκήσεων. Για απορίες πάνω σε παλιά θέματα υπάρχει αντίστοιχο τόπικ.


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: Μουργόλυκος on May 29, 2013, 20:46:56 pm
Έχω γράψει πριν την main

void syn_epilogh1(struct pelaths *pelates, int N);

και μου βγάζει το εξής error στο compile.

two or more data types in declaration of `syn_epilogh1'

Και μάλιστα 2 φορές. Τι έχω κάνει λάθος? Καμιά βοήθεια?


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: sk0uf on June 19, 2013, 14:52:46 pm
Θέματα Οκτώβρη 2012 3ο θέμα τι νόημα έχει αυτή η σειρά : n=*fun(&n)=2;


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: Κηπουρίδης on June 19, 2013, 15:39:23 pm
Θέματα Οκτώβρη 2012 3ο θέμα τι νόημα έχει αυτή η σειρά : n=*fun(&n)=2;

H fun απ' ό,τι βλέπεις απ' τη δήλωσή της επιστρέφει έναν pointer. Αν παρακολουθήσεις την εκτέλεσή της θα δεις ότι στη συγκεκριμένη περίπτωση επιστρέφει τον pointer k, του οποίου η τιμή δεν έχει αλλάξει, άρα δείχνει στη θέση μνήμης του n. Επομένως με *fun(&n) θα δείξει στο περιεχόμενο της θέσης μνήμης του n. Άρα στο ίδιο το n. Άρα στην τελική είναι ισοδύναμο με n = n = 2 ( όχι ακριβώς ισοδύναμο, γιατί μέσω της fun αλλάζει κι η global μεταβλητή x, αλλά τέλος πάντων, καταλαβαίνεις τι εννοώ ). Άσχετο, αλλά στην επόμενη εκτέλεση θα επιστρέψει pointer που δείχνει στην global μεταβλητή x, άρα μες στη main το *t και το x θα είναι το ίδιο πράγμα.


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: sk0uf on June 19, 2013, 15:45:07 pm
Ευχαριστώ πολύ!


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: paul on June 19, 2013, 17:19:40 pm
Θεματα ιουνιου 2010 στον πινακα τιμων.

στο πινακαι τιμων μπορει να εξηγησει καποιος τι εμφανιζει?


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: Μουργόλυκος on June 19, 2013, 18:27:10 pm
Θεματα ιουνιου 2010 στον πινακα τιμων.

στο πινακαι τιμων μπορει να εξηγησει καποιος τι εμφανιζει?
4 ABCDX
1 AXCDE
4 ABCDX
0 XBCDE


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: airguitar on June 19, 2013, 18:31:37 pm
Γιατι σε ενα παραδειγμα απο αυτα που ανεβασε στο ethhmy o Κορτεσης χρησιμοποιει αυτο fseek(fp,0,SEEK_END);  ??? Ποιο το νοημα να μετακινησεις κατα 0 (bytes-θεσεις) τον δεικτη θεσης ??(ετσι δεν μετακινειται καν)
(συγκεκριμενα ειναι το pr27 απο τα παραδειγματα που ΄χει ανεβασει)


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: nikitas350 on June 19, 2013, 19:01:19 pm
Γιατι σε ενα παραδειγμα απο αυτα που ανεβασε στο ethhmy o Κορτεσης χρησιμοποιει αυτο fseek(fp,0,SEEK_END);  ??? Ποιο το νοημα να μετακινησεις κατα 0 (bytes-θεσεις) τον δεικτη θεσης ??(ετσι δεν μετακινειται καν)
(συγκεκριμενα ειναι το pr27 απο τα παραδειγματα που ΄χει ανεβασει)

Η εντολή αυτή μετακινεί τον FILE* fp και τον κάνει να δείχνει στο τέλος του αρχείου. Οπότε άμα δεν ήταν στο τέλος ήδη, μετακινείται. Αυτό που δεν θα είχε νόημα θα ήταν το fseek(fp,0,SEEK_CUR);

Παρεπιπτόντος θυμάμαι ότι όταν ανοίγεις το αρχείο για append και θές να γράψεις κάτι στο τέλος, ο Κορτέσης απαιτούσε να κάνεις fseek(fp,0,SEEK_END); πριν ξεκινήσεις να γράψεις. (πράγμα που δεν είναι απαραίτητο γιατί η append σου ανοίγει το αρχεί με τον FILE* να δείχνει στο τέλος http://www.cplusplus.com/reference/cstdio/fopen/, άλλα Κορτέσης τώρα...)


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: airguitar on June 19, 2013, 19:07:21 pm
ευχαριστω !! (μπλεξαμε με τον γερο τι να κανουμε  >:()


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: nikitas350 on June 19, 2013, 19:08:23 pm
Έχω γράψει πριν την main

void syn_epilogh1(struct pelaths *pelates, int N);

και μου βγάζει το εξής error στο compile.

two or more data types in declaration of `syn_epilogh1'

Και μάλιστα 2 φορές. Τι έχω κάνει λάθος? Καμιά βοήθεια?

Τσέκαρε ότι έχεις δηλώσει την struct σου πριν από την συνάρτηση που πας να ορίσεις, και ότι έχεις ; μετά την αγκύλη που κλείνει τον definition της struct σου.


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: airguitar on June 19, 2013, 19:18:41 pm
struct rec{
  long a_a;
  char name[30];
  long units,fee;
}a; Ισχυει αυτο το πραγμα ??? ή εχει κανει λαθος  βαζωντας το a; μετα το } (παλι το παραδειγμα απο αυτα που εχει ανεβασει)


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: vasilis94 on June 19, 2013, 19:20:32 pm
struct rec{
  long a_a;
  char name[30];
  long units,fee;
}a; Ισχυει αυτο το πραγμα ??? ή εχει κανει λαθος  βαζωντας το a; μετα το } (παλι το παραδειγμα απο αυτα που εχει ανεβασει)

Ισχύει.. Δηλώνει την a ως τύπο struct rec ταυτόχρονα με τη δηλώση της δομής. Τσέκαρε στις σημειώσεις του στις δομές :)


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: airguitar on June 19, 2013, 19:23:52 pm
thank you filos !!


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: airguitar on June 19, 2013, 21:37:22 pm
<<H μεταφορα των δεδομενων μεταξυ του καναλιου και του buffer γινεται σε ομαδες οι οποιες εχουν συνηθως το μεγεθος ενος τομεα>>
Σε τι αναφερεται ο τομεας ? τι ειναι δλδ ???  :???: :???:


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: PureForm on June 19, 2013, 23:32:11 pm
πωωωω...αυτη η θεωρια του παγκαλου  >:(


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: vasilis1005 on June 19, 2013, 23:32:52 pm
αυτο που λεει οτι για να διαγραψουμε μια εγγραφη μεταφερουμε την τελευταια εγγραφη του αρχειου στη θεση της εγγραφης που θα διαγραφει και μειωνουνμε τον αριθμο των εγγραφων κατα 1 πως γινεται;

(φανταζομαι με την fseek αλλα πως περιπου;)

πωωωω...αυτη η θεωρια του παγκαλου  >:(

55 σελιδες για 2 μοναδες;...δεν αξιζει (μονο παλιοτερα θεματα ;))


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: RFed the King on June 20, 2013, 00:01:23 am
Θεματα ιουνιου 2010 στον πινακα τιμων.

στο πινακαι τιμων μπορει να εξηγησει καποιος τι εμφανιζει?
4 ABCDX
1 AXCDE
4 ABCDX
0 XBCDE
Γιατι βαζεις στο δευτερο n=1?Δεν θα επρεπε παλι 4 να ειναι???


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: nikitas350 on June 20, 2013, 05:14:27 am
Θεματα ιουνιου 2010 στον πινακα τιμων.

στο πινακαι τιμων μπορει να εξηγησει καποιος τι εμφανιζει?
4 ABCDX
1 AXCDE
4 ABCDX
0 XBCDE

Το συγκεκριμένο θέμα είναι off. https://www.thmmy.gr/smf/index.php?topic=40328.msg732063#msg732063


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: Μεταλλαγμένη Πάπια on August 28, 2013, 12:29:17 pm
Θεματα Σεπτεμβριου 2009, μηπως μπορει κανεις να γραψει τον κωδικα που εχει το θεμα 3; Δεν μπορω να διακρινω τα γραμματα...


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: akyrosHM on September 21, 2013, 04:03:57 am
Απορία! Σε παλιότερο θέμα εμφανίζεται το εξής:
static int m, t[3];
 m+=*(t+1);
Τι θέλει να πει ο ποιητής με τη διαδοχή των τελεστών =*(t+1);


edit: άκυρο, με 2-3 πειραματισμούς το βρήκα.


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: alexampa on September 23, 2013, 02:17:39 am
Παιδιά μπορεί κάποιος να με βοηθήσει? Το παρακάτω τμήμα κώδικα συμπεριφέρεται ως ατέρμων βρόχος... :-\ Υπάρχει κάποιο πρόβλημα σε αυτό καθ' εαυτό το τμήμα και πρέπει να διορθώσω κάτι ή είναι όλα οκ και προφανώς φταίει κάποιο προηγούμενο κομμάτι του προγράμματος?? Ευχαριστώ πολύ!! :) :) :)
while(1)
 {
  fread(&rec,sizeof(rec),1,cl);
  if (feof(cl)) break;
  if (rec.calls==0)
  {
   printf("O pelatis me arithmo %ld den ekane kamia klisi sti diarkeia olou tou mina kai tha diagrafei.\n",rec.numb);
   k = ftell(cl);
   fseek(cl,-sizeof(rec),SEEK_END);
   fread(&rec,sizeof(rec),1,cl);
   fseek(cl,k-sizeof(rec),SEEK_SET);
   fwrite(&rec,sizeof(rec),1,cl);
   p--;
  }
 }//end of while2


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: nikitas350 on September 23, 2013, 23:39:21 pm
Παιδιά μπορεί κάποιος να με βοηθήσει? Το παρακάτω τμήμα κώδικα συμπεριφέρεται ως ατέρμων βρόχος... :-\ Υπάρχει κάποιο πρόβλημα σε αυτό καθ' εαυτό το τμήμα και πρέπει να διορθώσω κάτι ή είναι όλα οκ και προφανώς φταίει κάποιο προηγούμενο κομμάτι του προγράμματος?? Ευχαριστώ πολύ!! :) :) :)
while(1)
 {
  fread(&rec,sizeof(rec),1,cl);
  if (feof(cl)) break;
  if (rec.calls==0)
  {
   printf("O pelatis me arithmo %ld den ekane kamia klisi sti diarkeia olou tou mina kai tha diagrafei.\n",rec.numb);
   k = ftell(cl);
   fseek(cl,-sizeof(rec),SEEK_END);
   fread(&rec,sizeof(rec),1,cl);
   fseek(cl,k-sizeof(rec),SEEK_SET);
   fwrite(&rec,sizeof(rec),1,cl);
   p--;
  }
 }//end of while2

Χρησιμοποιείς την SEEK_END, η οποία δεν έχει σίγουρα αποτελέσματα:
http://stackoverflow.com/questions/13291334/fseek-on-eof-character

Πέρα από αυτό, για να έχει νόημα ο κώδικας σου πρέπει να ανοίγεις το αρχείο ως binary. Άμα θες στείλε όλο τον κώδικα γιατί εδώ δεν βρίσκω τίποτα άλλο λάθος.


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: nikitas350 on September 23, 2013, 23:41:42 pm
Απορία! Σε παλιότερο θέμα εμφανίζεται το εξής:
static int m, t[3];
 m+=*(t+1);
Τι θέλει να πει ο ποιητής με τη διαδοχή των τελεστών =*(t+1);


edit: άκυρο, με 2-3 πειραματισμούς το βρήκα.

Γενικά [pointer arithmetic]:
το *(t+i) είναι ισοδύναμο με το t[ i ].

οπότε ο ποιητής θέλει να πεί:
m = m + t[1].

[Τσέκαρε και την static]


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: airguitar on September 24, 2013, 12:09:42 pm
παιδια ποιο το νοημα της εκφρασης π.χ me1+ = x;   ???  (λειτουργει σαν μετρητης απο τι θυμαμαι)
αλλα οποιος θελει ας εξηγησει λιγο σε βαθος τι σημαινει και κυριως που χρησιμοποιηται(παραδειγματα π.χ.) ?!! ΕΥΧΑΡΙΣΤΩ


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: nikitas350 on September 24, 2013, 14:39:01 pm
παιδια ποιο το νοημα της εκφρασης π.χ me1+ = x;   ???  (λειτουργει σαν μετρητης απο τι θυμαμαι)
αλλα οποιος θελει ας εξηγησει λιγο σε βαθος τι σημαινει και κυριως που χρησιμοποιηται(παραδειγματα π.χ.) ?!! ΕΥΧΑΡΙΣΤΩ

me1+ = x; --> me1 = me1 + x;

Προσθέτει την τιμή του x στην υπάρχουσα τιμή του me1.

για παράδειγμα το παρακάτω πρόγραμμα ζητά 10 αριθμούς και αποθηκεύει το άθροισμα τους στον me1

int me1 = 0;
int x;

for (int i = 0; i < 10; i++) {
     scanf ("%d",&x);
     me1 += x;
}


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: airguitar on September 24, 2013, 14:43:15 pm
ευχαριστω φιλε !! εχει νομιζω και σημασια αν θα μπει το + ή το - , πριν ή μετα το me ??


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: nikitas350 on September 24, 2013, 14:44:42 pm
ευχαριστω φιλε !! εχει νομιζω και σημασια αν θα μπει το + ή το - , πριν ή μετα το me ??

Δεν σε καταλαβαίνω  :o , γράψτο με παράδειγμα.


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: airguitar on September 24, 2013, 15:22:55 pm
ευχαριστω φιλε !! εχει νομιζω και σημασια αν θα μπει το + ή το - , πριν ή μετα το me ??

Δεν σε καταλαβαίνω  :o , γράψτο με παράδειγμα.
το βρηκα τελικα στις σημειωσεις  :)


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: airguitar on September 24, 2013, 18:50:49 pm
Στις εργασιες του ο Κορτεσης χρησιμοποιει πολλες φορες την εξης εκφραση στις επαναληψεις με for  :
Code:
 for(k=0;k<m;k++){
    fl=1;
    for(i=0;i<n;i++){
      sum=0;
      for(j=0;j<n;j++)
sum+=sinap[i][j]*state[j];
      if(sum<0)
newstate[i]=-1;
      else
newstate[i]=1;

Ποια ειναι η λογικη του που δεν την καταλαβαινω (π.χ οταν βαζει μεσα στην for μεταβλητη = κατι  στο συγκεκριμενο fl=1)??
 
ΕΥΧΑΡΙΣΤΩ !!


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: EAJ on September 24, 2013, 19:38:54 pm
Στις εργασιες του ο Κορτεσης χρησιμοποιει πολλες φορες την εξης εκφραση στις επαναληψεις με for  :
Code:
 for(k=0;k<m;k++){
    fl=1;
    for(i=0;i<n;i++){
      sum=0;
      for(j=0;j<n;j++)
sum+=sinap[i][j]*state[j];
      if(sum<0)
newstate[i]=-1;
      else
newstate[i]=1;

Ποια ειναι η λογικη του που δεν την καταλαβαινω (π.χ οταν βαζει μεσα στην for μεταβλητη = κατι  στο συγκεκριμενο fl=1)??
 
ΕΥΧΑΡΙΣΤΩ !!

Είναι αρχικοποίηση πιθανότατα μίας βοηθητικής μεταβλητής η οποία θέλει να ξεκινάει από το 1 για κάθε διαφορετικό k. Υποψιάζομαι ότι δεν έχεις γράψει όλες τις εντολές...κάπου πρέπει να χρησιμοποιεί την fl...


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: airguitar on September 24, 2013, 19:41:51 pm
Code:
#include <stdio.h>
#define NMAX 10
void main()
{
  int i,j,k,n,m,state[NMAX],newstate[NMAX],fl;
  float sinap[NMAX][NMAX],sum;
  printf("Δώστε τον αριθμό των νευρώνων (max %d) = ? ",NMAX);
  scanf("%d",&n);

  for(i=0;i<n;i++){
    printf("Δώστε την κατάσταση του νευρώνα %d = ? ",i+1);
    scanf("%d",&state[i]);
    sinap[i][i]=0;
    for(j=i+1;j<n;j++){
      printf("Δώστε το βάρος της σύναψης του νευρώνα %d με τον νευρώνα %d = ? ",i+1,j+1);
      scanf("%f",&sinap[i][j]);
      sinap[j][i]=sinap[i][j];
    }
  }
  printf("Δώστε τον μέγιστο αριθμό επαναλήψεων για το stable state = ? ");
  scanf("%d",&m);
  for(k=0;k<m;k++){
    fl=1;
    for(i=0;i<n;i++){
      sum=0;
      for(j=0;j<n;j++)
sum+=sinap[i][j]*state[j];
      if(sum<0)
newstate[i]=-1;
      else
newstate[i]=1;
      if(newstate[i]!=state[i])fl=0;
    }
    if(fl)break;
    for(i=0;i<n;i++)
      state[i]=newstate[i];
  }
  if(fl){
    printf("Stable state\n");
    for(i=0;i<n;i++)
      printf("Νευρώνας %d  state = %d \n",i+1,state[i]);
  }
  else{
    printf("State μετά από %d επαναλήψεις\n",k);
    for(i=0;i<n;i++)
      printf("Νευρώνας %d  state = %d \n",i+1,state[i]);
  }
}

εδω ειναι ολος ο κωδικας


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: c0ndemn3d on September 24, 2013, 19:42:52 pm
Στις εργασιες του ο Κορτεσης χρησιμοποιει πολλες φορες την εξης εκφραση στις επαναληψεις με for  :
Code:
 for(k=0;k<m;k++){
    fl=1;
    for(i=0;i<n;i++){
      sum=0;
      for(j=0;j<n;j++)
sum+=sinap[i][j]*state[j];
      if(sum<0)
newstate[i]=-1;
      else
newstate[i]=1;



Ποια ειναι η λογικη του που δεν την καταλαβαινω (π.χ οταν βαζει μεσα στην for μεταβλητη = κατι  στο συγκεκριμενο fl=1)??
 
ΕΥΧΑΡΙΣΤΩ !!

Θα σου γράψω πρώτα την ισοδύναμη μορφή χωρίς σημαία:
Code:
do{
k=0;
for(i=0; i<n; i++){
sum=0;
for(j=0;j<n;j++)
sum += sinap[i][j]*state[j];
if(sum<0)
newstate[i] = -1;
else
newstate[i] = 1;
}
if(newstate[i]==state[i]){
for(i=0;i<n;i++)
state[i]=newstate[i];
}
k+=1;
}while(newstate[i]==state[i] && k < m); //Λυπάμαι για λάθη, είναι προχειρογραμμένο αλλά πιάνεις το νόημα.

Ρητορική ερώτηση: Ποιο σού φαίνεται καλύτερο;

Υπάρχουν περιπτώσεις που θες να κάνεις μια λούπα, για την οποία χρειάζεσαι 2 συνθήκες:
Έναν μετρητή (γιατί, για παράδειγμα, σαρώνεις τα στοιχεία ενός πίνακα)
Μια επιπλέον συνθήκη, διότι, για κάποιο λόγο μπορεί να υπάρχει κάτι το "περίεργο" στις τιμές του προγράμματος.

Η εντολή for έχει γραφτεί κυρίως για να ελέγχει τις τιμές ενός μετρητή και να κάνει καθορισμένες επαναλήψεις (όχι ότι δεν μπορείς να το αλλάξεις, αλλά συνήθως το προτιμότερο είναι να κάνεις το πρόγραμμα σου κατανοητό, διότι ο άλλος δεν ξέρει περί τίνος πρόκεται και η for έχει δημιουργηθεί για μια συγκεκριμένη κατηγορία επαναλήψεων). Εφόσον λοιπόν θα κάνεις μόνο έναν έλεγχο με τη for, πώς θα γίνει ο άλλος;

Θα γίνει με τη δημιουργία μιας σημαίας. Οι σημαίες είναι μεταβλητές οι οποίες παίρνουν 2 τιμές, οι οποίες αντιστοιχούν στο λογικό ΝΑΙ και λογικό ΟΧΙ (boolean). Αυτό μπορείς να το υλοποιήσεις κάλλιστα με έναν integer, στον οποία θα δίνεις τις τιμές 1 και 0 αντίστοιχα. Ξεκινάς με μια υπόθεση και λες ότι το τάδε γεγονός ισχύει (άρα βάζω στη σημαία την τιμή 1) και εκτελώ κανονικά τις απαιτούμενες λειτουργίες. Εφόσον τελειώνει η μια λούπα ελέγχεις αν ισχύει ακόμα η συνθήκη την οποία έχεις υποθέσει. Αν δεν ισχύει, αλλάζεις τη σημαία σε λογικό 0 και εκτελείς κάποιες απαιτούμενες εντολές (εδώ από ό,τι είδα δεν έχει τέτοιες, απλά αλλάζει την τιμή και τελειώνει). Μετά ουσιαστικά κάνεις έναν ελεγχο για να καθορίσεις αν θα συνεχίσεις τη λούπα, ή αν θα φύγεις. ΤΟ ΚΑΝΕΙΣ ΜΕ ΑΥΤΟΝ ΤΟΝ ΤΡΟΠΟ ΔΙΟΤΙ ΓΙΝΕΤΑΙ ΕΤΣΙ ΠΙΟ ΚΑΤΑΝΟΗΤΟ ΣΤΟΝ ΑΝΑΓΝΩΣΤΗ ΤΟΥ ΚΩΔΙΚΑ ΚΑΙ ΕΠΕΙΔΗ ΕΧΕΙΣ ΜΕΓΙΣΤΟ ΑΡΙΘΜΟ ΕΠΑΝΑΛΗΨΕΩΝ. Όπως ίσως βλέπεις, η αντίστοιχη λούπα με do είναι λίγο πιο δύσκολη στο να καταλάβεις εξ αρχής το πώς και το γιατί (ναι, δεν φαίνεται ακριβώς η διαφορά, αλλά σε μεγάλα προβλήματα θα το έπιανες το νόημα).


Υ.Γ. Ελπίζω να βοήθησα και να σημειωθεί ότι, για ευνόητους λόγους, η χρήση σημαιών δεν είναι πανάκεια.


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: EAJ on September 24, 2013, 19:51:52 pm
Code:
#include <stdio.h>
#define NMAX 10
void main()
{
  int i,j,k,n,m,state[NMAX],newstate[NMAX],fl;
  float sinap[NMAX][NMAX],sum;
  printf("Δώστε τον αριθμό των νευρώνων (max %d) = ? ",NMAX);
  scanf("%d",&n);

  for(i=0;i<n;i++){
    printf("Δώστε την κατάσταση του νευρώνα %d = ? ",i+1);
    scanf("%d",&state[i]);
    sinap[i][i]=0;
    for(j=i+1;j<n;j++){
      printf("Δώστε το βάρος της σύναψης του νευρώνα %d με τον νευρώνα %d = ? ",i+1,j+1);
      scanf("%f",&sinap[i][j]);
      sinap[j][i]=sinap[i][j];
    }
  }
  printf("Δώστε τον μέγιστο αριθμό επαναλήψεων για το stable state = ? ");
  scanf("%d",&m);
  for(k=0;k<m;k++){
    fl=1;
    for(i=0;i<n;i++){
      sum=0;
      for(j=0;j<n;j++)
sum+=sinap[i][j]*state[j];
      if(sum<0)
newstate[i]=-1;
      else
newstate[i]=1;
      if(newstate[i]!=state[i])fl=0;
    }
    if(fl)break;
    for(i=0;i<n;i++)
      state[i]=newstate[i];
  }
  if(fl){
    printf("Stable state\n");
    for(i=0;i<n;i++)
      printf("Νευρώνας %d  state = %d \n",i+1,state[i]);
  }
  else{
    printf("State μετά από %d επαναλήψεις\n",k);
    for(i=0;i<n;i++)
      printf("Νευρώνας %d  state = %d \n",i+1,state[i]);
  }
}

εδω ειναι ολος ο κωδικας


To fl είναι βοηθητική μεταβλητή. Τη χρησιμοποιεί για να διακόψει το λουπ και να πάει στο επόμενο k. Παίρνει την τιμή 0 εκεί που έχει την
if(newstate!=state) fl=0;
Το 1 το βάζει έτσι...θα μπορούσε να βάλει οποιοδήποτε μη μηδενικό αριθμό. Οποιοσδήποτε μη μηδενικός αριθμός αντιστοιχεί στο TRUE και μόνο το 0 στο FALSE
if(fl)break;
    for(i=0;i<n;i++)
      state=newstate;


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: kleopatra on October 07, 2013, 09:27:28 am
παιδιά ξέρει κανείς από αρχεία; ο κορτέσης είπε  στο μάθημα του μήπως ότι θέλει σύνταξη δομής για την καταχώρηση πχ νεου πελάτη,νέου σεισμού κτλ?δλδ έτσι να λύσουμε και το θέμα με αρχείο?επίσης ποιος ξέρει ποια τεχνική χρησιμοποιούμε για να βρούμε που ακριβώς θα μετακινήσουμε τον κέρσορα ώστε να βρούμε για παράδειγμα κάποιο μέγιστο κάποιο ελάχιστο κοκ;βρηκα μια εντολή fgetpos(fp,metavliti) fsetpos(fp,metavliti) που κραταει τη θέση του κέρσορα αλλά δν ξέρω κατά πόσο θα θελε αυτή,Κάποιος που γνωρίζει ας απαντήσει σύντομα γτ χανόμαστεεεε!!!!!ευχαριστώ


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: nikitas350 on October 07, 2013, 12:06:41 pm
παιδιά ξέρει κανείς από αρχεία; ο κορτέσης είπε  στο μάθημα του μήπως ότι θέλει σύνταξη δομής για την καταχώρηση πχ νεου πελάτη,νέου σεισμού κτλ?δλδ έτσι να λύσουμε και το θέμα με αρχείο?επίσης ποιος ξέρει ποια τεχνική χρησιμοποιούμε για να βρούμε που ακριβώς θα μετακινήσουμε τον κέρσορα ώστε να βρούμε για παράδειγμα κάποιο μέγιστο κάποιο ελάχιστο κοκ;βρηκα μια εντολή fgetpos(fp,metavliti) fsetpos(fp,metavliti) που κραταει τη θέση του κέρσορα αλλά δν ξέρω κατά πόσο θα θελε αυτή,Κάποιος που γνωρίζει ας απαντήσει σύντομα γτ χανόμαστεεεε!!!!!ευχαριστώ

Ναι, στα αρχεία μπορείς να αποθηκεύσεις και να ανακτάς ολόκληρες δομές (υπό την προυπόθεση ότι τα έχεις ανοίξει ως binary). Το "κέρσορα" τον μετακινούμε με την fseek και την θέση του την βλέπουμε με την ftell. (ref: http://www.cplusplus.com/reference/cstdio/fseek/)

Γενικά γνώμη μου είναι να προσπαθήσεις να γράψεις κάποιο μικρό πρόγραμμα με αρχεία για να δεις τι γίνεται, γιατί αλλιώς δεν βγαίνει. :)


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: Utrion on October 07, 2013, 12:11:58 pm
Μια γρήγορη ερώτηση οτάν λέει χωρίς γενικές μεταβλητες εννοεί χωρίς το define ? Δηλαδή εναν πίνακα θα τον δηλώνουμε


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: heavy melon on October 07, 2013, 12:17:12 pm
Μια γρήγορη ερώτηση οτάν λέει χωρίς γενικές μεταβλητες εννοεί χωρίς το define ? Δηλαδή εναν πίνακα θα τον δηλώνουμε

όχι, εννοεί global. και συνήθως δε θέλει χρήση τέτοιων


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: Utrion on October 07, 2013, 12:32:34 pm
Μια γρήγορη ερώτηση οτάν λέει χωρίς γενικές μεταβλητες εννοεί χωρίς το define ? Δηλαδή εναν πίνακα θα τον δηλώνουμε

όχι, εννοεί global. και συνήθως δε θέλει χρήση τέτοιων
ευχαριστώ :) άρα define επιτρέπεται :)


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: PureForm on October 07, 2013, 13:04:16 pm
παιδιά ξέρει κανείς από αρχεία; ο κορτέσης είπε  στο μάθημα του μήπως ότι θέλει σύνταξη δομής για την καταχώρηση πχ νεου πελάτη,νέου σεισμού κτλ?δλδ έτσι να λύσουμε και το θέμα με αρχείο?επίσης ποιος ξέρει ποια τεχνική χρησιμοποιούμε για να βρούμε που ακριβώς θα μετακινήσουμε τον κέρσορα ώστε να βρούμε για παράδειγμα κάποιο μέγιστο κάποιο ελάχιστο κοκ;βρηκα μια εντολή fgetpos(fp,metavliti) fsetpos(fp,metavliti) που κραταει τη θέση του κέρσορα αλλά δν ξέρω κατά πόσο θα θελε αυτή,Κάποιος που γνωρίζει ας απαντήσει σύντομα γτ χανόμαστεεεε!!!!!ευχαριστώ
Αν χρησιμοποιεισεις καποια εντολη π δν εχει αναφερει ο κορτεσης δεν στο πιανει για σωστο ν τ θυμασε αυτο
Αν θυμαμε καλα τ παραπανχ π ειπες δεν εχουν ειπωθει στο μαθημα του


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: kleopatra on October 07, 2013, 13:29:53 pm
παιδιά ξέρει κανείς από αρχεία; ο κορτέσης είπε  στο μάθημα του μήπως ότι θέλει σύνταξη δομής για την καταχώρηση πχ νεου πελάτη,νέου σεισμού κτλ?δλδ έτσι να λύσουμε και το θέμα με αρχείο?επίσης ποιος ξέρει ποια τεχνική χρησιμοποιούμε για να βρούμε που ακριβώς θα μετακινήσουμε τον κέρσορα ώστε να βρούμε για παράδειγμα κάποιο μέγιστο κάποιο ελάχιστο κοκ;βρηκα μια εντολή fgetpos(fp,metavliti) fsetpos(fp,metavliti) που κραταει τη θέση του κέρσορα αλλά δν ξέρω κατά πόσο θα θελε αυτή,Κάποιος που γνωρίζει ας απαντήσει σύντομα γτ χανόμαστεεεε!!!!!ευχαριστώ
Αν χρησιμοποιεισεις καποια εντολη π δν εχει αναφερει ο κορτεσης δεν στο πιανει για σωστο ν τ θυμασε αυτο
Αν θυμαμε καλα τ παραπανχ π ειπες δεν εχουν ειπωθει στο μαθημα του
ναι κατάλαβα.γενικα η μεθοδολογία που ίσως χρειάζεται είναι η ύπαρξη δομών με μεταβλητές τα επιμέρους στοιχεία του χρήστη του προϊόντος κτλ.Αυτό με βοηθάει στο γεγονός ότι μπορώ να διαβάσω όλα μαζί τα στοιχεία του ενός χρήστη χωρίς να χρειάζεται ενα-ενα αναγκαστικά με fread .μονο όταν θέλω κάτι συγκεκριμένο από τα στοιχεία το κάνω αυτό.επίσης των αριθμό των σειρων του αρχείου μπορώ να τον πάρω από τη διαίρεση ftell(fp)/sizeof(a) όπου a όνομα δομής και να αποθηκεύσω το πλήθος αυτό σε μια μεταβλητή στη main ώστε να το χρησιμοποιώ.Έτσι αν θέλω να βρω κάποιο μέγιστο με μια for(i=0; i<ftell(fp)/sizeof(a); i++) να βρίσκω θέση i που ξεκινάει η γραμμή και διαβάζοντας από κει πάιρνω την τιμή.Σωστά?Αν μπορεί κάποιος ας με διορθώσει γιατι αυτα τα getsize setsize συναρτήσεις που έκανε ο κορτέσης στην επίλυση της άσκησης F 2013μου φάνηκαν λίγο κινέζικα.Η ενεργειακή φοιτήτρια ζητάει την κατανόηση σας στις κοτσάνες  :)


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: nikitas350 on October 07, 2013, 15:39:55 pm
παιδιά ξέρει κανείς από αρχεία; ο κορτέσης είπε  στο μάθημα του μήπως ότι θέλει σύνταξη δομής για την καταχώρηση πχ νεου πελάτη,νέου σεισμού κτλ?δλδ έτσι να λύσουμε και το θέμα με αρχείο?επίσης ποιος ξέρει ποια τεχνική χρησιμοποιούμε για να βρούμε που ακριβώς θα μετακινήσουμε τον κέρσορα ώστε να βρούμε για παράδειγμα κάποιο μέγιστο κάποιο ελάχιστο κοκ;βρηκα μια εντολή fgetpos(fp,metavliti) fsetpos(fp,metavliti) που κραταει τη θέση του κέρσορα αλλά δν ξέρω κατά πόσο θα θελε αυτή,Κάποιος που γνωρίζει ας απαντήσει σύντομα γτ χανόμαστεεεε!!!!!ευχαριστώ
Αν χρησιμοποιεισεις καποια εντολη π δν εχει αναφερει ο κορτεσης δεν στο πιανει για σωστο ν τ θυμασε αυτο
Αν θυμαμε καλα τ παραπανχ π ειπες δεν εχουν ειπωθει στο μαθημα του
ναι κατάλαβα.γενικα η μεθοδολογία που ίσως χρειάζεται είναι η ύπαρξη δομών με μεταβλητές τα επιμέρους στοιχεία του χρήστη του προϊόντος κτλ.Αυτό με βοηθάει στο γεγονός ότι μπορώ να διαβάσω όλα μαζί τα στοιχεία του ενός χρήστη χωρίς να χρειάζεται ενα-ενα αναγκαστικά με fread .μονο όταν θέλω κάτι συγκεκριμένο από τα στοιχεία το κάνω αυτό.επίσης των αριθμό των σειρων του αρχείου μπορώ να τον πάρω από τη διαίρεση ftell(fp)/sizeof(a) όπου a όνομα δομής και να αποθηκεύσω το πλήθος αυτό σε μια μεταβλητή στη main ώστε να το χρησιμοποιώ.Έτσι αν θέλω να βρω κάποιο μέγιστο με μια for(i=0; i<ftell(fp)/sizeof(a); i++) να βρίσκω θέση i που ξεκινάει η γραμμή και διαβάζοντας από κει πάιρνω την τιμή.Σωστά?Αν μπορεί κάποιος ας με διορθώσει γιατι αυτα τα getsize setsize συναρτήσεις που έκανε ο κορτέσης στην επίλυση της άσκησης F 2013μου φάνηκαν λίγο κινέζικα.Η ενεργειακή φοιτήτρια ζητάει την κατανόηση σας στις κοτσάνες  :)

Για να δουλεύεις με δομές σε ένα αρχείο πρέπει να το ανοίξεις ως binary.
+Η fteel σου λέει που βρίσκεσαι. Για να βρείς το "μέγεθος" του αρχείου θα πρέπει να κάνεις

int size;
fseek(fp, 0, SEEK_END);
size = ftell(fp);

(η SEEK_END πλέον μπορεί να μην τρέχει σε όλους τους compiler σωστά, αλλά νομίζω ότι ο κορτέσης την δέχεται)


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: heavy melon on October 07, 2013, 16:55:26 pm
πότε χρησιμοποιούμε fprintf, fscanf
και πότε fread, fwrite?

διάβασα κάπου ότι οι fread, fwrite είναι για τυχαία προσπέλαση αρχείων
σε συνδυασμό με fseek. αλλά δε το πολυκατάλαβα αυτό. αφού και με τις άλλες 2 δε μπορούμε να κάνουμε τυχαία προσπέλαση με χρήση fseek?

Επίσης θεωρούμε πάντα τυχαίας προσπέλασης αρχεία ή σειριακά ή μας το διευκρινίζει?

edit: οι διαφορές που ρωτάω παραπάνω μήπως έχουν να κάνουν με το buffering κυρίως?  :???:


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: Fcoriolis on November 15, 2013, 03:13:33 am
Την άσκηση με τον Αλγόριθμο αναζήτησης της κινητικής αντίδρασης στερεάς κατάστασης μπόρεσε να τη λύσει κανείς;


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: adiaforos on February 05, 2014, 01:55:13 am
σε ενα αρχειο..,εχοντας περασει τους αριθμους-εγγραφες με το fwrite ,αμα μετα θελησεις να τα ανακτησεις στη main και να τα εκτυπωσεις αρκει μια for και μεσα να εχει το fread η χρειαζεται μεσα στη for να βαλω και την εντολη fseek(fp,sizeof(int),seek_cur)??
δηλαδη αυτο που ρωταω ειναι αν με το fread οταν κανει αναγνωσει τα δεδομενα απο το αρχειο μετακινειται και ο δεικτης στο τελος τησ αναγνωσης η ξανα επανερχεται στην αρχη


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: Ragnar Lothbrok on February 05, 2014, 18:54:00 pm
kane ena rewind(fp) gia asfaleia


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: airguitar on February 05, 2014, 23:16:46 pm
Παιδια οποιος/α εχει λυσει παλια θεματα απο δομημενο ας κανει ενα κοπο ν ανεβασει καμια λυση !!
θα μας βοηθησει πολυ εμας που δινουμε !!  ::) ::)
Ευχαριστω !!!


Title: Re: [Δομημένος Πρ.] Απορίες σε ασκήσεις 12-13
Post by: RFed the King on February 06, 2014, 01:34:13 am
λοιπον αυτο ειναι το θεμα 3ο Σεπ12' το ελυσα μαζι με εναν φιλο μου(εγω γενικα δεν εχω ιδεα για αρχεια)...
Δεν ειναι σωστο γιατι καθησα και το εγραψα και στον κομπαιλερ,αλλα δεν υπαρχει κανενα αλλο θεμα λυμενο με αρχεια....Ελπιζω να μην ειναι πολυ λαθος απλως! :)