Upload files to "sfusi"
This commit is contained in:
parent
73f5dc857b
commit
42afe03201
|
@ -0,0 +1,35 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cctype>
|
||||
|
||||
#define SIZE 100+1
|
||||
|
||||
using namespace std;
|
||||
|
||||
char *acronym(char *const str);
|
||||
|
||||
int main(void) {
|
||||
char str[SIZE] = "Organizzazione nazioni unite";
|
||||
|
||||
cout << str << endl;
|
||||
cout << acronym(str) << endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
char *acronym(char *const str) {
|
||||
int w = 0;
|
||||
for (int i = 0; str[i] != '\0'; i++) {
|
||||
if (isalpha(str[i]) && (i == 0 || isspace(str[i - 1]))) {
|
||||
str[w] = toupper(str[i]);
|
||||
w++;
|
||||
}
|
||||
}
|
||||
str[w] = '\0';
|
||||
|
||||
return str;
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
|
||||
Convertire una stringa in alfabeto carbonaro.
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cctype>
|
||||
#include <cstring>
|
||||
|
||||
#define SIZE 100+1
|
||||
|
||||
using namespace std;
|
||||
|
||||
void alfCarbonaro(char mssg[], const char alfCarb[]);
|
||||
|
||||
int main(void) {
|
||||
const char alfCarb[] = "OPGTIVCHE RNMABQLZDUF S";
|
||||
char mssg[SIZE]; // ABCDEFGHI LMNOPQRSTUV Z
|
||||
|
||||
cout << "Inserisci una parola: ";
|
||||
cin >> mssg;
|
||||
|
||||
alfCarbonaro(mssg, alfCarb);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void alfCarbonaro(char mssg[], const char alfCarb[]) {
|
||||
int r;
|
||||
for (int i = 0; mssg[i] != '\0'; i++) {
|
||||
r = toupper(mssg[i]) - 'A';
|
||||
mssg[i] = alfCarb[r];
|
||||
|
||||
if (alfCarb[r] == ' ') {
|
||||
cout << "Parola non valida!" << endl;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
cout << mssg;
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
|
||||
camelCase
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cctype>
|
||||
|
||||
#define SIZE 100+1
|
||||
|
||||
using namespace std;
|
||||
|
||||
char *camelCase(char *const str);
|
||||
|
||||
int main(void) {
|
||||
char str[SIZE];
|
||||
|
||||
cout << "Inserisci una frase: ";
|
||||
cin.getline(str, SIZE);
|
||||
|
||||
camelCase(str);
|
||||
|
||||
cout << "Frase aggiornata: " << str << endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
char *camelCase(char *const str) {
|
||||
if (str[0] == '\0') {
|
||||
return str;
|
||||
}
|
||||
|
||||
str[0] = toupper(str[0]);
|
||||
|
||||
|
||||
int i = 1;
|
||||
while (str[i] != '\0') {
|
||||
if (isalpha(str[i]) && isblank(str[i - 1])) {
|
||||
str[i] = toupper(str[i]);
|
||||
} else {
|
||||
str[i] = tolower(str[i]);
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
return str;
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
|
||||
contaParole
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cctype>
|
||||
|
||||
#define SIZE 100+1
|
||||
|
||||
using namespace std;
|
||||
|
||||
void contaParole(const char *str);
|
||||
|
||||
int main(void) {
|
||||
char str[SIZE];
|
||||
|
||||
cout << "Inserisci una frase: ";
|
||||
cin.getline(str, SIZE);
|
||||
|
||||
contaParole(str);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void contaParole(const char *str) {
|
||||
int count = 0;
|
||||
char oldChr = ' ';
|
||||
|
||||
for (int i = 0; str[i] != '\0'; i++) {
|
||||
if (isspace(oldChr) && !isspace(str[i])) {
|
||||
count++;
|
||||
}
|
||||
oldChr = str[i];
|
||||
}
|
||||
|
||||
cout << count;
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
|
||||
delDigit (come removeDigit)
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cctype>
|
||||
|
||||
#define SIZE 100+1
|
||||
|
||||
using namespace std;
|
||||
|
||||
char *delDigit(char *const str);
|
||||
|
||||
int main(void) {
|
||||
char str[SIZE] = "H3ll0 W0rld! 2025";
|
||||
|
||||
cout << "Before: " << str << endl;
|
||||
|
||||
delDigit(str);
|
||||
|
||||
cout << "After: " << str << endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
char *delDigit(char *const str) {
|
||||
char *dst = str;
|
||||
|
||||
for (char *src = str; *src != '\0'; src++) {
|
||||
if (!isdigit(*src)) {
|
||||
*dst++ = *src;
|
||||
}
|
||||
}
|
||||
|
||||
*dst = '\0';
|
||||
|
||||
return str;
|
||||
}
|
|
@ -0,0 +1,89 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
|
||||
delEvenDigits & delOddDigits
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cctype>
|
||||
#include <iomanip>
|
||||
|
||||
#define SIZE 100+1
|
||||
|
||||
using namespace std;
|
||||
|
||||
char *delEvenDigits(char *const src);
|
||||
char *delOddDigits(char *const dst);
|
||||
|
||||
int main(void) {
|
||||
char src[SIZE] = "25dic2018";
|
||||
char dst[SIZE];
|
||||
|
||||
strcpy(dst, src);
|
||||
|
||||
cout << "Original string: " << setw(10) << src << endl;
|
||||
|
||||
delEvenDigits(src);
|
||||
cout << "delEvenDigit: " << setw(9) << src << endl;
|
||||
|
||||
delOddDigits(dst);
|
||||
cout << "delOddDigit: " << setw(12) << dst << endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Con puntatori
|
||||
char *delEvenDigits(char *const src) {
|
||||
char *w = src;
|
||||
for (char *r = src; *r != '\0'; r++) {
|
||||
if (!isdigit(*r) || (*r - '0') % 2 != 0) {
|
||||
*w++ = *r;
|
||||
}
|
||||
}
|
||||
*w = '\0';
|
||||
|
||||
return src;
|
||||
}
|
||||
|
||||
/* Senza puntatori
|
||||
char *delEvenDigits(char *const src) {
|
||||
int w = 0;
|
||||
for (int r = 0; src[r] != '\0'; r++) {
|
||||
if (!isdigit(src[r]) || (src[r] - '0') % 2 != 0) {
|
||||
src[w++] = src[r];
|
||||
}
|
||||
}
|
||||
src[w] = '\0';
|
||||
|
||||
return src;
|
||||
}
|
||||
*/
|
||||
|
||||
// Con puntatori
|
||||
char *delOddDigits(char *const dst) {
|
||||
char *w = dst;
|
||||
for (char *r = dst; *r != '\0'; r++) {
|
||||
if (!isdigit(*r) || (*r - '0') % 2 == 0) {
|
||||
*w++ = *r;
|
||||
}
|
||||
}
|
||||
*w = '\0';
|
||||
|
||||
return dst;
|
||||
}
|
||||
|
||||
/* Senza puntatori
|
||||
char *delOddDigits(char *const dst) {
|
||||
int w = 0;
|
||||
for (int r = 0; dst[r] != '\0'; r++) {
|
||||
if (!isdigit(dst[r]) || (dst[r] - '0') % 2 == 0) {
|
||||
// Copia
|
||||
dst[w++] = dst[r];
|
||||
}
|
||||
}
|
||||
dst[w] = '\0';
|
||||
|
||||
return dst;
|
||||
}
|
||||
*/
|
|
@ -0,0 +1,53 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
|
||||
dupDigit
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
#include <cctype>
|
||||
|
||||
#define SIZE 100+1
|
||||
|
||||
using namespace std;
|
||||
|
||||
char *dupDigit(char *const str);
|
||||
|
||||
int main(void) {
|
||||
char str[SIZE] = "H3ll0 W0rld! 2025";
|
||||
|
||||
cout << "Before: " << str << endl;
|
||||
|
||||
dupDigit(str);
|
||||
|
||||
cout << "After: " << str << endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Con puntatori
|
||||
char *dupDigit(char *const str) {
|
||||
for (char *r = str; *r != '\0'; r++) {
|
||||
if (isdigit(*r)) {
|
||||
memmove(r + 1, r, strlen(r) + 1);
|
||||
r = r + 1;
|
||||
}
|
||||
}
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
/* Senza puntatori
|
||||
char *dupDigit(char *const str) {
|
||||
for (int i = 0; str[i] != '\0'; i++) {
|
||||
if (isdigit(str[i])) {
|
||||
memmove(&str[i + 1], &str[i], strlen(&str[i]) + 1);
|
||||
i = i + 1;
|
||||
}
|
||||
}
|
||||
|
||||
return str;
|
||||
}
|
||||
*/
|
|
@ -0,0 +1,96 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
|
||||
dupVowels & dupConsonants
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
#include <cctype>
|
||||
#include <iomanip>
|
||||
|
||||
#define SIZE 100+1
|
||||
|
||||
using namespace std;
|
||||
|
||||
bool isVowel(char c);
|
||||
bool isConsonant(char c);
|
||||
char *dupVowels(char *const src);
|
||||
char *dupConsonants(char *const str);
|
||||
|
||||
int main(void) {
|
||||
char src[SIZE] = "12 ottobre 1492";
|
||||
char dst[SIZE];
|
||||
|
||||
strcpy(dst, src);
|
||||
|
||||
cout << "Original string: " << setw(16) << src << endl;
|
||||
|
||||
dupVowels(src);
|
||||
cout << "dupVowels: " << setw(25) << src << endl;
|
||||
|
||||
dupConsonants(dst);
|
||||
cout << "dupConsonants: " << setw(22) << dst << endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool isVowel(char c) {
|
||||
return strchr("aeiou", tolower(c));
|
||||
}
|
||||
|
||||
bool isConsonant(char c) {
|
||||
return strchr("bcdfghjklmnpqrstvwxyz", tolower(c));
|
||||
}
|
||||
|
||||
// Con puntatori
|
||||
char *dupVowels(char *const src) {
|
||||
for (int r = 0; src[r] != '\0'; r++) {
|
||||
if (isVowel(src[r])) {
|
||||
memmove(src + r + 1, src + r, strlen(src + r) + 1);
|
||||
r++;
|
||||
}
|
||||
}
|
||||
|
||||
return src;
|
||||
}
|
||||
|
||||
/* Senza puntatori
|
||||
char *dupVowels(char *const src) {
|
||||
for (int r = 0; src[r] != '\0'; r++) {
|
||||
if (isVowel(src[r])) {
|
||||
memmove(src + r + 1, src + r, strlen(src + r) + 1);
|
||||
r++;
|
||||
}
|
||||
}
|
||||
|
||||
return src;
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
// Con puntatori
|
||||
char *dupConsonants(char *const dst) {
|
||||
for (int r = 0; dst[r] != '\0'; r++) {
|
||||
if (isConsonant(dst[r])) {
|
||||
memmove(dst + r + 1, dst + r, strlen(dst + r) + 1);
|
||||
r++;
|
||||
}
|
||||
}
|
||||
|
||||
return dst;
|
||||
}
|
||||
|
||||
/* Senza puntatori
|
||||
char *dupConsonants(char *const dst) {
|
||||
for (int r = 0; dst[r] != '\0'; r++) {
|
||||
if (isConsonant(dst[r])) {
|
||||
memmove(dst + r + 1, dst + r, strlen(dst + r) + 1);
|
||||
r++;
|
||||
}
|
||||
}
|
||||
|
||||
return dst;
|
||||
}
|
||||
*/
|
|
@ -0,0 +1,53 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
|
||||
#define SIZE 100+1
|
||||
|
||||
using namespace std;
|
||||
|
||||
int isAlpha(char c);
|
||||
int isNum(int c);
|
||||
|
||||
int main(void) {
|
||||
char src[SIZE];
|
||||
|
||||
cin.getline(src, SIZE);
|
||||
|
||||
if (strlen(src) != 16) {
|
||||
cout << "Codice fiscale incorretto!" << endl;
|
||||
}
|
||||
|
||||
bool codiceFiscale = true;
|
||||
|
||||
for (int i = 0; i < 16; i++) {
|
||||
if ((i < 6 && !isAlpha(src[i])) ||
|
||||
(i >= 6 && i < 8 && !isNum(src[i])) ||
|
||||
(i == 8 && !isAlpha(src[i])) ||
|
||||
(i >= 9 && i < 11 && !isNum(src[i])) ||
|
||||
(i == 11 && !isAlpha(src[i])) ||
|
||||
(i >= 12 && i < 15 && !isNum(src[i])) ||
|
||||
(i == 15 && !isAlpha(src[i]))) {
|
||||
codiceFiscale = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (codiceFiscale) {
|
||||
cout << "Codice fiscale corretto!" << endl;
|
||||
} else {
|
||||
cout << "Codice fiscale incorretto!" << endl;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int isAlpha(char c) {
|
||||
return (c >= 'A' && c<= 'Z') || (c >= 'a' && c<= 'z');
|
||||
}
|
||||
|
||||
int isNum(int c) {
|
||||
return (c >= '0' && c <= '9');
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
|
||||
Generare una parola a caso (sicuramente pronunciabile), esempio: MUSETO.
|
||||
Consonanti = "BCDFGLMNPRSTVZ".
|
||||
Vocali = "AEIOU".
|
||||
Ogni sillaba è consonante + vocale, esempio: BA.
|
||||
Il numero di sillabe viene deciso da input o in modo randomico.
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cstdlib>
|
||||
#include <ctime>
|
||||
|
||||
#define MIN_SILLABE 2
|
||||
#define MAX_SILLABE 5
|
||||
|
||||
using namespace std;
|
||||
|
||||
void creaParola(const char strVowel[], const char strConsonant[], int n);
|
||||
|
||||
int main(void) {
|
||||
srand(time(NULL));
|
||||
|
||||
const char strVowel[] = "AEIOU";
|
||||
const char strConsonant[] = "BCDFGLMNPRSTVZ";
|
||||
|
||||
int n = rand() % (MAX_SILLABE - MIN_SILLABE + 1) + MIN_SILLABE;
|
||||
cout << "Numero di sillabe: " << n << endl;
|
||||
|
||||
creaParola(strVowel, strConsonant, n);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void creaParola(const char strVowel[], const char strConsonant[], int n) {
|
||||
int size = (n * 2) + 1;
|
||||
char strParola[size];
|
||||
int index = 0;
|
||||
|
||||
for (int i = 0; i < n; i++) {
|
||||
strParola[index++] = strConsonant[rand() % 14];
|
||||
strParola[index++] = strVowel[rand() % 5];
|
||||
}
|
||||
|
||||
strParola[index] = '\0';
|
||||
cout << "Parola generata: " << strParola << endl;
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
|
||||
Generare una parola a caso (sicuramente pronunciabile), esempio: MUSETO.
|
||||
Consonanti = "BCDFGLMNPRSTVZ".
|
||||
Vocali = "AEIOU".
|
||||
Ogni sillaba è consonante + vocale, esempio: BA.
|
||||
Il numero di sillabe viene deciso da input o in modo randomico.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <iostream>
|
||||
#define N_SILL 4
|
||||
|
||||
using namespace std;
|
||||
|
||||
void generaParola(int numSillabe, char* parola, int maxLen);
|
||||
|
||||
int main() {
|
||||
const int MAX_LEN = 20;
|
||||
char parolaGenerata[MAX_LEN];
|
||||
|
||||
srand((unsigned)time(NULL));
|
||||
int numSillabe = rand() % 3 + 2;
|
||||
|
||||
generaParola(numSillabe, parolaGenerata, MAX_LEN);
|
||||
|
||||
printf("Parola generata: %s\n", parolaGenerata);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void generaParola(int numSillabe, char* parola, int maxLen) {
|
||||
const char consonanti[] = "BCDFGLMNPRSTVZ";
|
||||
const char vocali[] = "AEIOU";
|
||||
|
||||
parola[0] = '\0';
|
||||
|
||||
int currentLen = 0;
|
||||
|
||||
for (int i = 0; i < numSillabe; i++) {
|
||||
if (currentLen + 2 >= maxLen) break;
|
||||
|
||||
char sillaba[3];
|
||||
sillaba[0] = consonanti[rand() % (sizeof(consonanti) - 1)];
|
||||
sillaba[1] = vocali[rand() % (sizeof(vocali) - 1)];
|
||||
sillaba[2] = '\0';
|
||||
|
||||
strcat(parola, sillaba);
|
||||
currentLen += 2;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
|
||||
#define SIZE 100+1
|
||||
|
||||
using namespace std;
|
||||
|
||||
void codificaMessaggio(char dst[], const char alfDecod[], const char alfCod[]);
|
||||
char *strcpy(char * const dst, const char *src);
|
||||
|
||||
int main(void) {
|
||||
char src[SIZE];
|
||||
char dst[SIZE];
|
||||
const char alfDecod[] = "AaBbCcDdEeFfGgHhIiLlMmNnOoPpQqRrSsTtUuVvZz";
|
||||
const char alfCod[] = "OoPpGgTtIiVvCcHhEeRrNnMmAaBbQqLlZzDdUuFfSs";
|
||||
|
||||
cout << "";
|
||||
cin.getline(src, SIZE);
|
||||
|
||||
*strcpy(dst, src);
|
||||
|
||||
codificaMessaggio(dst, alfDecod, alfCod);
|
||||
|
||||
cout << "" << dst << endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void codificaMessaggio(char dst[], const char alfDecod[], const char alfCod[]) {
|
||||
for (int i = 0; i < strlen(dst); i++) {
|
||||
if ((dst[i] >= 'A' && dst[i] <= 'Z') || (dst[i] >= 'a' && dst[i] <= 'z')) {
|
||||
for (int j = 0; j < strlen(alfCod); j++) {
|
||||
if (dst[i] == alfDecod[j]) {
|
||||
dst[i] = alfCod[j];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
char *strcpy(char * const dst, const char *src) {
|
||||
size_t i;
|
||||
for (i = 0; src[i] != '\0'; i++) {
|
||||
dst[i] = src[i];
|
||||
}
|
||||
dst[i] = '\0';
|
||||
return dst;
|
||||
}
|
|
@ -0,0 +1,58 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
|
||||
Concatenare le parole casuali in una stringa frase:
|
||||
- separate da un numero casuale di spazi compreso tra 1 e 3.
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cstdlib>
|
||||
#include <ctime>
|
||||
|
||||
#define MIN_SILLABE 2
|
||||
#define MAX_SILLABE 3
|
||||
|
||||
#define MIN_SPAZI 1
|
||||
#define MAX_SPAZI 3
|
||||
|
||||
using namespace std;
|
||||
|
||||
void creaParola(const char strVowel[], const char strConsonant[], const char strSpazio[], int sillabe, int spazi);
|
||||
|
||||
int main(void) {
|
||||
srand(time(NULL));
|
||||
|
||||
const char strVowel[] = "AEIOU";
|
||||
const char strConsonant[] = "BCDFGLMNPRSTVZ";
|
||||
const char strSpazio[] = " ";
|
||||
|
||||
int sillabe = rand() % (MAX_SILLABE - MIN_SILLABE + 1) + MIN_SILLABE;
|
||||
|
||||
int spazi = rand() % (MAX_SPAZI - MIN_SPAZI + 1) + MIN_SPAZI;
|
||||
cout << "Numero di spazi: " << spazi << endl;
|
||||
|
||||
creaParola(strVowel, strConsonant, strSpazio, sillabe, spazi);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void creaParola(const char strVowel[], const char strConsonant[], const char strSpazio[], int sillabe, int spazi) {
|
||||
int size = (sillabe * 2 * (spazi + 1)) + spazi + 1;
|
||||
char strParola[size];
|
||||
int index = 0;
|
||||
|
||||
for (int i = 0; i < spazi + 1; i++) {
|
||||
for (int j = 0; j < sillabe; j++) {
|
||||
strParola[index++] = strConsonant[rand() % 14];
|
||||
strParola[index++] = strVowel[rand() % 5];
|
||||
}
|
||||
if (i < spazi) {
|
||||
sillabe = rand() % (MAX_SILLABE - MIN_SILLABE + 1) + MIN_SILLABE;
|
||||
strParola[index++] = strSpazio[0];
|
||||
}
|
||||
}
|
||||
|
||||
strParola[index] = '\0';
|
||||
cout << "Frase generata: " << strParola << endl;
|
||||
}
|
|
@ -0,0 +1,72 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
|
||||
Genarare una password che soddisfa i criteri:
|
||||
- Presenza di almeno una:
|
||||
- minuscola;
|
||||
- maiuscola;
|
||||
- cifra;
|
||||
- punteggiatura;
|
||||
- Lunghezza della password compresa fra 8 e 12 caratteri;
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <ctime>
|
||||
#include <cstdlib>
|
||||
|
||||
#define SIZE 12
|
||||
|
||||
#define NSTAMPA_MIN 5
|
||||
#define NSTAMPA_MAX 6
|
||||
|
||||
#define CARATTERI_MIN 2
|
||||
#define CARATTERI_MAX 3
|
||||
|
||||
#define MINUSCOLA_MIN 97
|
||||
#define MINUSCOLA_MAX 122
|
||||
|
||||
#define MAIUSCOLA_MIN 65
|
||||
#define MAIUSCOLA_MAX 90
|
||||
|
||||
#define CIFRA_MIN 48
|
||||
#define CIFRA_MAX 57
|
||||
|
||||
#define PUNTEGGIATURA_MIN 33
|
||||
#define PUNTEGGIATURA_MAX 47
|
||||
|
||||
using namespace std;
|
||||
|
||||
void generaPassword(int size, char nMinuscola[], char nMaiuscola[], char nCifra[], char nPunteggiatura[], char nCaratteri);
|
||||
|
||||
int main(void) {
|
||||
srand(time(NULL));
|
||||
|
||||
char nMinuscola[SIZE];
|
||||
char nMaiuscola[SIZE];
|
||||
char nCifra[SIZE];
|
||||
char nPunteggiatura[SIZE];
|
||||
char nCaratteri;
|
||||
|
||||
generaPassword(SIZE, nMinuscola, nMaiuscola, nCifra, nPunteggiatura, nCaratteri);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void generaPassword(int size, char nMinuscola[], char nMaiuscola[], char nCifra[], char nPunteggiatura[], char nCaratteri) {
|
||||
int nStampa = rand() % (NSTAMPA_MAX - NSTAMPA_MIN + 1) + NSTAMPA_MIN;
|
||||
for (int j = 0; j < nStampa; j++) {
|
||||
nCaratteri = rand() % (CARATTERI_MAX - CARATTERI_MIN + 1) + CARATTERI_MIN;
|
||||
for (int i = 0; i < nCaratteri; i++) {
|
||||
nMinuscola[i] = rand() % (MINUSCOLA_MAX - MINUSCOLA_MIN + 1) + MINUSCOLA_MIN;
|
||||
cout << nMinuscola[i];
|
||||
nMaiuscola[i] = rand() % (MAIUSCOLA_MAX - MAIUSCOLA_MIN + 1) + MAIUSCOLA_MIN;
|
||||
cout << nMaiuscola[i];
|
||||
nCifra[i] = rand() % (CIFRA_MAX - CIFRA_MIN + 1) + CIFRA_MIN;
|
||||
cout << nCifra[i];
|
||||
nPunteggiatura[i] = rand() % (PUNTEGGIATURA_MAX - PUNTEGGIATURA_MIN + 1) + PUNTEGGIATURA_MIN;
|
||||
cout << nPunteggiatura[i];
|
||||
}
|
||||
cout << endl;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
|
||||
Scrivere una funzione che stampi la stringa ricevuta
|
||||
e anche la sequenza di codici ASCII corrispondenti.
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
|
||||
#define SIZE 100+1
|
||||
|
||||
using namespace std;
|
||||
|
||||
void stampaAscii(char *src);
|
||||
|
||||
int main(void) {
|
||||
char src[SIZE];
|
||||
|
||||
cin.getline(src, SIZE);
|
||||
|
||||
stampaAscii(src);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void stampaAscii(char *src) {
|
||||
char chr;
|
||||
int asciiCode;
|
||||
for (int i = 0; i < strlen(src); i++) {
|
||||
chr = src[i];
|
||||
asciiCode = chr;
|
||||
cout << chr << "(" << asciiCode << ")" << " ";
|
||||
}
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
|
||||
Scrivere una funzione che stampi tutti i codici ASCII:
|
||||
- attenzione ai caratteri non stampabili;
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <numeric>
|
||||
|
||||
#define SIZE 94
|
||||
|
||||
using namespace std;
|
||||
|
||||
void stampaArrayChr(char *arrChr, int size);
|
||||
|
||||
int main(void) {
|
||||
char arrChr[SIZE];
|
||||
// int nChr = sizeof(arrChr) / sizeof(arrChr[0]);
|
||||
|
||||
// iota(arrChr, arrChr + nChr, '!');
|
||||
|
||||
stampaArrayChr(arrChr, SIZE);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void stampaArrayChr(char *arrChr, int size) {
|
||||
for (int i = 0; i < SIZE; i++) {
|
||||
arrChr[i] = '!';
|
||||
arrChr[i] = arrChr[i] + i;
|
||||
}
|
||||
|
||||
for (int i = 0; i < size; i++) {
|
||||
cout << arrChr[i] << " ";
|
||||
}
|
||||
cout << endl;
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
|
||||
#define SIZE 100+1
|
||||
|
||||
using namespace std;
|
||||
|
||||
int isLower(char c) {
|
||||
return (c >= 'a' && c <= 'z');
|
||||
}
|
||||
|
||||
int toUpper(char c) {
|
||||
if (isLower(c)) {
|
||||
return c - ('a' - 'A');
|
||||
}
|
||||
return c;
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
char src[SIZE];
|
||||
|
||||
cin.getline(src, SIZE);
|
||||
|
||||
bool nuovaParola = true;
|
||||
|
||||
for (int i = 0; i < strlen(src); i++) {
|
||||
if (nuovaParola && isLower(src[i])) {
|
||||
src[i] = toUpper(src[i]);
|
||||
}
|
||||
nuovaParola = (src[i] == ' ');
|
||||
}
|
||||
|
||||
cout << src << endl;
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,76 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <ctime>
|
||||
|
||||
#define USO 20
|
||||
#define DIM 2000
|
||||
#define VMAX 'z'
|
||||
#define VMIN 'a'
|
||||
|
||||
using namespace std;
|
||||
|
||||
typedef struct{
|
||||
char ch1;
|
||||
char ch2;
|
||||
}elemento;
|
||||
|
||||
typedef struct{
|
||||
int CVU; //coppie vocali uguali
|
||||
int CCU; //coppie consonanti uguali
|
||||
int posizioni[DIM];
|
||||
}result;
|
||||
|
||||
void initArray(elemento arr[], int size){
|
||||
for(int i= 0; i < size ; i++){
|
||||
arr[i].ch1 = rand()%(VMAX-VMIN+1)+VMIN;
|
||||
arr[i].ch2 = rand()%(VMAX-VMIN+1)+VMIN;
|
||||
}
|
||||
}
|
||||
void stampaArray(elemento arr[], int size){
|
||||
for(int i= 0; i < size ; i++){
|
||||
if(arr[i].ch1 == arr[i].ch2){
|
||||
cout << arr[i].ch1 << endl;
|
||||
cout << arr[i].ch2 << endl;
|
||||
cout << endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
result risultato(elemento arr[], int size){
|
||||
int index=0;
|
||||
result risultato = {0,0,0};
|
||||
for(int i = 0; i<size ; i++){
|
||||
if(arr[i].ch1 == arr[i].ch2){
|
||||
risultato.posizioni[index]=i;
|
||||
index++;
|
||||
|
||||
if(arr[i].ch1 == 'a' || arr[i].ch1 == 'e' || arr[i].ch1 == 'i' || arr[i].ch1 == 'o' || arr[i].ch1 == 'u'){
|
||||
risultato.CVU++;
|
||||
}
|
||||
else{
|
||||
risultato.CCU++;
|
||||
}
|
||||
}
|
||||
}
|
||||
return risultato;
|
||||
}
|
||||
|
||||
int main(void){
|
||||
srand(time(NULL));
|
||||
elemento arr[DIM];
|
||||
initArray(arr,USO);
|
||||
stampaArray(arr,USO);
|
||||
result Result = risultato(arr,USO);
|
||||
cout<<"Indici di posizone degli elementi uguali: ";
|
||||
for(int loop=0;loop<Result.CCU+Result.CVU;loop++){
|
||||
cout<<Result.posizioni[loop]<<" ";
|
||||
}
|
||||
cout<<endl;
|
||||
cout<< "Coppie consonanti uguali:" <<Result.CCU<<endl;
|
||||
cout<< "Coppie vocali uguali:" <<Result.CVU<<endl;
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,66 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
Classe: 3AIN
|
||||
|
||||
Inizializzare un array di elemento con una capacità massima
|
||||
di 100 o di SIZE con le lettere dell'alfabeto e 0 nel campo numerico.
|
||||
|
||||
Contare le occorrenze delle lettere e memorizzarne il valore nell'array.
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
#include <cctype>
|
||||
|
||||
#define SIZE 100
|
||||
|
||||
using namespace std;
|
||||
|
||||
typedef struct {
|
||||
char car;
|
||||
int num;
|
||||
} elemento;
|
||||
|
||||
void init(elemento arr[], int size) {
|
||||
for (int i = 0; i < size; i++) {
|
||||
arr[i].car = 'A' + i;
|
||||
arr[i].num = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void stampa(elemento arr[], int size) {
|
||||
for (int i = 0; i < size; i++) {
|
||||
cout << arr[i].car << ": " << arr[i].num << endl;
|
||||
}
|
||||
}
|
||||
|
||||
void conta(elemento arr[], char str[], int size) {
|
||||
|
||||
for (int i = 0; str[i] != '\0'; i++) {
|
||||
int j = 0;
|
||||
while (str[i] != arr[j].car) {
|
||||
j++;
|
||||
}
|
||||
arr[j].num++;
|
||||
}
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
elemento arr[SIZE];
|
||||
int lunghezzaAlfabeto = ('Z' - 'A') + 1;
|
||||
char str[SIZE];
|
||||
|
||||
cout << "Inserisci una parola: ";
|
||||
cin.getline(str, SIZE);
|
||||
|
||||
for (int i = 0; str[i] != '\0'; i++) {
|
||||
str[i] = toupper(str[i]);
|
||||
}
|
||||
|
||||
init(arr, lunghezzaAlfabeto);
|
||||
conta(arr, str, lunghezzaAlfabeto);
|
||||
stampa(arr, lunghezzaAlfabeto);
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,87 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
|
||||
Contare il numero di vocali minuscole e
|
||||
maiuscole contenute in una frase data in input.
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
|
||||
#define SIZE 100+1
|
||||
|
||||
using namespace std;
|
||||
|
||||
typedef struct{
|
||||
int nVocMin;
|
||||
int nVocMai;
|
||||
} result;
|
||||
|
||||
result vocali (char str[], int size);
|
||||
bool isVocMin(char chr);
|
||||
bool isVocMai(char chr);
|
||||
|
||||
int main (void){
|
||||
char str[SIZE];
|
||||
result risultato;
|
||||
|
||||
cout << "Inserisci una frase: ";
|
||||
cin.getline(str, SIZE);
|
||||
|
||||
risultato = vocali(str, sizeof(str)/sizeof(str[0]));
|
||||
|
||||
cout << endl << "Numero di vocali minuscole: " << risultato.nVocMin << endl;
|
||||
cout << "Numero di vocali maiuscole: " << risultato.nVocMai << endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
result vocali (char str[], int size){
|
||||
result res = {0, 0};
|
||||
|
||||
for(int i = 0; i < size; i++){
|
||||
|
||||
if(isVocMin(str[i])){
|
||||
res.nVocMin++;
|
||||
}
|
||||
|
||||
if(isVocMai(str[i])){
|
||||
res.nVocMai++;
|
||||
}
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
bool isVocMin(char chr){
|
||||
bool isMin = false;
|
||||
|
||||
if(
|
||||
chr == 'a' ||
|
||||
chr == 'e' ||
|
||||
chr == 'i' ||
|
||||
chr == 'o' ||
|
||||
chr == 'u'
|
||||
){
|
||||
isMin = true;
|
||||
}
|
||||
|
||||
return isMin;
|
||||
}
|
||||
|
||||
bool isVocMai(char chr){
|
||||
bool isMai = false;
|
||||
|
||||
if (
|
||||
chr == 'A' ||
|
||||
chr == 'E' ||
|
||||
chr == 'I' ||
|
||||
chr == 'O' ||
|
||||
chr == 'U'
|
||||
){
|
||||
isMai = true;
|
||||
}
|
||||
|
||||
return isMai;
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
|
||||
formattaData
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cstdio>
|
||||
#include <cstring>
|
||||
|
||||
#define SIZE 100+1
|
||||
#define NUM_MESI 12
|
||||
|
||||
using namespace std;
|
||||
|
||||
void formattaData(char *const data);
|
||||
|
||||
int main(void) {
|
||||
char data[SIZE];
|
||||
|
||||
cout << "Inserisci una data: ";
|
||||
cin.getline(data, SIZE);
|
||||
|
||||
formattaData(data);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void formattaData(char *const data) {
|
||||
const char *mesi[NUM_MESI] = {"gennaio", "febbraio", "marzo", "aprile", "maggio", "giugno", "luglio", "agosto", "settembre", "ottobre", "novembre", "dicembre"};
|
||||
int gg;
|
||||
int mm;
|
||||
int aaaa;
|
||||
|
||||
sscanf(data, "%d/%d/%d", &gg, &mm, &aaaa);
|
||||
|
||||
if (mm < 0 || mm > NUM_MESI || mm == 0) {
|
||||
cout << "Mese inserito non valido!" << endl;
|
||||
return;
|
||||
}
|
||||
|
||||
sprintf(data, "%02i %s %04i", gg, mesi[mm - 1], aaaa);
|
||||
|
||||
cout << "Data formattata: " << data << endl;
|
||||
}
|
|
@ -0,0 +1,58 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
|
||||
getDigit
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cctype>
|
||||
|
||||
#define SIZE 100+1
|
||||
|
||||
using namespace std;
|
||||
|
||||
char *getDigit(char *const str);
|
||||
|
||||
int main(void) {
|
||||
char str[SIZE] = "H3ll0 W0rld! 2025";
|
||||
|
||||
cout << "Before: " << str << endl;
|
||||
|
||||
getDigit(str);
|
||||
|
||||
cout << "After: " << str << endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Con puntatori
|
||||
char *getDigit(char *const str) {
|
||||
char *w = str;
|
||||
|
||||
for (char *r = str; *r != '\0'; r++) {
|
||||
if (isdigit(*r)) {
|
||||
*w++ = *r;
|
||||
}
|
||||
}
|
||||
|
||||
*w = '\0';
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
/* Senza puntatori
|
||||
char *getDigit(char *const str) {
|
||||
int w = 0;
|
||||
|
||||
for (int r = 0; str[r] != '\0'; r++) {
|
||||
if (isdigit(str[r])) {
|
||||
str[w++] = str[r];
|
||||
}
|
||||
}
|
||||
|
||||
str[w] = '\0';
|
||||
|
||||
return str;
|
||||
}
|
||||
*/
|
|
@ -0,0 +1,70 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
|
||||
isAnagram
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
#include <cctype>
|
||||
|
||||
#define SIZE 100+1
|
||||
#define NUM_LETT 26
|
||||
|
||||
using namespace std;
|
||||
|
||||
bool isAnagram(char *src1, char *src2);
|
||||
|
||||
int main(void) {
|
||||
char src1[SIZE];
|
||||
char src2[SIZE];
|
||||
|
||||
cout << "Prima parola: ";
|
||||
cin.getline(src1, SIZE);
|
||||
|
||||
cout << "Seconda parola: ";
|
||||
cin.getline(src2, SIZE);
|
||||
|
||||
if (isAnagram(src1, src2)) {
|
||||
cout << "Le due parole sono anagrammi." << endl;
|
||||
} else {
|
||||
cout << "Le due parole non sono anagrammi." << endl;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool isAnagram(char *src1, char *src2) {
|
||||
for (int i = 0; i < strlen(src1); i++) {
|
||||
src1[i] = tolower(src1[i]);
|
||||
}
|
||||
|
||||
for (int i = 0; i < strlen(src2); i++) {
|
||||
src2[i] = tolower(src2[i]);
|
||||
}
|
||||
|
||||
if (strlen(src1) != strlen(src2)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (int i = 0; i < strlen(src1); i++) {
|
||||
if (strchr(src2, src1[i]) == NULL) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
int count[26] = {0};
|
||||
for (int i = 0; i < strlen(src1); i++) {
|
||||
count[tolower(src1[i]) - 'a']++;
|
||||
count[tolower(src2[i]) - 'a']--;
|
||||
}
|
||||
|
||||
for (int i = 0; i < NUM_LETT; i++) {
|
||||
if (count[i] != 0) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
|
@ -0,0 +1,82 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
|
||||
isMonovocalic
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cctype>
|
||||
|
||||
#define SIZE 30+1
|
||||
|
||||
using namespace std;
|
||||
|
||||
/*
|
||||
int isConsonant(char c);
|
||||
*/
|
||||
|
||||
int isVowel(char c);
|
||||
void isMonovocalic(const char *str);
|
||||
|
||||
int main(void) {
|
||||
char str[SIZE];
|
||||
|
||||
cout << "Inserisci una parola: ";
|
||||
cin >> str;
|
||||
|
||||
for (int i = 0; str[i] != '\0'; i++) {
|
||||
str[i] = toupper(str[i]);
|
||||
}
|
||||
|
||||
isMonovocalic(str);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
int isConsonant(char c) {
|
||||
return ((c >= 'A' && c <= 'Z') || (c > 'a' && c <= 'z'))
|
||||
&& !isVowel(c);
|
||||
}
|
||||
*/
|
||||
|
||||
int isVowel(char c) {
|
||||
return c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U'
|
||||
|| c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u';
|
||||
}
|
||||
|
||||
void isMonovocalic(const char *str) {
|
||||
bool isA = false;
|
||||
bool isE = false;
|
||||
bool isI = false;
|
||||
bool isO = false;
|
||||
bool isU = false;
|
||||
|
||||
for (int i = 0; str[i] != '\0'; i++) {
|
||||
if (str[i] == 'A') {
|
||||
isA = true;
|
||||
} else if (str[i] == 'E') {
|
||||
isE = true;
|
||||
} else if (str[i] == 'I') {
|
||||
isI = true;
|
||||
} else if (str[i] == 'O') {
|
||||
isO = true;
|
||||
} else if (str[i] == 'U') {
|
||||
isU = true;
|
||||
}
|
||||
}
|
||||
|
||||
int vowelCount = 0;
|
||||
if (isA) vowelCount++;
|
||||
if (isE) vowelCount++;
|
||||
if (isI) vowelCount++;
|
||||
if (isO) vowelCount++;
|
||||
if (isU) vowelCount++;
|
||||
|
||||
if (vowelCount == 1) {
|
||||
cout << "Parola monovocalica" << endl;
|
||||
} else {
|
||||
cout << "Parola non monovocalica" << endl;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
|
||||
isPangram
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
#include <cctype>
|
||||
|
||||
#define SIZE 100+1
|
||||
|
||||
using namespace std;
|
||||
|
||||
bool isPangram(char *src1);
|
||||
|
||||
int main(void) {
|
||||
char src1[SIZE];
|
||||
|
||||
cout << "Prima frase: ";
|
||||
cin.getline(src1, SIZE);
|
||||
|
||||
if (isPangram(src1)) {
|
||||
cout << "La fare e' un Pangramma." << endl;
|
||||
} else {
|
||||
cout << "La frase non e' un pangramma." << endl;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool isPangram(char *src1) {
|
||||
for (int i = 0; i < strlen(src1); i++) {
|
||||
src1[i] = tolower(src1[i]);
|
||||
}
|
||||
|
||||
for (char ch = 'a'; ch <= 'z'; ch++) {
|
||||
bool letterFound = false;
|
||||
|
||||
for (int i = 0; i < strlen(src1); i++) {
|
||||
if (src1[i] == ch) {
|
||||
letterFound = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!letterFound) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
|
@ -0,0 +1,58 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
#include <cctype>
|
||||
|
||||
#define SIZE 100+1
|
||||
|
||||
using namespace std;
|
||||
|
||||
bool isVowel(char chr);
|
||||
bool isSymmetricVowel(const char *const str);
|
||||
|
||||
int main(void) {
|
||||
char str[SIZE];
|
||||
|
||||
cout << "Inserisci una parola: ";
|
||||
cin.getline(str, SIZE);
|
||||
|
||||
if (isSymmetricVowel(str)) {
|
||||
cout << "Le vocali sono simmetriche!" << endl;
|
||||
} else {
|
||||
cout << "Le vocali non sono simmetriche!" << endl;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool isVowel(char chr) {
|
||||
return (chr == 'A' || chr == 'a'
|
||||
|| chr == 'E' || chr == 'e'
|
||||
|| chr == 'I' || chr == 'i'
|
||||
|| chr == 'O' || chr == 'o'
|
||||
|| chr == 'U' || chr == 'u');
|
||||
}
|
||||
|
||||
bool isSymmetricVowel(const char *const str) {
|
||||
if (*str != '\0') {
|
||||
for (const char *pl = str, *pr = str + strlen(str) - 1; pl < pr; pl++, pr--) {
|
||||
while (*pl != '\0' && !isVowel(*pl)) {
|
||||
pl++;
|
||||
}
|
||||
|
||||
while (pr >= str && !isVowel(*pr)) {
|
||||
pr--;
|
||||
}
|
||||
|
||||
if (pl < pr && tolower(*pl) != tolower(*pr)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
|
||||
parolaCensurata
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
|
||||
#define SIZE 100+1
|
||||
|
||||
using namespace std;
|
||||
|
||||
char *parolaCensurata(char *const str, const char *substr);
|
||||
|
||||
int main(void) {
|
||||
char str[] = "fuck all the world!";
|
||||
const char substr[] = "fuck";
|
||||
|
||||
cout << "Frase originale: " << str << endl;
|
||||
|
||||
cout << "Frase censurata: " << parolaCensurata(str, substr);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
char *parolaCensurata(char *const str, const char *substr) {
|
||||
int len = strlen(substr);
|
||||
|
||||
for (char *pc = str; (pc = strstr(pc, substr)) != NULL; pc = pc + len) {
|
||||
memset(pc + 1, '*', len - 2);
|
||||
}
|
||||
|
||||
return str;
|
||||
}
|
|
@ -0,0 +1,62 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
|
||||
pigLatin
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
|
||||
#define SIZE 100+1
|
||||
|
||||
using namespace std;
|
||||
|
||||
bool isVowel(char chr);
|
||||
void pigLatin(char *mssg);
|
||||
|
||||
int main(void) {
|
||||
char mssg[SIZE];
|
||||
|
||||
cout << "Inserisci una frase: ";
|
||||
cin.getline(mssg, SIZE);
|
||||
|
||||
pigLatin(mssg);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool isVowel(char chr) {
|
||||
return (
|
||||
chr == 'A' || chr == 'a' ||
|
||||
chr == 'E' || chr == 'e' ||
|
||||
chr == 'I' || chr == 'i' ||
|
||||
chr == 'O' || chr == 'o' ||
|
||||
chr == 'U' || chr == 'u'
|
||||
);
|
||||
}
|
||||
|
||||
void pigLatin(char *mssg) {
|
||||
char *token = strtok(mssg, " ");
|
||||
|
||||
while (token != nullptr) {
|
||||
int len = strlen(token);
|
||||
|
||||
if (isVowel(token[0])) {
|
||||
cout << token << "way ";
|
||||
} else {
|
||||
char first = token[0];
|
||||
for (int i = 0; i < len - 1; i++) {
|
||||
token[i] = token[i + 1];
|
||||
}
|
||||
token[len - 1] = first;
|
||||
token[len] = '\0';
|
||||
|
||||
cout << token << "ay ";
|
||||
}
|
||||
|
||||
token = strtok(nullptr, " ");
|
||||
}
|
||||
|
||||
cout << endl;
|
||||
}
|
|
@ -0,0 +1,58 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
|
||||
removeDigit (come delDigit)
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cctype>
|
||||
|
||||
#define SIZE 100+1
|
||||
|
||||
using namespace std;
|
||||
|
||||
char *removeDigit(char *const str);
|
||||
|
||||
int main(void) {
|
||||
char str[SIZE] = "H3ll0 W0rld! 2025";
|
||||
|
||||
cout << "Before: " << str << endl;
|
||||
|
||||
removeDigit(str);
|
||||
|
||||
cout << "After: " << str << endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Con puntatori
|
||||
char *removeDigit(char *const str) {
|
||||
char *w = str;
|
||||
|
||||
for (char *r = str; *r != '\0'; r++) {
|
||||
if (!isdigit(*r)) {
|
||||
*w++ = *r;
|
||||
}
|
||||
}
|
||||
|
||||
*w = '\0';
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
/* Senza puntatori
|
||||
char *removeDigit(char *const str) {
|
||||
int w = 0;
|
||||
|
||||
for (int r = 0; str[r] != '\0'; r++) {
|
||||
if (!isdigit(str[r])) {
|
||||
str[w++] = str[r];
|
||||
}
|
||||
}
|
||||
|
||||
str[w] = '\0';
|
||||
|
||||
return str;
|
||||
}
|
||||
*/
|
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
|
||||
strcasecmp()
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
#include <cctype>
|
||||
|
||||
#define SIZE 100+1
|
||||
|
||||
using namespace std;
|
||||
|
||||
int strcasecmp(const char *src1, const char *src2);
|
||||
|
||||
int main(void) {
|
||||
char src1[SIZE];
|
||||
char src2[SIZE];
|
||||
int result;
|
||||
|
||||
cout << "Inserisci una prima frase: ";
|
||||
cin.getline(src1, SIZE);
|
||||
|
||||
cout << "Inserisci una seconda frase: ";
|
||||
cin.getline(src2, SIZE);
|
||||
|
||||
result = strcasecmp(src1, src2);
|
||||
|
||||
if (result == 0) {
|
||||
cout << endl << "src1 = src2" << endl;
|
||||
} else if (result < 0) {
|
||||
cout << endl << "src1 < src2" << endl;
|
||||
} else {
|
||||
cout << endl << "src1 > src2" << endl;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int strcasecmp(const char *src1, const char *src2) {
|
||||
while (*src1 && src2) {
|
||||
char chr1 = tolower(*src1);
|
||||
char chr2 = tolower(*src2);
|
||||
|
||||
if (chr1 != chr2) {
|
||||
return chr1 - chr2;
|
||||
}
|
||||
|
||||
src1++;
|
||||
src2++;
|
||||
}
|
||||
|
||||
return tolower(*src1) - tolower(*src2);
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
|
||||
strcat()
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
|
||||
#define SIZE 100+1
|
||||
|
||||
using namespace std;
|
||||
|
||||
char *strcat(char *src1, const char *src2);
|
||||
|
||||
int main(void) {
|
||||
char src1[SIZE];
|
||||
char src2[] = "@studenti.itisravenna.it";
|
||||
char *ptr;
|
||||
|
||||
cout << "Inserisci il nome utente della tua email scolastica: ";
|
||||
cin >> src1;
|
||||
|
||||
ptr = strcat(src1, src2);
|
||||
|
||||
cout << "Email scolastica: " << ptr << endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
char *strcat(char *src1, const char *src2) {
|
||||
int i;
|
||||
int len = strlen(src1);
|
||||
|
||||
for (i = 0; src2[i] != '\0'; i++) {
|
||||
src1[len + i] = src2[i];
|
||||
}
|
||||
|
||||
src1[len + i] = '\0';
|
||||
|
||||
return src1;
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
|
||||
strchr()
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
|
||||
#define SIZE 100+1
|
||||
|
||||
using namespace std;
|
||||
|
||||
char *strchr(const char *src, int c);
|
||||
|
||||
int main(void) {
|
||||
char src[SIZE];
|
||||
char *ptr;
|
||||
int chr = 'a';
|
||||
|
||||
cout << "Inserisci una parola o una frase: ";
|
||||
cin.getline(src, SIZE);
|
||||
|
||||
ptr = strchr(src, chr);
|
||||
|
||||
if (ptr != nullptr) {
|
||||
cout << ptr << endl;
|
||||
} else {
|
||||
cout << "Character not found!" << endl;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
char *strchr(const char *src, int c) {
|
||||
do {
|
||||
if (*src == c) {
|
||||
return (char*)src;
|
||||
}
|
||||
} while (*src++);
|
||||
|
||||
return NULL;
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
|
||||
strcmp()
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
|
||||
#define SIZE 100+1
|
||||
|
||||
using namespace std;
|
||||
|
||||
int strcmp(const char *src1, const char *src2);
|
||||
|
||||
int main(void) {
|
||||
char src1[SIZE];
|
||||
char src2[SIZE];
|
||||
int result;
|
||||
|
||||
cout << "Inserisci una prima frase: ";
|
||||
cin.getline(src1, SIZE);
|
||||
|
||||
cout << "Inserisci una seconda frase: ";
|
||||
cin.getline(src2, SIZE);
|
||||
|
||||
result = strcmp(src1, src2);
|
||||
|
||||
if (result == 0) {
|
||||
cout << endl << "src1 = src2" << endl;
|
||||
} else if (result < 0) {
|
||||
cout << endl << "src1 < src2" << endl;
|
||||
} else {
|
||||
cout << endl << "src1 > src2" << endl;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int strcmp(const char *src1, const char *src2) {
|
||||
for (; *src1 == *src2; src1++, src2++) {
|
||||
if (*src1 == '\0') {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return *src1 - *src2;
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
|
||||
strcpy()
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
|
||||
#define SIZE 100+1
|
||||
|
||||
using namespace std;
|
||||
|
||||
char *strcpy(char *dst, const char *src);
|
||||
|
||||
int main(void) {
|
||||
char src[SIZE] = "mario.montanari@studenti.itisravenna.it";
|
||||
char dst[SIZE];
|
||||
char *ptr;
|
||||
|
||||
ptr = strcpy(dst, src);
|
||||
|
||||
cout << src << endl;
|
||||
cout << ptr << endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
char *strcpy(char *dst, const char *src) {
|
||||
const char *ptr = dst;
|
||||
|
||||
while (*src) {
|
||||
*dst = *src;
|
||||
dst++;
|
||||
src++;
|
||||
}
|
||||
|
||||
*dst = '\0';
|
||||
|
||||
return (char*)ptr;
|
||||
}
|
|
@ -0,0 +1,47 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
|
||||
strncat()
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
|
||||
#define SIZE 100+1
|
||||
|
||||
using namespace std;
|
||||
|
||||
char *strncat(char *dst, const char *src, int n);
|
||||
|
||||
int main(void) {
|
||||
char src[SIZE] = "mario.montanari@studenti.itisravenna.it";
|
||||
char dst[SIZE];
|
||||
char *ptr;
|
||||
|
||||
ptr = strncat(dst, src, 15);
|
||||
|
||||
cout << src << endl;
|
||||
cout << ptr << endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
char *strncat(char *dst, const char *src, int n) {
|
||||
const char *ptr = dst;
|
||||
|
||||
while (*dst) {
|
||||
*dst++;
|
||||
}
|
||||
|
||||
while (n > 0 && *src) {
|
||||
*dst = *src;
|
||||
dst++;
|
||||
src++;
|
||||
n--;
|
||||
}
|
||||
|
||||
*dst = '\0';
|
||||
|
||||
return (char*)ptr;
|
||||
}
|
|
@ -0,0 +1,55 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
|
||||
strncmp()
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
|
||||
#define SIZE 40
|
||||
|
||||
using namespace std;
|
||||
|
||||
int strncmp(const char *src1, const char *src2, int count);
|
||||
|
||||
int main(void) {
|
||||
char src1[SIZE];
|
||||
char src2[SIZE];
|
||||
int result;
|
||||
|
||||
cout << "Inserisci una prima frase: ";
|
||||
cin.getline(src1, SIZE);
|
||||
|
||||
cout << "Inserisci una seconda frase: ";
|
||||
cin.getline(src2, SIZE);
|
||||
|
||||
result = strncmp(src1, src2, 1);
|
||||
|
||||
if (result == 0) {
|
||||
cout << "src1 = src2" << endl;
|
||||
} else if (result < 0) {
|
||||
cout << "src1 < src2" << endl;
|
||||
} else {
|
||||
cout << "src1 > src2" << endl;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int strncmp(const char *src1, const char *src2, int count) {
|
||||
int i = 0;
|
||||
|
||||
while (i < count && src1[i] != '\0' && src2[i] != '\0') {
|
||||
if (src1[i] != src2[i]) {
|
||||
return src1[i] - src2[i];
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
if (i < count) {
|
||||
return src1[i] - src2[i];
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
|
||||
strncpy()
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
|
||||
#define SIZE 100+1
|
||||
|
||||
using namespace std;
|
||||
|
||||
char *strncpy(char *dst, const char *src, int n);
|
||||
|
||||
int main(void) {
|
||||
char src[SIZE] = "mario.montanari@studenti.itisravenna.it";
|
||||
char dst[SIZE];
|
||||
char *ptr;
|
||||
|
||||
ptr = strncpy(dst, src, 15);
|
||||
|
||||
cout << src << endl;
|
||||
cout << ptr << endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
char *strncpy(char *dst, const char *src, int n) {
|
||||
const char *ptr = dst;
|
||||
|
||||
while (n > 0 && *src) {
|
||||
*dst = *src;
|
||||
dst++;
|
||||
src++;
|
||||
n--;
|
||||
}
|
||||
|
||||
while (n > 0) {
|
||||
*dst = '\0';
|
||||
dst++;
|
||||
n--;
|
||||
}
|
||||
|
||||
*dst = '\0';
|
||||
|
||||
return (char*)ptr;
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
|
||||
strpad usando C++.
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
|
||||
#define SIZE 100+1
|
||||
|
||||
using namespace std;
|
||||
|
||||
char *strpad(char *const str, unsigned start, unsigned end, char pad);
|
||||
|
||||
int main(void) {
|
||||
char str[SIZE] = "Buonasera";
|
||||
|
||||
cout << str << endl;
|
||||
cout << strpad(str, 4, 3, '*') << endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
char *strpad(char *const str, unsigned start, unsigned end, char pad) {
|
||||
memmove(str + start, str, strlen(str) + 1);
|
||||
memset(str, pad, start);
|
||||
|
||||
str[strlen(str) + end] = '\0';
|
||||
|
||||
memset(str + strlen(str), pad, end);
|
||||
|
||||
return str;
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
|
||||
strpbrk()
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
|
||||
#define SIZE 100+1
|
||||
|
||||
using namespace std;
|
||||
|
||||
char *strpbrk(const char *src1, const char *src2);
|
||||
|
||||
int main(void) {
|
||||
char src1[SIZE] = "mario.montanari@studenti.itisravenna.it";
|
||||
char src2[SIZE] = "aeiou";
|
||||
char *ptr;
|
||||
|
||||
ptr = strpbrk(src1, src2);
|
||||
|
||||
cout << src1 << endl;
|
||||
|
||||
if (ptr != nullptr) {
|
||||
cout << ptr << endl;
|
||||
} else {
|
||||
cout << "Character not found!" << endl;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
char *strpbrk(const char *src1, const char *src2) {
|
||||
while (*src1) {
|
||||
for (const char *ptr = src2; *ptr != '\0'; ptr++) {
|
||||
if (*src1 == *ptr) {
|
||||
return (char*)src1;
|
||||
}
|
||||
}
|
||||
src1++;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
|
||||
strrchr()
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
|
||||
#define SIZE 40
|
||||
|
||||
using namespace std;
|
||||
|
||||
char *strrchr(const char *src, int c);
|
||||
|
||||
int main(void) {
|
||||
char src[SIZE] = "mario.montanari@studenti.itisravenna.it";
|
||||
char *ptr;
|
||||
int chr = 'a';
|
||||
|
||||
ptr = strrchr(src, chr);
|
||||
|
||||
cout << src << endl;
|
||||
cout << ptr << endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
char *strrchr(const char *src, int c) {
|
||||
const char *ptr = nullptr;
|
||||
|
||||
while (*src) {
|
||||
if (*src == c) {
|
||||
ptr = src;
|
||||
}
|
||||
src++;
|
||||
}
|
||||
|
||||
return (char*)ptr;
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
|
||||
strstr()
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
|
||||
#define SIZE 100+1
|
||||
|
||||
using namespace std;
|
||||
|
||||
char *strstr(const char *src1, const char *src2);
|
||||
|
||||
int main(void) {
|
||||
char src1[SIZE] = "Ciao a tutti, come state?";
|
||||
char src2[SIZE] = "tutti";
|
||||
char *result;
|
||||
|
||||
cout << "Stringa iniziale: " << src1 << endl;
|
||||
cout << "Sottostringa da trovare: " << src2 << endl;
|
||||
|
||||
result = strstr(src1, src2);
|
||||
|
||||
if (result != nullptr) {
|
||||
cout << endl << "Sottostringa trovata: " << result << endl;
|
||||
} else {
|
||||
cout << endl << "Sottostringa non trovata." << endl;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
char *strstr(const char *src1, const char *src2) {
|
||||
if (!*src2) return (char*)src1;
|
||||
|
||||
while (*src1) {
|
||||
const char *ptr1 = src1;
|
||||
const char *ptr2 = src2;
|
||||
|
||||
while (*ptr1 && *ptr2 && *ptr1 == *ptr2) {
|
||||
ptr1++;
|
||||
ptr2++;
|
||||
}
|
||||
|
||||
if (!*ptr2) {
|
||||
return (char*)src1;
|
||||
}
|
||||
|
||||
src1++;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
|
@ -0,0 +1,142 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
|
||||
Si crei la struttura libro, in cui ogni libro ha
|
||||
un codice numerico (numero intero) che lo caratterizza,
|
||||
un titolo, un autore, un numero di pagine e un costo.
|
||||
- si memorizzino i dati di tre libri;
|
||||
- si calcoli il costo medio per pagina dei libri;
|
||||
- si stampino i dati dei tre libri in ordine crescente di costo per pagina;
|
||||
- si stampino i dati dei tre libri in ordine crescente di titolo.
|
||||
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <ctime>
|
||||
#include <iomanip>
|
||||
|
||||
#define SIZE 100+1
|
||||
|
||||
#define N_LIBRI 3
|
||||
|
||||
#define MIN_SILLABE 2
|
||||
#define MAX_SILLABE 5
|
||||
|
||||
#define MIN_COD 10000
|
||||
#define MAX_COD 99999
|
||||
|
||||
#define MIN_TITOLO 65
|
||||
#define MAX_TITOLO 90
|
||||
|
||||
#define MIN_PAG 100
|
||||
#define MAX_PAG 900
|
||||
|
||||
#define MIN_COSTO 1000
|
||||
#define MAX_COSTO 9000
|
||||
|
||||
using namespace std;
|
||||
|
||||
typedef struct {
|
||||
int nCod;
|
||||
char titolo[SIZE];
|
||||
char autore[SIZE];
|
||||
int nPag;
|
||||
float costo;
|
||||
int costoPerPagina;
|
||||
} libro;
|
||||
|
||||
int cmpCostoPerPagina(const void *x, const void *y);
|
||||
int cmpTitolo(const void *x, const void *y);
|
||||
void generaCaratteristiche(libro caratteristiche[]);
|
||||
void stampaCaratteristiche(libro caratteristiche[]);
|
||||
|
||||
int main(void) {
|
||||
srand(time(NULL));
|
||||
libro caratteristiche[N_LIBRI];
|
||||
int nSillabe = 0;
|
||||
|
||||
generaCaratteristiche(caratteristiche);
|
||||
|
||||
cout << "--- Ordinazione crescente in base al costo medio per pagina --------------------------------------------" << endl << endl;
|
||||
qsort(caratteristiche, N_LIBRI, sizeof(libro), cmpCostoPerPagina);
|
||||
stampaCaratteristiche(caratteristiche);
|
||||
|
||||
cout << endl << endl << endl << "--- Ordinazione crescente in base al titolo ------------------------------------" << endl << endl;
|
||||
qsort(caratteristiche, N_LIBRI, sizeof(libro), cmpTitolo);
|
||||
stampaCaratteristiche(caratteristiche);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int cmpCostoPerPagina(const void *x, const void *y) {
|
||||
const libro *libroX = (const libro *)x;
|
||||
const libro *libroY = (const libro *)y;
|
||||
|
||||
return libroY->costoPerPagina - libroX->costoPerPagina;
|
||||
}
|
||||
|
||||
int cmpTitolo(const void *x, const void *y) {
|
||||
const libro *libroX = (const libro *)x;
|
||||
const libro *libroY = (const libro *)y;
|
||||
|
||||
return strcmp(libroX->titolo, libroY->titolo);
|
||||
}
|
||||
|
||||
void generaCaratteristiche(libro caratteristiche[]) {
|
||||
const char vocali[] = "AEIOU";
|
||||
const char consonanti[] = "BCDFGHJKLMNPQRSTVWXYZ";
|
||||
|
||||
for (int i = 0; i < N_LIBRI; i++) {
|
||||
|
||||
caratteristiche[i].nCod = rand() % (MAX_COD - MIN_COD + 1) + MIN_COD;
|
||||
// 'setfill('.')' riempie gli spazi vuoti con dei punti
|
||||
|
||||
int nSillabe = rand() % (MAX_SILLABE - MIN_SILLABE + 1) + MIN_SILLABE;
|
||||
|
||||
int r = 0;
|
||||
for (int j = 0; j < nSillabe; j++) {
|
||||
caratteristiche[i].titolo[r++] = consonanti[rand() % 21];
|
||||
caratteristiche[i].titolo[r++] = vocali[rand() % 5];
|
||||
}
|
||||
caratteristiche[i].titolo[r] = '\0';
|
||||
|
||||
nSillabe = rand() % (MAX_SILLABE - MIN_SILLABE + 1) + MIN_SILLABE;
|
||||
|
||||
int w = 0;
|
||||
for (int j = 0; j < nSillabe; j++) {
|
||||
caratteristiche[i].autore[w++] = consonanti[rand() % 16];
|
||||
caratteristiche[i].autore[w++] = vocali[rand() % 5];
|
||||
}
|
||||
|
||||
caratteristiche[i].autore[w++] = ' ';
|
||||
|
||||
nSillabe = rand() % (MAX_SILLABE - MIN_SILLABE + 1) + MIN_SILLABE;
|
||||
|
||||
for (int j = 0; j < nSillabe; j++) {
|
||||
caratteristiche[i].autore[w++] = consonanti[rand() % 16];
|
||||
caratteristiche[i].autore[w++] = vocali[rand() % 5];
|
||||
}
|
||||
caratteristiche[i].autore[w] = '\0';
|
||||
|
||||
caratteristiche[i].nPag = rand() % (MAX_PAG - MIN_PAG + 1) + MIN_PAG;
|
||||
|
||||
caratteristiche[i].costo = rand() % (MAX_COSTO - MIN_COSTO + 1) + MIN_COSTO;
|
||||
|
||||
caratteristiche[i].costoPerPagina = caratteristiche[i].costo / caratteristiche[i].nPag;
|
||||
// 'fixed' imposta il numero in virgola fissa
|
||||
// 'setprecision(2)' limita a 2 cifre decimali il numero
|
||||
}
|
||||
}
|
||||
|
||||
void stampaCaratteristiche(libro caratteristiche[]) {
|
||||
for (int i = 0; i < N_LIBRI; i++) {
|
||||
cout << "Libro " << "'" << caratteristiche[i].titolo << "':" << endl;
|
||||
cout << " Codice numerico: " << setfill('.') << setw(18) << " " << caratteristiche[i].nCod << endl;
|
||||
cout << " Titolo: " << setw(27) << " " << caratteristiche[i].titolo << endl;
|
||||
cout << " Autore: " << setw(27) << " " << caratteristiche[i].autore << endl;
|
||||
cout << " Numero pagine: " << setw(20) << " " << caratteristiche[i].nPag << " pagine" << endl;
|
||||
cout << " Costo: " << setw(28) << " " << caratteristiche[i].costo / 100 << " euro" << endl;
|
||||
cout << " Costo medio per pagina: " << setw(11) << fixed << setprecision(2) << " " << caratteristiche[i].costoPerPagina << " centesimi" << endl << endl;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,73 @@
|
|||
/*
|
||||
Nome: Mario
|
||||
Cognome: Montanari
|
||||
|
||||
tripleDigit
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
#include <cctype>
|
||||
|
||||
#define SIZE 100+1
|
||||
|
||||
using namespace std;
|
||||
|
||||
char *tripleDigit(char *const str);
|
||||
|
||||
int main(void) {
|
||||
char str[SIZE] = "H3ll0 W0rld! 2025";
|
||||
|
||||
cout << "Before: " << str << endl;
|
||||
|
||||
tripleDigit(str);
|
||||
|
||||
cout << "After: " << str << endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Con puntatori
|
||||
char *tripleDigit(char *const str) {
|
||||
int len = strlen(str);
|
||||
|
||||
for (char *j = str; j - str < len && len + 2 < SIZE - 1; j++) {
|
||||
if (isdigit(*j)) {
|
||||
if (len + 2 >= SIZE) break;
|
||||
|
||||
memmove(j + 3, j + 1, len - (j - str) + 1);
|
||||
|
||||
*(j + 1) = *j;
|
||||
*(j + 2) = *j;
|
||||
|
||||
len = len + 2;
|
||||
j = j + 2;
|
||||
}
|
||||
}
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
/* Senza puntatori
|
||||
char *tripleDigit(char *const str) {
|
||||
int len = strlen(str);
|
||||
|
||||
for (int j = 0; j < len && len + 2 < SIZE - 1; j++) {
|
||||
if (isdigit(str[j])) {
|
||||
if (len + 2 >= SIZE) break;
|
||||
|
||||
for (int k = len; k >= j; k--) {
|
||||
str[k + 2] = str[k];
|
||||
}
|
||||
|
||||
str[j + 1] = str[j];
|
||||
str[j + 2] = str[j];
|
||||
|
||||
len = len + 2;
|
||||
j = j + 2;
|
||||
}
|
||||
}
|
||||
|
||||
return str;
|
||||
}
|
||||
*/
|
Loading…
Reference in New Issue