Δημοσιεύτηκε: 12 Αύγ 2011, 18:34
Qdata έγραψε:Επιτέλους το βρήκα!![]()
Με πέδεψε πάρα πολύ αλλά με βοήθησε αφού μέχρι να την λύσω χρησιμοποίησα δείκτες,συναρτήσεις κτλ.Τελικά το μόνο που χρειαζόταν ήταν σκέψη στον τρόπο και όχι στον κώδικα!Να και η λύση:(Συγνώμη που δεν χρησιμοποίησα πολλά σχόλια.Θα προσπαθήσω να κάνω πιο ευανάγνωστο τον κώδικα.)Spoiler: show
Επίσης ξέρω πως η γραμμή:Δεν είναι ότι το καλύτερο για να συγκρίνω την θέση του πίνακα αλλά όταν χρησιμοποιούσα κάτι άλλο που έβγαζε σφάλματα.Spoiler: show
@migf1 Πολύ ωραία η άσκηση!![]()
Προσπάθησα να τρέξω το κώδικα αλλά έβγαζε λάθος για πολλές τιμές.
Απ'ότι είδα αυτό συμβαίνει γιατί δεν ελέγχεις το μήκος των λέξεων να είναι ίδιο,σαν αποτέλεσμα δίνει σωστό αποτέλεσμα ακόμα και όταν οι λέξεις είναι διαφορετικές.Αν δοκιμάσεις aaa και aaasdfgsgfrt θα σου βγάλει ότι είναι σωστό.Ακόμα αν βάλεις ένα γράμμα σαν πρώτη λέξη ότι και να βάλεις στη δεύτερη θα στο πάρει σωστό ακόμα και αν αφήσεις κενή τη λέξη.Αυτό έχει να κάνει μάλλον με τα loops και τις δομές ελέγχου που έχεις βάλει.
Έφτιαξα αυτό φαίνεται να δουλεύει.
- Κώδικας: Επιλογή όλων
#define bool int
#define TRUE 1
#define FALSE 0
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int compare(char *s,char *st,int i)
{
if ( i > -1 )
{
if ( *s != *st)
return FALSE;
return compare(++s,--st,--i);
}
return TRUE;
}
void check_arg(char *arg[] )
{
if (arg[1] == NULL)
{
printf("Δέν έχει δωθεί όρισμα.\n");
exit(EXIT_FAILURE);
}
if (arg[2] == NULL)
{
printf("Δέν έχει δωθεί δεύτερο όρισμα.\n");
exit(EXIT_FAILURE);
}
if ( strlen(arg[1]) != strlen(arg[2]) )
{
printf("Οι λέξεις δέν έχουν το ίδιο μήκος.\n");
exit(EXIT_FAILURE);
}
}
int main(int argc, char *argv[])
{
int len;
bool cmp;
check_arg(argv);
len = strlen(argv[1]) -1;
cmp = compare( argv[1], argv[2] + len, len);
if ( cmp )
printf("Οι λέξεις είναι αντιστραμένες.\n");
else
printf("Δέν είναι αντιστραμένες.\n");
exit(EXIT_SUCCESS);
}
Υ.Γ. Ξέρω οτι δεν ήταν αυτό το ζητούμενο της άσκησης.