Brackets in c

Συζητήσεις για την γλώσσα C και C++

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
johnpontios
Δημοσιεύσεις: 2
Εγγραφή: 24 Απρ 2013 00:42

Brackets in c

Δημοσίευση από johnpontios » 24 Απρ 2013 00:48

Παιδιά καλησπέρα έχω μια απορία στην παρακάτω άσκηση.
Αν χρησιμοποιήσουμε στοίβα για την υλοποίηση της τότε πως μπορούμε να κρατάμε τον αριθμό των γραμμών που βρέθηκε το { ή το }.

Δηλαδή κάτι αντίστοιχο με hash map που έχει η java.

Σας ευχαριστώ εξ αρχής.



----------------------------------------------------------------------------------------------------

Ζητείται να υλοποιηθεί πρόγραμμα σε C, το οποίο θα εντοπίζει τις σύνθετες προτάσεις μέσα σε ένα αρχείο κειμένου που περιέχει κώδικα σε γλώσσα C. Το πρόγραμμα όταν ξεκινά θα ζητά από τον χρήστη να πληκτρολογήσει το όνομα του αρχείου που επιθυμεί να ανοίξει. Στη συνέχεια θα πρέπει να τον ενημερώνει για το που ξεκινά η κάθε σύνθετη πρόταση (δηλαδή που υπάρχει ανοιχτό άγκιστρο '{') και που τελειώνει η συγκεκριμένη σύνθετη πρόταση (δηλαδή που υπάρχει κλειστό άγκιστρο '}').

Παράδειγμα 1:

Έστω το αρχείο test1.c με τον παρακάτω κώδικα:
#include <stdio.h>
int main ()
{
int i;
for (i=0;i<10;i++)
{
printf("%d\n",i);
}
}

Εκτέλεση προγράμματος:

Δώσε όνομα αρχείου: test1.c
1η σύνθετη πρόταση:
Ανοίγει στην γραμμή 3
Κλείνει στη γραμμή 9
2η σύνθετη πρόταση:
Ανοίγει στην γραμμή 6
Κλείνει στη γραμμή 8

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

Παράδειγμα 2:
Έστω το αρχείο test2.c με τον παρακάτω κώδικα:
#include <stdio.h>
int main ()
{
int i;
for (i=0;i<10;i++)
{{
printf("%d\n",i);
}
}}

Εκτέλεση προγράμματος:

Δώσε όνομα αρχείου: test2.c
1η σύνθετη πρόταση:
Ανοίγει στην γραμμή 3
Κλείνει στη γραμμή 9 (άγκιστρο 2)
2η σύνθετη πρόταση:
Ανοίγει στην γραμμή 6 (άγκιστρο 1)
Κλείνει στη γραμμή 9 (άγκιστρο 1)
3η σύνθετη πρόταση:
Ανοίγει στην γραμμή 6 (άγκιστρο 2)
Κλείνει στη γραμμή 8
----------------------------------------------------------------------------------------- :D :D

johnpontios
Δημοσιεύσεις: 2
Εγγραφή: 24 Απρ 2013 00:42

Brackets in c

Δημοσίευση από johnpontios » 25 Απρ 2013 02:36

Κώδικας: Επιλογή όλων


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

# define p 100
main&#40;&#41;
&#123;
   char ch, file_name&#91;50&#93;;
   FILE *fp;
   int  line_count=1,open_count=0,close_count=0; 
   int  i=0,j=0;
   int  *a,*b,*c,*d;
   int  zero=0;
    
   printf&#40;"Dose onoma arxeiou&#58;\n"&#41;;
   gets&#40;file_name&#41;;
 
   fp = fopen&#40;file_name,"r"&#41;; // read mode
 
   if&#40; fp == NULL &#41;
   &#123;
      perror&#40;"Error while opening the file.\n"&#41;;
      exit&#40;-1&#41;;
   &#125;
   
   a=&#40;int*&#41;calloc&#40;p,sizeof&#40;int&#41;&#41;;
   b=&#40;int*&#41;calloc&#40;p,sizeof&#40;int&#41;&#41;;
   c=&#40;int*&#41;calloc&#40;p,sizeof&#40;int&#41;&#41;;
   d=&#40;int*&#41;calloc&#40;p,sizeof&#40;int&#41;&#41;;
   
   
   printf&#40;"--------------------------------------------\n"&#41;;
   printf&#40;"The contents of %s file are &#58;\n", file_name&#41;;
 
   while&#40; &#40; ch = fgetc&#40;fp&#41; &#41; != EOF &#41;
   &#123;
      if&#40; ch == '\n'&#41;
      &#123;
         line_count++;
      &#125;
      
      if&#40; ch == '&#123;'&#41;
      &#123;      
          b&#91;i&#93;=++open_count;
          a&#91;i&#93;=line_count;
         i++;
      &#125;
      
        if&#40; ch == '&#125;'&#41;
      &#123;
         c&#91;j&#93;=line_count;
         j++;
      &#125;
   &#125;

      
   
       for&#40;j=0;j<p;j++&#41;
      &#123;
        d&#91;j&#93;=c&#91;p-1-j&#93;; 
      &#125;
   
      
       
     for&#40;i=0;i<p;i++&#41;
    &#123;
                if&#40;d&#91;i&#93;==0&#41;
                &#123;
                      zero++;
                &#125;    
    &#125;
    
     for&#40;i=0;i<p;i++&#41;
    &#123;
                 if&#40;d&#91;i&#93;==0&#41;
                &#123;
                 d&#91;i&#93;=d&#91;zero+i&#93;; 
                &#125;  
    &#125;
 
      
      printf&#40;"--------------------------------------------\n"&#41;;
   
   
   for&#40;i=0;i<p;i++&#41;
    &#123;
                    if&#40;b&#91;i&#93;!=0&#41;
                    &#123;
                    printf&#40;"%di syntheti protasi&#58; \n", b&#91;i&#93;&#41;; 
                    &#125;
                    if&#40;a&#91;i&#93;!=0&#41;
                    &#123;
                    printf&#40;"Anoigei stin grammi %d\n", a&#91;i&#93;&#41;; 
                    printf&#40;"Kleinei sti grammi  %d\n", d&#91;i&#93;&#41;;     
                    &#125;      
                               
    &#125;     
 
   fclose&#40;fp&#41;;
   free&#40;&#41;;
   system&#40;"pause"&#41;;
&#125;
Παίδες έχω φτιάξει τον παραπάνω κώδικα και αντιμετωπίζω ορισμένα θέματα.
Για μικρά αρχεία δουλεύει εντάξει , αλλά για μεγαλύτερα βρίσκει τις σύνθετες προτάσεις αλλά μπερδεύεται στις απλές προτάσεις.
Οποιοδήποτε ιδέα ή σχόλιο θα μου ήτανε χρήσιμη.

Απάντηση

Επιστροφή στο “C, C++”

Μέλη σε σύνδεση

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