Informatică, întrebare adresată de sergheinovac8, 8 ani în urmă

Î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 de Apollyon
0

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;

}

Alte întrebări interesante