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

Ευκολη άσκση στην c


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

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

 

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

 

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

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

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

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

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

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

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

Σύνδεση

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

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

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