Untitled
unknown
plain_text
2 years ago
5.1 kB
7
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