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

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

Δημοσ.

δεν μπορώ να καταλάβω πως ενώ θα πρέπει να χρησιμοποιήσω πίνακα, θα πρέπει να διαβάζεται από το πληκτρολόγιο ο αριθμός 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 <stdlib.h>
#include <string.h>

#define LINESIZE  (255+1)
#define WORDSIZE  (100+1)

int main( void )
{
char line[ LINESIZE ] = {'\0'};
char *wordlist[ WORDSIZE ];
int nwords = 0;
register int i = 0;

/* get max length of the words list from user */
printf("Poses lejeis? ");
fgets( line, LINESIZE, stdin );
nwords = atoi( line );

/* allocate memory for nwords, each one of size WORDSIZE  */
wordlist = calloc( nwords, WORDSIZE );
if ( !wordlist )
{
       	puts("*** error: out of memory, aborting...");
       	exit( EXIT_FAILURE );
}

/* fill in the words list with user-input */
for (i=0; i < nwords; i++)
{
       	fgets( line, LINESIZE, stdin );
       	line[ strlen(line) - 1 ] = '\0';            	/* remove trailing '\n' */
       	strncpy( wordlist[ i ], line, WORDSIZE-1 );    	/* copy user-input into current position of wordlist */
		...
}
...
/* free allocated memory & exit  */
free( wordlist );
exit( EXIT_SUCCESS );
}

 

 

Δημοσ.

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

Δημοσ.

#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'

Δημοσ.

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

 

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

 

>
  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++;
       }
 }

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

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

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

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

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

Σύνδεση

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

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

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