Δημοσιεύτηκε: 26 Αύγ 2011, 12:08
από stamatiou
migf1 έγραψε:Για το αραίωμα του κώδικα, παραθέτω πως αραίωσα τον τελευταίο σου για να δω τι κάνει. Βέβαια εκτός από το αραίωμα έκανα και καμιά 100αριά ακόμα αλλαγές :lol: Βασικά έτσι όπως τον έκανα κάνει ακριβώς ότι και ο δικός σου, αλλά άλλαξα ονόματα μεταβλητών, σου έβαλα εναλλακτικές υλοποιήσεις του δικού σου κώδικα (αφήνοντας μέσα σε /*** ... ***/ τις δικές σου υλοποιήσεις) κι έβαλα σχόλια που εξηγούν τι κάνει ο κώδικάς σου. Ειδικά στη main() τα σχόλια ελπίζω να σε βοηθήσουν να καταλάβεις γιατί δεν δουλεύει σωστά το πρόγραμμά σου (είναι αλγοριθμικά εσφαλμένο).

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

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*** DISABLED
#include <ctype.h>
***/

// ---------------------------------------------------------------------------------
int is_vowel( char c )
{
char *s = "aAEeIioOUuYy"; // ορισμός του s με όλα τα φωνήεντα

while ( *s ) // όσο το *s διαφέρει του '\0'
if ( c == *s++ ) // ... αν το c βρεθεί στο s
return 1; // ... ... επέστρεψε TRUE

return 0; // επέστρεψε FALSE

/*** DISABLED
int i;
char s[] = {'a','A','E','e','I','i','o','O','U','u','Y','y','\0'};

for (i=0; i < 12; i++)
{
if (c == s[i]) {
return 1;
}
}

return 0;
***/
}

// ---------------------------------------------------------------------------------
int is_consonant( char c )
{
// ορισμός του s με όλα τα σύμφωνα
char *s = "bBcCdDfFgGhHjJkKlLmMnNpPqQrRsStTvVwWxXzZ";

while ( *s ) // όσο το *s διαφέρει του '\0'
if ( c == *s++ ) // ... αν το c βρεθεί στο s
return 1; // ... ... επέστρεψε TRUE

return 0; // επέστρεψε FALSE

/*** DISABLED
char s[] = {'b','B','c','C','d','D','f','F','g','G','h','H','j','J','k','K','l','L','m','M','n','N','p','P','q','Q','r','R','s','S','t','T','v','V','w','W','x','X','z','Z','\0'};
int i;

for (i=0; i < 40; i++)
{
if (c == s[i]) {
return 1;
}
}

return 0;
***/
}

// ---------------------------------------------------------------------------------
int main( void )
{
int i, vsum=0, osum=0, csum=0, slen; // vowels-sum, others-sum, consonants-sum
char s[256], c;

fgets(s, 256, stdin);
slen = strlen( s );
for (i=0; i < slen; i++)
{
// αν βρεις φωνήεν ενάλλαξέ το με το προηγούμενο φωνήεν που έχεις βρει
if ( is_vowel( s[i] ) ) {
c = s[ vsum ];
s[ vsum++ ] = s[ i ];
s[i] = c;
}
// αν βρεις σύμφωνο ενάλλαξέ το με το προηγούμενο σύμφωνο που έχεις βρει
else if ( is_consonant( s[i] ) ) {
c = s[ csum ];
s[ csum++ ] = s[i];
s[ i ] = c;
}
// αν βρεις άλλο ενάλλαξέ το με το προηγούμενο ομοειδές που έχεις βρει
/*** else if( isprint( s[i] ) ) { ***/
else {
c = s[ osum ];
s[ osum++ ] = s[i];
s[ i ] = c;
}
/*** c = 0; ***/
}

/*** DISABLED
slen = strlen(s);
for (i=0; i < slen; i++)
putchar( s[i] );
putchar('\n');
***/
puts( s );

return 0;
}

Για την εικόνα, πρέπει να αραιώσω ξανά τον κώδικα που της αντιστοιχεί και κυρίως να βρω σε ποιον από όλους τους κώδικες που έχεις ποστάρει αντιστοιχεί :lol:

Η εικόνα αντιστοιχεί στον τελευταίο :D