freestuff.gr αρχική σελίδα
 FAQFAQ    ΑναζήτησηΑναζήτηση   Λίστα ΜελώνΛίστα Μελών   Ομάδες ΜελώνΟμάδες Μελών   <b>Εγγραφή Μέλους</b>Εγγραφή Μέλους 
 ΠροφίλΠροφίλ   Επιλογές μέλους Επιλογές   Τα bookmarks μου Τα bookmarks μου   Προσωπικά μηνύματαΠροσωπικά μηνύματα 
  διαφήμιση  

Καλώς ήρθατε στο forum μας! Για να συμμετάσχετε στις συζητήσεις θα πρέπει να είσαστε μέλος. Γίνετε μέλος τώρα!.

ζητάει το όνομα ενός αρχείου το οποίο θα περιέχει ανά γραμμή


 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » Γλώσσες Προγραμματισμού » C, C++
Moderators:  Super-Moderators, WebDev Moderators
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [10 Μηνύματα]      Bookmarks Tags: όνομα Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
ΑποστολέαςΜήνυμα
panospcm


Μέλος από: 23 Μαη 2006
Μηνύματα: 4

View users profile
ΜήνυμαΣτις: 23 Μαη 2006 23:33    Θέμα: ζητάει το όνομα ενός αρχείου το οποίο θα περιέχει ανά γραμμή Απάντηση με παράθεση  Mark this post and the followings unread

hello guys!!
mipos exete kamia idea pos lynontai autes oi askiseis stin C ?

α) Θα ζητάει το όνομα ενός αρχείου το οποίο θα περιέχει ανά γραμμή κάποιο τυχαίο αριθμό. Θα ανοίγει το αρχείο και θα ελέγχει κάθε αριθμό για το αν είναι πρώτος. Sto telos tha grafei tous protous arithmous se ena allo arxeio
β) θα ζητάει το όνομα ενός αρχείου το οποίο θα περιέχει κείμενο. Θα ζητάει ένα αλφαριθμητικό. Θα ανοίγει το αρχείο και θα ψάχνει για το συγκεκριμένο αλφαριθμητικό. Κάθε φορά που θα το συναντάει θα αυξάνει ένα counter. Στο τέλος του προγράμματος θα τυπώνεται ο αριθμός των εμφανίσεων του συγκεκριμένου αλφαριθμητικού.

γ) tha zitaei to onoma tou arxeiou to opoio periexei keimeno(A-Z,a-z). to arxeio auto tha to anoigei kai tha to kryptografei me ton algorithmo tou kaisara. Το κρυπτογραφημένο κείμενο θα αποθηκεύεται σε ένα νέο αρχείο. O algorithmos tou kaisara metakinei kathe gramma kata 3 theseis stin alphavito.(Α->D, B->E).


Opiadipote boitheia tha itan xrisimi...

Last edited by panospcm on 29 Μαη 2006 12:32, edited 1 time in total
dva_dev
Script Master

Μέλος από: 16 Σεπ 2005
Μηνύματα: 256+

View users profile Visit posters website
blog deviantART facebook linkedin 
ΜήνυμαΣτις: 24 Μαη 2006 09:43    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Ο βασικός αλγόριθμος είναι ο ίδιος:
κώδικας:
Ανοιξε κάποιο αρχείο που επιλέγει ο χρήστης
Διάβασε μια γραμμή
Οσο δεν είσαι στο τέλος του αρχείου
    Κάνε κάτι με αυτή τη γραμμή (διαφορετικό για τα α,β,γ)
    Διάβασε μια ακόμα γραμμή
Τέλος Οσο
Κλείσε το αρχείο που άνοιξες
Τέλος


Τώρα για το α) και γ) ανοίγεις (και κλείνεις στο τέλος) 2 αρχεία, το 1ο για ανάγνωση και το 2ο για γράψιμο.

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

Για παράδειγμα για το α) θα γίνει:
κώδικας:

Διάβασε το όνομα του αρχείου εισόδου
Διάβασε το όνομα του αρχείου εξόδου
Ανοιξε το αρχείο εισόδου για ανάγνωση
Ανοιξε το αρχείο εξόδου για γράψιμο
Διάβασε ένα νούμερο (από το αρχείο εισόδου)
Οσο δεν είσαι στο τέλος του αρχείου

    Εκτέλεσε τον αλγόριθμο για έλεγχο αν είναι πρώτος αριθμός
    Αν είναι πρώτος αριθμός
        Γράψε τον αριθμό στο αρχείο εξόδου
    τέλος Αν

    Διάβασε ένα ακόμα νούμερο (από το αρχείο εισόδου)
Τέλος Οσο
Κλείσε το αρχείο εξόδου
Κλείσε το αρχείο εισόδου
Τέλος
panospcm


Μέλος από: 23 Μαη 2006
Μηνύματα: 4

View users profile
ΜήνυμαΣτις: 25 Μαη 2006 16:21    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

thanks gia tin apantisi alla exo problima me ta arxeia...mou diavazei mono tin proti grammi tou arxeiou...pia einai i epanalipsi gia na sinexisei se olo to arxeio
dva_dev
Script Master

Μέλος από: 16 Σεπ 2005
Μηνύματα: 256+

View users profile Visit posters website
blog deviantART facebook linkedin 
ΜήνυμαΣτις: 25 Μαη 2006 17:30    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Η ίδια εντολή που διαβάζει την πρώτη γραμμή διαβάζει και τις επόμενες, αρκεί να την βάλεις μέσα σε ένα βρόγχο.
Τι κώδικα έχεις γράψει μέχρι στιγμής;
panospcm


Μέλος από: 23 Μαη 2006
Μηνύματα: 4

View users profile
ΜήνυμαΣτις: 28 Μαη 2006 23:57    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

tin elysa tin proti xaris tin boitheia sou.oriste o kodikas

κώδικας:

#include<stdio.h>
#include<stdlib.h>
 
int main(void)
{
   FILE *outfile;
   FILE *infile;
   int N;
             
   int D; 
             
   int N_is_prime; 

   infile=fopen("C:/old.txt","r");
   
outfile=fopen("C:/primes.txt","w");

   fscanf(infile, "%d", &N);


   while(fscanf(infile, "%d", &N) > 0){
    
   
      N_is_prime = 1;     
    
     for (D = 2; D < N; D++)
      {
         
       
        if ( N%D == 0 ) N_is_prime = 0; // an to ypoloipo 0 tote einai prwtos      
      
      }




      if (N_is_prime == 1) fprintf(outfile, " O arithmos %d einai prwtos\n", N); 

   

   }
   fclose(outfile);
   fclose(infile);

 
   return 0; 
}


gia ta alla dyo tora opoiadipote boitheia gia ton algorythmo tha itan euprosdekti
dva_dev
Script Master

Μέλος από: 16 Σεπ 2005
Μηνύματα: 256+

View users profile Visit posters website
blog deviantART facebook linkedin 
ΜήνυμαΣτις: 29 Μαη 2006 09:56    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Αρκετά καλός (κάποιον άλλο κώδικα δεν είχες βάλει ή δεν θυμάμαι καλά; ) 3 παρατηρησούλες μόνο:
1) το fscanf ακριβώς πριν το while σβήσε το γιατί έτσι όπως είναι χάνεις το πρώτο νούμερο.
Κάνεις ένα read (το οποίο και αγνοείς), και αμέσως μετά ξανακάνεις (μέσα στη συνθήκη του while το οποίο και επεξεργάζεσαι για να υπολογίσεις τους πρώτους).
2) Αλλαξε το σχόλιο στο if ( N%D == 0 ) N_is_prime = 0; γιατί αν το υπόλοιπο είναι 0 τότε ΔΕΝ είναι πρώτος.
3) Το όνομα του αρχείου παίζει έτσι όπως το έχεις "C:/old.txt" ή μήπως θέλει "C:\\old.txt". Το ίδιο και για το άλλο.

Στο δεύτερο που ζητάς για να απλοποιήσουμε λίγο τα πράγματα υποθέτουμε ότι οι λέξεις που περιέχει το αρχείο είναι μέχρι ένα ορισμένο μήκος (MAX_WORD_LENGTH) το οποίο ορίζεις όσο μεγάλο θέλεις, αν και ένα νούμερο πάνω από 500 μάλλον θα ήταν περίεργο (πάντως παίζει ότι και να βάλεις αρκεί να χωράει σε int. Αν χρειαστείς μεγαλύτερο θα πρέπει να αλλάξεις τα int σε long).
Ο κώδικας είναι βασισμένος στον δικό σου.
κώδικας:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//Το μέγιστο μήκος της κάθε λέξης είναι 50 χαρακτήρες
#define MAX_WORD_LENGTH 50

int main(void)
{
   FILE *infile;

   char searchWord[MAX_WORD_LENGTH + 1]; //+1 για το τελικό '\0'
   char readWord[MAX_WORD_LENGTH + 1];
   char *charIndex;
   int nFound;
   int searchWordLength;
   int readWordLength;
   int i;

   infile=fopen("C:\\old.txt","r");
   printf("Dose th lexi (mexri %d xarakthres.):", MAX_WORD_LENGTH);
   scanf("%s", searchWord);

   nFound=0;
   searchWordLength = strlen(searchWord);

   while(fscanf(infile, "%s", readWord) > 0)
   {
      readWordLength = strlen(readWord);
      charIndex = readWord;
      for (i=0; i <= readWordLength - searchWordLength; i++)
      {
         if (strncmp(searchWord, (charIndex+i), searchWordLength)==0)
            nFound++;
      }
   }
   fclose(infile);

   printf ("Vrethike %d fores.", nFound);

   return 0;
}


Για το τρίτο δεν νομίζω να έχεις πρόβλημα αφού έκανες το πρώτο.
panospcm


Μέλος από: 23 Μαη 2006
Μηνύματα: 4

View users profile
ΜήνυμαΣτις: 29 Μαη 2006 12:29    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

thanks.eixes dikio gia to fscanf , den to eixa dei. tora mporeis na mou eksigiseis ti exeis kanei mesa stin while ston kodika sou?giati den polykatalava. episis gia to 3o exo provlima, sto oti den mou emfanizei ta kena kai sta teleutaia grammata xyz den ta kanei abc antoistoixa

aspoume oti paei etsi
κώδικας:


#include <stdio.h>

void main(int args, char *argc[])

{

FILE *infile;
FILE *outfile;

char N;


   infile=fopen("C:/old.txt","r");
   
outfile=fopen("C:/caesar.txt","w");


   

 while(fscanf(infile, "%c ", &N) > 0){
   

N=N+3;


fprintf(outfile,"%c",N);

}

 fclose(outfile);
   fclose(infile);

   
}
dva_dev
Script Master

Μέλος από: 16 Σεπ 2005
Μηνύματα: 256+

View users profile Visit posters website
blog deviantART facebook linkedin 
ΜήνυμαΣτις: 29 Μαη 2006 19:06    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Αυτό που κάνει είναι ότι ψάχνει μέσα στην λέξη που διαβάζει από το αρχείο είναι να βρεί
πόσες φορές υπάρχει η λέξη που δίνεις.
Αν έχεις δώσει εσύ τη λέξη "ΠΑΤΑ" υπολογίζει το μήκος της -> 4 χαρακτήρες.
και διαβάζει από το αρχείο κάποια στιγμή τη λέξη "ΠΑΤ"
Υπολογίζει το μήκος της λέξης "ΠΑΤ" -> 3 χαρακτήρες.
Με το for (...) αγνοεί όλες τις λέξεις που το μήκος της λέξης που διαβάζει από το
αρχείο είναι μικρότερο από το μήκος της λέξης που έδωσες αφού προφανώς δεν θα τη βρεί.
ακόμα και αν η λέξη ήταν "ΠΑΤ" 3 χαρακτήρες ή "ΠΑ" (2 χαρακτήρες) δεν υπάρχει λόγος να ψάξει,
άρα ασχολείται μόνο με λέξεις που είναι τουλάχιστον όσους χαρακτήρες είναι και η λέξη
που έδωσες (τουλάχιστον 4).
Για αυτές τις λέξεις ψάχνει να βρεί αν η λέξη που έδωσες εμφανίζεται και πόσες φορές.
Εστω λοιπόν ότι έχει διαβάσει την λέξη "ΠΑΤΑΤΑΚΙΑ" (8 χαρακτήρες) από το αρχείο.
Συγκρίνει από τον i χαρακτήρα της λέξης αυτής και για 4 χαρακτήρες κάθε φορά (όσο είναι το μήκος
της λέξης που έδωσες) μήπως είναι η λέξη που έδωσες.
Αν είναι αυξάνει τον μετρητή ότι βρέθηκε και συνεχίζει από τον επόμενο χαρακτήρα και μετά.
Αυτό γίνεται μέχρι να φτάσει στους τελευταίους 4 χαρακτήρες, γιατί δεν έχει νόημα να
συνεχίσει παραπέρα με τους τελευταίους 3 ή 2 ή 1 αφού δεν πρόκειται να βρεί τίποτα.
Κάνει τα ίδια με την επόμενη λέξη που διαβάζει από το αρχείο.
Σχηματικά οι συγκρίσεις που γίνονται είναι οι εξής:
κώδικας:
ΠΑΤΑ      (η λέξη που έδωσες)
ΠΑΤΑ----   (η λέξη που διάβασε από το αρχείο). Στο 1ο loop τσεκάρει τους χαρακτήρες (0-3) και την βρίσκει.
-ΑΤΑΤ---   Στο 2ο loop τσεκάρει τους χαρακτήρες (1-4), δεν βρίσκει τίποτα.
--ΤΑΤΑ--   Στο 3ο
---ΑΤΑΚ--   4ο
----ΤΑΚΙ-   5ο
-----ΑΚΙΑ   6ο
         Δεν έχει νόημα να συνεχίσει από εδώ και κάτω δεν πρόκειται να βρεί τίποτα.

Αν η λέξη που είχαμε δώσει ήταν "ΑΤΑ" και η λέξη που είχε διαβάσει ήταν "ΠΑΤΑΤΑΚΙΑ"
Σχηματικά οι συγκρίσεις που γίνονται είναι οι εξής:
κώδικας:
ΑΤΑ         (η λέξη που έδωσες)
ΠΑΤ-----   Στο 1ο loop τσεκάρει τους χαρακτήρες (0-2) δεν βρίσκει τίποτα.
-ΑΤΑ----   Στο 2ο loop τσεκάρει τους χαρακτήρες (1-4), βρίσκει 1η φορά.
--ΤΑΤ---   Στο 3ο loop δεν βρίσκει τίποτα.
---ΑΤΑ---   4ο, βρίσκει πάλι για 2η φορά
----ΤΑΚ--   5ο
-----ΑΚΙ-   6ο
------ΚΙΑ   7ο
         Δεν έχει νόημα να συνεχίσει από εδώ και κάτω δεν πρόκειται να βρεί τίποτα.


Πρέπει να είναι αρκετά κατανοητό (γιατί ίδρωσα να γράφω - δεν έχω και air condition...).
Drink a Pepsi!
soteres2002
S. & H. Moderator

Μέλος από: 05 Μαρ 2004
Βοηθήματα: 1
Νέα: 1
Scripts: 1
Μηνύματα: 256+

Περιοχή: Ιωάννινα
View users profile
ΜήνυμαΣτις: 29 Μαη 2006 19:49    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

basika mono mia mikri paratirisi, an theloume na eimaste pistoi ston arxiko algorithmo prepei na exei antikatastathei me to eksis to tmima elegxou gia to telos tis rois tou arxeiou. opote

while(!feof(stream)) {
....
}

eksalou stin C etsi palebetai auto os sinithos.
dva_dev
Script Master

Μέλος από: 16 Σεπ 2005
Μηνύματα: 256+

View users profile Visit posters website
blog deviantART facebook linkedin 
ΜήνυμαΣτις: 29 Μαη 2006 21:23    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

παράθεση:
λέξη "ΠΑΤΑΤΑΚΙΑ" (8 χαρακτήρες)

άκυρο, είναι 9 χαρακτήρες

παράθεση:
episis gia to 3o exo provlima, sto oti den mou emfanizei ta kena


H fscanf ουσιαστικά κόβει λέξεις/αριθμούς/... στους διαχωριστικούς χαρακτήρες
(κενά, αλλαγή γραμμής, tabs, και ένα σωρό άλλα. Ακόμα δεν μπορείς να ξέρεις αν είναι
ένα κενό ανάμεσα στις λέξεις σου ή 50 για να κάνεις κάποια υπόθεση και να προχωρήσεις,
εκτός και αν θέσεις ΕΣΥ περιορισμούς εξαρχής για τη μορφή του αρχείου, αν και πως θα χωρίζονται οι λέξεις,
αν θα υπάρχουν σημεία στίξης, αλλαγές γραμμής κ.λπ.
Σε μια πιο γενική περίπτωση (που θα πρότεινα) θα μπορούσες:

α) να διαβάσεις το αρχείο (και να κάνεις την αλλαγή χαρακτήρα χαρακτήρα γράφωντας στο αρχείο τον χαρακτήρα που επεξεργάστηκες).
β) να διαβάσεις ολόκληρες γραμμές από το αρχείο, και να επεξεργαστείς χαρακτήρα χαρακτήρα ολόκληρη τη γραμή, και στο τέλος να πας να γράψεις ολόκληρη τη γραμμή στο αρχείο. Κάνεις το ίδιο με την επόμενη γραμμή.

παράθεση:
kai sta teleutaia grammata xyz den ta kanei abc antoistoixa

Αυτό που πρέπει να κάνεις είναι να ελέγχεις αν (μετά την πρόσθεση) έχεις ξεπεράσει το "Z" ή "z"
και να κάνεις μια μετακίνηση στην αρχή (ουσιαστικά αφαιρώντας ολόκληρο το αλφάβητο).

κώδικας:
#include <stdio.h>
#include <ctype.h>

void main(int args, char *argc[])
{
   FILE *infile;
   FILE *outfile;
   char N;

   infile=fopen("C:\\old.txt","r");
   outfile=fopen("C:\\caesar.txt","w");

   while(fread(&N, sizeof(char), 1, infile) > 0)
   {
      //Θα ασχοληθούμε μόνο με τα γράμματα. Κενά, νούμερα, σημεία στίξης κλπ
      //τα αγνοούμε και τα γράφουμε όπως είναι.
      if (isalpha(N))
      {
         N=N+3;
         //Κοιτάμε μήπως πρέπει να μετακινήσουμε το γράμμα στην αρχή του αλφαβήτου
         if ( (N > 'z') ||
             ((N < 'a') && (N > 'Z')) )
         {
            N=N-('Z'-'A'+1);
         }
      }
      fwrite(&N, sizeof(char), 1, outfile);
   }
   fclose(outfile);
   fclose(infile);
}
Εμφάνιση Μηνυμάτων:   
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [10 Μηνύματα] Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » Γλώσσες Προγραμματισμού » C, C++
Τώρα είναι 30 Μαρ 2017 02:42 | All times are UTC + 2


Email This Page to Someone! add to Favorites

     Powered by p h p B B © 2001,2005 p h p B B Group
Για άμεση επικοινωνία με τον διαχειριστή του freestuff.gr στο email: freestuff.gr(παπάκι)gmail.com


Copyright © 1999-2013 Freestuff.gr All Rights Reserved  
Version Aegean, designed by N. Tsaganos