Untitled
unknown
plain_text
2 years ago
5.1 kB
4
Indexable
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <math.h> #define maxo 100 #define maxlo 50 char** o; int nrorase = 1; int maxorase = maxo; char* citeste_oras() { char* o = (char*)malloc(maxlo * sizeof(char)); printf("Introduceti un oras (minim 3 caractere, prima litera mare, restul litere mici): "); scanf("%s", o); if (strlen(o) < 3 || !isupper(o[0])) { printf("Orasul introdus nu respecta conditiile.\n"); free(o); return NULL; } int i; for (i = 1; i < strlen(o); ++i) { if (!islower(o[i])) { printf("Orasul introdus nu respecta conditiile.\n"); free(o); return NULL; } } return o; } void adauga_oras() { char* on = citeste_oras(); if (on != NULL) { if (nrorase >= maxorase) { maxorase *= 2; o = (char**)realloc(o, maxorase * sizeof(char*)); } o[nrorase++] = on; printf("Orasul adaugat: %s\n", on); } } void afiseaza_orase() { int i; printf("Lista de orase:\n"); for (i = 1; i < nrorase; ++i) { printf("%d. %s\n", i, o[i]); } } void oras_maxcaractere() { int lmax = 0, i; char* ocl = NULL; for (i = 1; i < nrorase; ++i) { if (strlen(o[i]) > lmax) { lmax = strlen(o[i]); ocl = o[i]; } } printf("Orasul cu cele mai multe caractere: %s\n", ocl); } void oras_mincaractere() { int lmin = maxlo + 1, i; char* ocs = NULL; for (i = 1; i < nrorase; ++i) { if (strlen(o[i]) < lmin) { lmin = strlen(o[i]); ocs = o[i]; } } printf("Orasul cu cele mai putine caractere: %s\n", ocs); } void sortare_oraseAlfabetic() { int i, j; char** temp; for (i = 1; i < nrorase - 1; ++i) { for (j = i + 1; j < nrorase; ++j) { if (strcmp(o[i], o[j]) > 0) { temp = &o[i]; o[i] = o[j]; o[j] = *temp; } } } printf("Orasele in ordine alfabetica:\n"); afiseaza_orase(); } void lungime_oraseBinar() { int i, j; for (i = 1; i < nrorase; ++i) { printf("Orasul %s: ", o[i]); unsigned char l = strlen(o[i]); for (j = 7; j >= 0; --j) { printf("%d", (l >> j) & 1); } printf("\n"); } } void oras_aparitiiA() { int maxap = 0, i, j; printf("Orasele cu cele mai multe aparitii ale caracterului 'a':\n"); for (i = 1; i < nrorase; ++i) { int c = 0; for (j = 0; j < strlen(o[i]); ++j) { if (o[i][j] == 'a') { c++; } } if (c > maxap) { maxap = c; } } for (i = 1; i < nrorase; ++i) { int c = 0; for (j = 0; j < strlen(o[i]); ++j) { if (o[i][j] == 'a') { c++; } } if (c == maxap) { printf("%s\n", o[i]); } } } void copiere_ultimCaracter() { int l, i; printf("Ultimul caracter din fiecare oras:\n"); for (i = 1; i < nrorase; ++i) { l = strlen(o[i]); printf("%c\n", o[i][l - 1]); } } void puteri2_ultimoras() { int pi, ps, l; l = strlen(o[nrorase - 1]); pi = 1; ps = 1; while (ps < l) { pi = ps; ps *= 2; } printf("Lungimea ultimului oras din sir se regaseste intre 2^%d si 2^%d.\n", (int)(log(pi) / log(2)), (int)(log(ps) / log(2))); } void media_aritmetica() { int i; double s = 0.0; for (i = 1; i < nrorase; ++i) { s += strlen(o[i]); } printf("Media aritmetica a lungimii oraselor din sir: %.2lf\n", s / (nrorase - 1)); } void formeaza_cuvant() { int i; char* nc = (char*)malloc(nrorase * sizeof(char)); for (i = 1; i < nrorase; ++i) { nc[i - 1] = o[i][0]; } nc[nrorase - 1] = '\0'; printf("Noul cuvant format din primul caracter al fiecarui oras: %s\n", nc); free(nc); } int main() { o = (char**)malloc(maxo * sizeof(char*)); o[0] = strdup("Timisoara"); // Evitarea modificării unui șir literal int optiune; do { printf("0. Iesire\n"); printf("1. Adaugare oras nou\n"); printf("2. Afisarea oraselor\n"); printf("3. Afisarea orasului cu cele mai multe caractere\n"); printf("4. Afisarea orasului cu cele mai putine caractere\n"); printf("5. Afisarea oraselor in ordine alfabetica\n"); printf("6. Reprezentarea lungimii oraselor in binar\n"); printf("7. Afisarea orasului/oraselor cu cele mai multe aparitii ale caracterului 'a'\n"); printf("8. Copierea ultimului caracter din fiecare oras si afisarea acestuia\n"); printf("9. Afisarea intre ce puteri ale lui 2 se regaseste lungimea ultimului oras din sir\n"); printf("10. Calcularea mediei aritmetice a lungimii oraselor din sir\n"); printf("11. Formarea unui nou cuvant din primul caracter al fiecarui oras\n"); printf("Introduceti optiunea dvs.: "); scanf("%d", &optiune); switch (optiune) { case 0: printf("Iesire...\n"); break; case 1: adauga_oras(); break; case 2: afiseaza_orase(); break; case 3: oras_maxcaractere(); break; case 4: oras_mincaractere(); break; case 5: sortare_oraseAlfabetic(); break; case 6: lungime_oraseBinar(); break; case 7: oras_aparitiiA(); break; case 8: copiere_ultimCaracter(); break; case 9: puteri2_ultimoras(); break; case 10: media_aritmetica(); break; case 11: formeaza_cuvant(); break; default: printf("Optiune invalida. Incercati din nou.\n"); } } while (optiune != 0); // Eliberarea memoriei for (int i = 0; i < nrorase; ++i) { free(o[i]); } free(o); return 0; }
Editor is loading...
Leave a Comment