Skip to content

pset 2

readability

Implement a program using the Coleman-Liau index to compute the approximate grade level needed to comprehend some text, per the below.

Terminal window
$ ./readability
Text: Congratulations! Today is your day. You're off to Great Places! You're off and away!
Grade 3
readability.c
#include <stdio.h>
#include <cs50.h>
#include <math.h>
int count_letters(string s);
int count_words(string s);
int count_sentences(string s);
int main(void)
{
string text = get_string("Text: ");
int letters = count_letters(text);
int words = count_words(text);
int sentences = count_sentences(text);
double L = ((double) letters / words) * 100;
double S = ((double) sentences / words) * 100;
double i = 0.0588 * L - 0.296 * S - 15.8;
int index = round(i);
if (index < 1)
{
printf("Before Grade 1\n");
}
else if (index >= 16)
{
printf("Grade 16+\n");
}
else
{
printf("Grade %i\n", index);
}
}
int count_letters(string s)
{
int count = 0;
for (int i = 0; s[i] != '\0'; i++)
{
if ((s[i] >= 'a' && s[i] <= 'z') || (s[i] >= 'A' && s[i] <= 'Z'))
{
count++;
}
}
return count;
}
int count_words(string s)
{
int count = 0;
for (int i = 0; s[i] != '\0'; i++)
{
if (s[i] == ' ')
{
count++;
}
}
return count + 1;
}
int count_sentences(string s)
{
int count = 0;
for (int i = 0; s[i] != '\0'; i++)
{
if (s[i] == '.' || s[i] == '!' || s[i] == '?')
{
count++;
}
}
return count;
}

substitution

Implement a program that implements a substitution cipher, per the below.

Terminal window
$ ./substitution JTREKYAVOGDXPSNCUIZLFBMWHQ
plaintext: HELLO
ciphertext: VKXXN
substitution.c
#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <ctype.h>
int main(int argc, string argv[])
{
if (argc == 2)
{
int slen = strlen(argv[1]);
if (slen != 26)
{
printf("Key must contain 26 characters\n");
return 1;
}
else
{
for (int i = 0; i < slen; i++)
{
if ((argv[1][i] > 0 && argv[1][i] < 'A') || (argv[1][i] > 'Z' && argv[1][i] < 'a') || (argv[1][i] > 'z'))
{
printf("Key must contain alphabets only\n");
return 1;
}
}
for (int i = 0; i < slen; i++)
{
for (int j = 0; j < slen; j++)
{
if (i == j)
{
continue;
}
else if (toupper(argv[1][i]) == toupper(argv[1][j]))
{
printf("Key must contain 26 unique letters\n");
return 1;
}
}
}
}
string plaintext = get_string("plaintext: ");
printf("ciphertext: ");
for (int i = 0; plaintext[i] != '\0'; i++)
{
if (isupper(plaintext[i]))
{
if (isupper(argv[1][plaintext[i] - 'A']))
{
printf("%c", argv[1][plaintext[i] - 'A']);
}
else
{
printf("%c", toupper(argv[1][plaintext[i] - 'A']));
}
}
else if (islower(plaintext[i]))
{
if (islower(argv[1][plaintext[i] - 'a']))
{
printf("%c", argv[1][plaintext[i] - 'a']);
}
else
{
printf("%c", tolower(argv[1][plaintext[i] - 'a']));
}
}
else
{
printf("%c", plaintext[i]);
}
}
printf("\n");
return 0;
}
else
{
printf("Usage: ./substitution key\n");
return 1;
}
}


© 2020-2025 Ucchas Muhury