Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.
  Στις 30/10/2011 στις 11:26 ΠΜ, nik324 είπε

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

 

Με δομές δεν μπορώ να το λύσω γιατί δεν έχουμε κάνει

Μήπως η άσκηση μπορεί να λύθεί χωρίς πίνακα;;;

 

Αν σας επιτρέπεται να χρησιμοποιήσετε χαρακτηριστικά της αναθεώρησης C99, τότε είναι πολύ απλό:

 

>
...
 int n = 0;

 printf("Poses lejeis? ");
 scanf("%d", &n );

 char words[ n ][ WORDSIZE ];
 int i=0;

 for (i=0; i < n; i++)
 {
// διάβασε εδώ την words[ i ] λέξη
 }
 ...

 

Αν δεν επιτρέπεται χρήση της αναθεώρησης C99, τότε θα πρέπει να χρησιμοποιήσεις δείκτη για τον words[][] και να τον διαχειριστείς δυναμικά (calloc(), free(), κλπ)... τα έχετε μάθει αυτά;

  • Απαντ. 99
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Συχνή συμμετοχή στο θέμα

Δημοσ.

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

Δημοσ.

C99 είναι η τελευταία αναθεώρηση της γλώσσας.

 

Όσο για την άσκηση, εφόσον έχετε ξεκινήσει δείκτες και είναι και οι επόμενες 2 διαλέξεις, μάλλον έτσι θα θέλει να τη λύσετε (δηλαδή με δυναμική διαχείριση μνήμης για τον πίνακα των strings). Φρόντισε να παρακολουθήσεις με μεγάλη προσοχή τις διαλέξεις αυτές, γιατί οι δείκτες και η δυναμική διαχείριση μνήμης είναι έννοιες κλειδιά στη C !

 

Για την ιστορία...

 

 

  Εμφάνιση κρυμμένου περιεχομένου

 

Δημοσ.

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

Δημοσ.

#include<stdio.h>

#include<ctype.h>

#include<string.h>

 

int checkPalindrome( char *s );

 

int main ( void )

{

int i = 0;

int ch;

char s[100];

 

while ((ch = getchar()) != '\n') {

if (isalpha(ch)) {

s = ch;

i++;

}

}

 

if ( checkPalindrome(s) == 1) {

printf("Yes, is a palindrome.\n");

} else {

printf("No, not a palindrome.\n");

}

 

return 0;

 

}

 

int checkPalindrome( char *s )

{

int i = strlen(s)-1;

int j = 0;

 

while (j<=i) {

if(s[j] != s) {

return 0;

}

i--;

j++;

}

return 1;

}

 

 

Αυτός ο κώδικας είναι για να βρίσκει αν μια λέξη είναι παλίδρομο η όχι...Κάποτε δούλεyε άψογα...Τώρα που το τρέχω σε διαφορετικό υπολογιστή δεν δουλεύει καλα...δεν ξέρω αν η αλλαγή υπολογιστή έχει σημασία...Ο ροηγούμενς ήταν 32bit και αυτός 64bit...Xρειάζομαι μια απάντηση γιατί οι ασκήσεις πρέπει να παραδοθούν

Δημοσ.

Βάλε τον κώδικα σε [ code ] .. [ /code ] tags (χωρίς τα κενά) στο ποστ σου για να μπορούμε να το διαβάσουμε σαν άνθρωποι, και σε καμιά ωρίτσα που θα είμαι σπίτι αν δεν με έχει προλάβει άλλος θα το κοιτάξω ;)

Δημοσ.

οκ φίλε σε ευχαιστώ πολύ

 

> #include<stdio.h>
#include<ctype.h>
#include<string.h>

int checkPalindrome( char *s );

int main ( void )
{
  int i = 0;
  int ch;
  char s[100];
  
  while ((ch = getchar()) != '\n') {
     if (isalpha(ch)) {
        s[i] = ch;
        i++;
     }    
  }
  
  if ( checkPalindrome(s) == 1) {
     printf("Yes, is a palindrome.\n");
  } else { 
     printf("No, not a palindrome.\n");
  }
     
  return 0;
  
}
  
int checkPalindrome( char *s )
{
  int i = strlen(s)-1;
  int j = 0;
  
  while (j<=i) {
     if(s[j] != s[i]) {
        return 0;
     }
     i--;
     j++;
  }
  return 1;
} 

Δημοσ.

Έλα με πρόλαβες πριν φύγω, μια χαρά μου φαίνεται ο αλγόριθμος της checkPalindrome() !

 

ΥΓ. Στο 1ο while-loop που διαβάζεις το s, πρόσθεσε μια συνθήκη να μη διαβάζει πάνω από 99 χαρακτήρες, γιατί έτσι άμα σου γράψουν λέξη με πάνω από 99 γράμματα θα κρασάρει το πρόγραμμά σου! Και τον τελικό χαρακτήρα του s (ο 100στός στη χειρότερη περίπτωση) πρέπει να τον κάνεις '\0'

Δημοσ.
  Στις 31/10/2011 στις 8:50 ΜΜ, nik324 είπε

χτες έτρεχε...σήμερα δεν τρέχει....

 

Λοιπόν, άλλαξε το...

 

>
  while (j<=i) {
     if(s[j] != s[i]) {
    	return 0;
     }
     i--;
     j++;
  }

 

σε...

 

>
while ( j <= i && s[j] == s[i] ) {
	i--;
	j++;
}

Δημοσ.

αν βάλω την λέξη anna den δουλεύει...με την λέξη ana δουλεύει κανονικα

 

μισό να το τσεκάρω

 

Undeclared identifier 'j' αυτό βγάζει και το τμημα κώδικα είναι το παρακάτω

>  while ( j <= i && s[j] == s[i] ) {
       if (isalpha(ch)) {
             
              i--;
               j++;
       }
 }

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

  • Δημιουργία νέου...