forum.math.uoa.gr

Forum του Τμήματος Μαθηματικών
Ημερομηνία 24 Σεπ 2017, 12:35

Όλοι οι χρόνοι είναι UTC + 2 ώρες [ DST ]




Δημιουργία νέου θέματος Απάντηση στο θέμα  [ 26 δημοσιεύσεις ]  Μετάβαση στην σελίδα 1, 2  Επόμενο
Συγγραφέας Μήνυμα
 Θέμα δημοσίευσης: Boήθεια στην C
ΔημοσίευσηΔημοσιεύτηκε: 28 Οκτ 2010, 20:56 
Χωρίς σύνδεση
Regular Forumer
Άβαταρ μέλους

Εγγραφή: 20 Οκτ 2006, 18:35
Δημοσ.: 1723
Τοποθεσια: Αθήνα
Χαίρεται παίδες. Έψαξα λίγο στο google το πρόβλημά μου αλλά δεν βρήκα μία εύκολη και άμεση απάντηση οπότε είπα να σας ρωτήσω εσάς.

Θέλω το εξής. Έχω ένα αρχείο με αριθμούς.
Θέλω να βάλω ένα κόμμα μετά από κάθε αριθμό!

Όποιος έχει την όρεξη ας μου γράψει ένα απλό κώδικα.
(μέχρι το fopen("file.txt", "r+"); ξέρω, μετά είναι το πρόβλημα που πρέπει να κινούμε μέσα στο αρχείο!)

_________________
Welcome to Stockholm


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Boήθεια στην C
ΔημοσίευσηΔημοσιεύτηκε: 28 Οκτ 2010, 23:58 
Χωρίς σύνδεση
Regular Forumer
Άβαταρ μέλους

Εγγραφή: 21 Οκτ 2008, 17:04
Δημοσ.: 139
Κώδικας:
#include <stdio.h>

int main()
{
   FILE *fi, *fo;
   char ch;
   fi = fopen("input.txt","r");
   fo = fopen("output.txt","w");
   while (1){
      ch = fgetc(fi);
      if (ch == EOF){
         break;
      }
      else{
         fputc(ch,fo);
         fputc(',',fo);
      }
   }
   fclose(fi);
   fclose(fo);
   system("PAUSE");
   return 0;
}


Το παραπάνω κομμάτι κώδικα διαβάζει το αρχείο input.txt που ας πούμε περιέχει το "0123456789" και δημιουργεί ένα νέο αρχείο με όνομα output.txt που περιέχει το "0,1,2,3,4,5,6,7,8,9,". Όπως καταλαβαίνεις λειτουργεί σωστά μόνο αν έχεις μονοψήφιους αριθμούς. Αν έχεις και αριθμούς με παραπάνω από ένα ψηφίο ή και δεκαδικούς ή και χαρακτήρες πρέπει να κάνεις αρκετές αλλαγές.

_________________
The less u know, the more u believe...


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Boήθεια στην C
ΔημοσίευσηΔημοσιεύτηκε: 29 Οκτ 2010, 07:14 
Χωρίς σύνδεση
Regular Forumer
Άβαταρ μέλους

Εγγραφή: 20 Οκτ 2006, 18:35
Δημοσ.: 1723
Τοποθεσια: Αθήνα
Μου κάνει ακριβώς!! Ευχαριστώ πολύ!

_________________
Welcome to Stockholm


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Boήθεια στην C
ΔημοσίευσηΔημοσιεύτηκε: 29 Οκτ 2010, 13:04 
Χωρίς σύνδεση
Επίτιμος Administrator
Άβαταρ μέλους

Εγγραφή: 18 Φεβ 2006, 22:25
Δημοσ.: 1377
Τοποθεσια: Nowhere Land
εφόσον έχεις mac, μπορείς πιο εύκολα από το terminal να γράψεις το εξής:

Κώδικας:
sed 's/[[:space:]]\{1,\}/,/'    textfile

_________________
\exists x.\varphi(x) \rightarrow \forall x.\varphi(x)


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Boήθεια στην C
ΔημοσίευσηΔημοσιεύτηκε: 29 Οκτ 2010, 13:53 
Χωρίς σύνδεση
Regular Forumer
Άβαταρ μέλους

Εγγραφή: 20 Οκτ 2006, 18:35
Δημοσ.: 1723
Τοποθεσια: Αθήνα
wow! και που πρέπει να έχω αποθηκεύσει το αρχείο μου; (Θέλω να σε ποιο folder θα ψάξει το terminal;)

_________________
Welcome to Stockholm


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Boήθεια στην C
ΔημοσίευσηΔημοσιεύτηκε: 29 Οκτ 2010, 15:33 
Χωρίς σύνδεση
Επίτιμος Administrator
Άβαταρ μέλους

Εγγραφή: 18 Φεβ 2006, 22:25
Δημοσ.: 1377
Τοποθεσια: Nowhere Land
Α, δε το σώζει, απλά εκτυπώνει. Αν θες να το σώσεις σε αρχείο, γράψε το ίδιο και στο τέλος
Κώδικας:
> output.txt

_________________
\exists x.\varphi(x) \rightarrow \forall x.\varphi(x)


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Boήθεια στην C
ΔημοσίευσηΔημοσιεύτηκε: 19 Νοέμ 2010, 17:46 
Χωρίς σύνδεση
Regular Forumer
Άβαταρ μέλους

Εγγραφή: 27 Σεπ 2007, 18:07
Δημοσ.: 1920
παιδια ξερει κανεις καναν αλγοριθμο που να εχει σαν output ολα τα υποσυνολα(με ν στοιχεια ) ενος συνολου(με Ν>ν στοιχεια) ?? οχι απαραιτητα σε C...


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Boήθεια στην C
ΔημοσίευσηΔημοσιεύτηκε: 19 Νοέμ 2010, 22:08 
Χωρίς σύνδεση
Regular Forumer

Εγγραφή: 21 Οκτ 2008, 19:57
Δημοσ.: 228
Αρκεί για κάθε n=1,2,..,Ν να βρεθούν όλες οι δυνατές διατεταγμένες συλλογές δεικτών i_1<i_2<...<i_n. Το ξέρεις φαντάζομαι. Το ότι είναι διατεταγμένες, απλοποιεί το πρόβλημα. Το ενδιαφέρον σημείο είναι πώς βρίσκουμε την επόμενη διατεταγμένη συλλογή δεικτών, δεδομένου ότι στην τρέχουσα έχουμε i_n=N και μια συνθήκη που να δείχνει ότι τελειώσαμε με το συγκεκριμένο n.

_________________
"Αν οι αρχιτέκτονες κατασκεύαζαν τα κτίρια όπως οι προγραμματιστές προγραμματίζουν τους υπολογιστές, ο πρώτος τρυποκάρυδος που θα εμφανιζόταν θα κατέστρεφε τον πολιτισμό μας."
Δεύτερος νόμος του Gerald Weinberg.


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Boήθεια στην C
ΔημοσίευσηΔημοσιεύτηκε: 19 Νοέμ 2010, 22:19 
Χωρίς σύνδεση
Regular Forumer
Άβαταρ μέλους

Εγγραφή: 27 Σεπ 2007, 18:07
Δημοσ.: 1920
ε αυτο λεω και εγω ρε συ :) ειδα τον κωδικα στην S+/R αλλα ο καθηγητης μας θελει να φτιαξουμε προγραμμα με τις εντολες που ξερουμε που ειναι αρκετα περιρισμενες σε σχεση με αυτες που χρησιμοποιει η S+/R


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Boήθεια στην C
ΔημοσίευσηΔημοσιεύτηκε: 19 Νοέμ 2010, 22:35 
Χωρίς σύνδεση
Regular Forumer

Εγγραφή: 21 Οκτ 2008, 19:57
Δημοσ.: 228
Αν έχεις for, while, break και δυνατότητα να δηλώσεις πίνακα ακεραίων, αρκούν. Και ίσως με κατάλληλη τροποποίηση των βρόγχων, να αποφεύγεται και η break. Αν θες πιο συγκεκριμένα, έχω παράδειγμα σε C.

_________________
"Αν οι αρχιτέκτονες κατασκεύαζαν τα κτίρια όπως οι προγραμματιστές προγραμματίζουν τους υπολογιστές, ο πρώτος τρυποκάρυδος που θα εμφανιζόταν θα κατέστρεφε τον πολιτισμό μας."
Δεύτερος νόμος του Gerald Weinberg.


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Boήθεια στην C
ΔημοσίευσηΔημοσιεύτηκε: 19 Νοέμ 2010, 22:40 
Χωρίς σύνδεση
Regular Forumer
Άβαταρ μέλους

Εγγραφή: 27 Σεπ 2007, 18:07
Δημοσ.: 1920
την break δεν μας την εχει πει...τωρα για βρογχους δεν μας εχει πει αλλα μπορει να τα ξερω απο πληροφορικη 1 και 2 και να μην τα θυμαμαι τωρα...αν μπορεις να την ανεβασεις θα σου ημουν ευγνωμων γιατι παει να σπασει το κεφαλι μου με αυτη την ασκηση...και σε c να ειναι εννοειτε δεν με πειραζει...απλα το νοημα να πιασω θελω...


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Boήθεια στην C
ΔημοσίευσηΔημοσιεύτηκε: 19 Νοέμ 2010, 23:05 
Χωρίς σύνδεση
Regular Forumer

Εγγραφή: 21 Οκτ 2008, 19:57
Δημοσ.: 228
Κοίτα τον παρακάτω κώδικα:
Κώδικας:
#include <stdio.h>

#define N 6 //Μέγεθος πληθυσμού
//A[i]=i-οστό στοιχείο του πληθυσμού, i=1,..,N

int main()
{

long int Deiktis[N+1];
//A[Deiktis[i]]=i-οστό στοιχείο του υποσυνόλου, i=1,..,n
unsigned long int MetrisiYposynolon = 0;
int i,n;
int YparxeiEpomenoYposynolo;

printf("N=%d\n",N);

for ( n=1; n<=N; n++ )
{
   printf("-----------------------\nYposynola me %d stoixeia:\n",n);

   for ( i=1; i<=n; i++ ) Deiktis[i] = i;//1o yposynolo = A[1],..,A[n]
   YparxeiEpomenoYposynolo = 1;
   while( YparxeiEpomenoYposynolo )
   {
      //Ektyposi yposynoloy
      MetrisiYposynolon++;
      printf("Yposynolo #%d: ",MetrisiYposynolon);
      for ( i=1; i<=n; i++ ) printf("A[%d] ",Deiktis[i]);
      printf("\n");

      //Yparxei epomeno yposynolo?
      if ( Deiktis[1] == N-n+1 ) YparxeiEpomenoYposynolo = 0;
      else
      {
      //Eyresi epomenou yposynoloy
      i = n;
      while ( Deiktis[i] == N-n+i ) i--;
      Deiktis[i]++;
      for ( i=i+1; i<=n; i++ ) Deiktis[i]=Deiktis[i-1] + 1;
      }
   }
}//for
return 0;
}


Μπορείς να αντικαταστήσεις όλες τις while με for ή όλες τις for με while, τουλάχιστον στην C. Γενικά πάντως, στις περισσότερες γλώσσες προγραμματισμού μπορείς να αντικαταστήσεις τις for με while. Το τροποποίησα ώστε να μην χρειάζεται την break. Δεν ξέρω αν υπάρχουν καλύτερες προσεγγίσεις για το πρόβλημα και η υλοποίηση επίσης δεν είναι βελτιστοποιημένη.

Δείγμα εξόδου προγράμματος για N=6:
Spoiler:
N=6
-----------------------
Yposynola me 1 stoixeia:
Yposynolo #1: A[1]
Yposynolo #2: A[2]
Yposynolo #3: A[3]
Yposynolo #4: A[4]
Yposynolo #5: A[5]
Yposynolo #6: A[6]
-----------------------
Yposynola me 2 stoixeia:
Yposynolo #7: A[1] A[2]
Yposynolo #8: A[1] A[3]
Yposynolo #9: A[1] A[4]
Yposynolo #10: A[1] A[5]
Yposynolo #11: A[1] A[6]
Yposynolo #12: A[2] A[3]
Yposynolo #13: A[2] A[4]
Yposynolo #14: A[2] A[5]
Yposynolo #15: A[2] A[6]
Yposynolo #16: A[3] A[4]
Yposynolo #17: A[3] A[5]
Yposynolo #18: A[3] A[6]
Yposynolo #19: A[4] A[5]
Yposynolo #20: A[4] A[6]
Yposynolo #21: A[5] A[6]
-----------------------
Yposynola me 3 stoixeia:
Yposynolo #22: A[1] A[2] A[3]
Yposynolo #23: A[1] A[2] A[4]
Yposynolo #24: A[1] A[2] A[5]
Yposynolo #25: A[1] A[2] A[6]
Yposynolo #26: A[1] A[3] A[4]
Yposynolo #27: A[1] A[3] A[5]
Yposynolo #28: A[1] A[3] A[6]
Yposynolo #29: A[1] A[4] A[5]
Yposynolo #30: A[1] A[4] A[6]
Yposynolo #31: A[1] A[5] A[6]
Yposynolo #32: A[2] A[3] A[4]
Yposynolo #33: A[2] A[3] A[5]
Yposynolo #34: A[2] A[3] A[6]
Yposynolo #35: A[2] A[4] A[5]
Yposynolo #36: A[2] A[4] A[6]
Yposynolo #37: A[2] A[5] A[6]
Yposynolo #38: A[3] A[4] A[5]
Yposynolo #39: A[3] A[4] A[6]
Yposynolo #40: A[3] A[5] A[6]
Yposynolo #41: A[4] A[5] A[6]
-----------------------
Yposynola me 4 stoixeia:
Yposynolo #42: A[1] A[2] A[3] A[4]
Yposynolo #43: A[1] A[2] A[3] A[5]
Yposynolo #44: A[1] A[2] A[3] A[6]
Yposynolo #45: A[1] A[2] A[4] A[5]
Yposynolo #46: A[1] A[2] A[4] A[6]
Yposynolo #47: A[1] A[2] A[5] A[6]
Yposynolo #48: A[1] A[3] A[4] A[5]
Yposynolo #49: A[1] A[3] A[4] A[6]
Yposynolo #50: A[1] A[3] A[5] A[6]
Yposynolo #51: A[1] A[4] A[5] A[6]
Yposynolo #52: A[2] A[3] A[4] A[5]
Yposynolo #53: A[2] A[3] A[4] A[6]
Yposynolo #54: A[2] A[3] A[5] A[6]
Yposynolo #55: A[2] A[4] A[5] A[6]
Yposynolo #56: A[3] A[4] A[5] A[6]
-----------------------
Yposynola me 5 stoixeia:
Yposynolo #57: A[1] A[2] A[3] A[4] A[5]
Yposynolo #58: A[1] A[2] A[3] A[4] A[6]
Yposynolo #59: A[1] A[2] A[3] A[5] A[6]
Yposynolo #60: A[1] A[2] A[4] A[5] A[6]
Yposynolo #61: A[1] A[3] A[4] A[5] A[6]
Yposynolo #62: A[2] A[3] A[4] A[5] A[6]
-----------------------
Yposynola me 6 stoixeia:
Yposynolo #63: A[1] A[2] A[3] A[4] A[5] A[6]

_________________
"Αν οι αρχιτέκτονες κατασκεύαζαν τα κτίρια όπως οι προγραμματιστές προγραμματίζουν τους υπολογιστές, ο πρώτος τρυποκάρυδος που θα εμφανιζόταν θα κατέστρεφε τον πολιτισμό μας."
Δεύτερος νόμος του Gerald Weinberg.


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Boήθεια στην C
ΔημοσίευσηΔημοσιεύτηκε: 20 Νοέμ 2010, 10:43 
Χωρίς σύνδεση
Regular Forumer
Άβαταρ μέλους

Εγγραφή: 27 Σεπ 2007, 18:07
Δημοσ.: 1920
σε ευχαριστω παρα πολυ delphi!!!


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Boήθεια στην C
ΔημοσίευσηΔημοσιεύτηκε: 20 Νοέμ 2010, 13:41 
Χωρίς σύνδεση
Άβαταρ μέλους

Εγγραφή: 18 Οκτ 2010, 11:59
Δημοσ.: 13
Πάνο συγγνωμη για το off topic αλλά ποιος είναι ο καθηγητής σου?? Γιατι μου θυμίζει πολυ κατι που έκανα εγω στο μεταπτυχιακο μου.

_________________
Εικόνα


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Boήθεια στην C
ΔημοσίευσηΔημοσιεύτηκε: 06 Μαρ 2011, 16:33 
Χωρίς σύνδεση
Regular Forumer
Άβαταρ μέλους

Εγγραφή: 25 Σεπ 2007, 17:31
Δημοσ.: 4228
Επειδή δε τα θύμαμαι καλά εχω φτιάξει αυτό
Κώδικας:
#include <stdio.h>
#include <stdlib.h>
int paragontiko(int n);
int main()
{
    int n,proxeiro;
printf("Evresi paragontikou\n");
printf("Dose mou to n\n");
scanf("%d",&n);
if(n==0){
printf("n!=0");}
else
{
     proxeiro=paragontiko(n);
     printf("n!=%d",proxeiro);
}
}
int paragontiko(int n)
{
    int i,sinolo;
    sinolo=1;
    for(i=1;i<n+1;i++)
    {
    sinolo*=i;
    }
    return sinolo;
}

ένα απλό παραγοντικό είναι,θα πει κάποιος σιγά ρε ψηλέ κάτι έκανες :P

Η ερώτησή μου είναι αν ξέρεις κανείς μέχρι ποιόν αριθμό μπορεί να το υπολογίσει ο υπολογιστής,το τρέχω απ'τη γραμμή εντολών και είναι compiled με dev-c++
πειραματικά μάλλον αντέχει μέχρι το 12! μετά τα βγάζει λάθος

Υπάρχει τρόπος απλός να αυξηθεί το εύρος που αντέχει το πρόγραμμα;

κάτι με αριθμητική ανάλυση έχει σχέση :?

_________________
https://www.youtube.com/watch?v=wbZuBDJVHEI


Κορυφή
 Προφίλ  
 
Τελευταίες δημοσιεύσεις:  Ταξινόμηση κατά  
Δημιουργία νέου θέματος Απάντηση στο θέμα  [ 26 δημοσιεύσεις ]  Μετάβαση στην σελίδα 1, 2  Επόμενο

Όλοι οι χρόνοι είναι UTC + 2 ώρες [ DST ]


Μελη σε συνδεση

Μέλη σε αυτή την Δ. Συζήτηση : Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης


Δεν μπορείτε να δημοσιεύετε νέα θέματα σε αυτή τη Δ. Συζήτηση
Δεν μπορείτε να απαντάτε σε θέματα σε αυτή τη Δ. Συζήτηση
Δεν μπορείτε να επεξεργάζεστε τις δημοσιεύσεις σας σε αυτή τη Δ. Συζήτηση
Δεν μπορείτε να διαγράφετε τις δημοσιεύσεις σας σε αυτή τη Δ. Συζήτηση

Αναζήτηση για:
Μετάβαση σε:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group