Într-un fișier se întroduce o secvență de caractere (sfîrșitul secvenței este indicat prin întroducerea caracterului *). Să se elaboreze un program prin intermediul căruia va afişe cuvîntul „DA” dacă numărul de vocale este mai mare decît numărul de consoane, în caz contrar să se afişeze cuvîntul „NU”.
In limbajul C
Răspunsuri la întrebare
Răspuns:
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
// 0 -> este consoana
// 1 -> este vocala
// -1 -> nu este caracter alfabetic
static int esteVocala(char caracter) {
// vector cu vocale
char vectorVocale[] = {'a', 'A', 'e', 'E', 'i', 'I', 'o', 'O', 'u', 'U'};
if (isalpha(caracter) == 0) return -1; // dacă caracterul nu este alfabetic
// parcurgem vectorul, dacă caracterul este vocală returnăm 1
for (size_t i = 0; i < sizeof vectorVocale; ++i)
if (vectorVocale[i] == caracter) return 1;
// dacă caracterul nu este vocală atunci el este consoană și returnăm 0
return 0;
}
int main() {
int valReturnata, contorVocale = 0, contorConsoane = 0;
char caracterCurent;
FILE* pFisier;
// Dacă fopen(...) returnează NULL înseamnă că fișierul n-a fost deschis cu succes deci ieșim din program
if ((pFisier = fopen("date.in", "r")) == NULL) {
perror("Eroare");
exit(EXIT_FAILURE);
}
// dacă fișierul s-a deschis cu succes
do {
// preluăm caracterul curent din fișier
caracterCurent = (char)fgetc(pFisier);
// valReturnata va fi 0 dacă e consoană sau 1 dacă e vocală
valReturnata = esteVocala(caracterCurent);
if (valReturnata == 0)
++contorConsoane; // dacă e consoană incrementam contorul pentru consoane
if (valReturnata == 1)
++contorVocale; // dacă este vocală incrementăm contorul pentru consoane
// cât timp caracterulCurent este diferit de * sau nu am ajuns la finalul fișierului
} while (caracterCurent != '*' && !feof(pFisier));
// Dacă contoarele au rămas la 0 înseamnă că nu există vocale și consoane
if (contorVocale == 0 && contorConsoane == 0) {
printf("Nu exista vocale si consoane in fisier!\n");
exit(EXIT_SUCCESS);
}
// Dacă avem număr exact de consoane și vocale
contorVocale == contorConsoane
? printf("Numar egal de vocale si consoane!\n")
// Altfel dacă sunt mai multe vocale afișăm DA altfel NU
: (contorVocale > contorConsoane ? printf("DA\n") : printf("NU\n"));
// Dacă fișierul nu s-a închis cu succes returnează EOF și ieșim din program
if ((valReturnata = fclose(pFisier)) == EOF) exit(EXIT_FAILURE);
// altfel programul s-a încheiat cu succes
return 0;
}