add cviko 3

This commit is contained in:
Matyáš Caras 2024-10-03 17:17:16 +02:00
parent 6c320c8763
commit 03a90c10be
Signed by: hernik
GPG key ID: 2A3175F98820C5C6
6 changed files with 328 additions and 0 deletions

10
Cviko3_1/Makefile Normal file
View file

@ -0,0 +1,10 @@
all: main
CC = gcc
override CFLAGS += -Wall -Wextra -Wno-unused-variable -Wno-unused-parameter -Wno-unused-result -Wno-unknown-pragmas -pedantic -lm
main: main.c
$(CC) $(CFLAGS) -O1 ./*.c -o "$@"
clean:
rm -f main main-*

145
Cviko3_1/main.c Normal file
View file

@ -0,0 +1,145 @@
#include "types.h"
#include <stdio.h>
void read_print_string() {
// TODO: 1. Read a string from stdin of max-length of 100 characters.
printf("Enter a string (100 chars max):\n");
char input[101];
scanf("%100[^\n]", input);
// TODO: 2. Print read string to stdout.
printf("%s\n", input);
return;
}
void read_print_string_length() {
// TODO: 1. Read a string from stdin of max-length of 100 characters.
printf("Enter a string (100 chars max):\n");
char input[101];
scanf(" %100[^\n]", input);
// TODO: 2. Print the length of the read string to stdout. (do not count
// '\0').
for (int i = 0; i < 101; ++i) {
if (input[i] == '\0') {
printf("Length of your string is %d", i);
break;
}
}
return;
}
void read_print_string_alphnum() {
// TODO: 1. Read a string from stdin of max-length of 100 characters.
printf("Enter a string (100 chars max):\n");
char input[101];
scanf(" %100[^\n]", input);
// TODO: 2. Print both the number of letters (a-z, A-Z) and the number of
// numerals (0-9) in the read string to stdout.
int letters = 0;
int numbers = 0;
for (int i = 0; i < 101; ++i) {
if (input[i] == '\0') {
break;
}
if ((input[i] >= 'a' && input[i] <= 'z') ||
(input[i] >= 'A' && input[i] <= 'Z')) {
letters++;
} else if (input[i] >= '0' && input[i] <= '9') {
numbers++;
}
}
printf("Your string contains %d letters and %d numbers", letters, numbers);
return;
}
void read_print_string_lower() {
// TODO: 1. Read a string from stdin of max-length of 100 characters.
printf("Enter a string (100 chars max):\n");
char input[101];
scanf(" %100[^\n]", input);
// TODO: 2. Print the read string with all letters in lowercase (e.g., A => a)
// to stdout.
for (int i = 0; i < 101; ++i) {
if ((input[i] >= 'A' && input[i] <= 'Z')) {
input[i] += 32;
}
}
printf("%s\n", input);
return;
}
void read_print_string_replace() {
// TODO: 1. Read a character and a string of max-length of 100 characters from
// stdin.
printf("Enter a single character:\n");
char c;
scanf(" %c", &c);
printf("Enter a string (100 chars max):\n");
char input[101];
scanf(" %100[^\n]", input);
// TODO: 2. Print the read string with all occurences of read string replaced
// with '_' (e.g., ('a', "abba") => _bb_) to stdout.
for (int i = 0; i < 101; ++i) {
if (input[i] == '\0') {
break;
}
if (input[i] == c) {
input[i] = '_';
}
}
printf("%s\n", input);
return;
}
void read_print_string_compare() {
// TODO: 1. Read 2 string, each of max-length of 100 characters, from stdin.
printf("Enter a string (100 chars max):\n");
char inputA[101];
scanf(" %100[^\n]", inputA);
printf("Enter another string (100 chars max):\n");
char inputB[101];
scanf(" %100[^\n]", inputB);
// TODO: 2. Determine whether strings are equal (two strings are equal if they
// have the same length and characters in both strings on a given index are
// identical).
int is = 1;
for (int i = 0; i < 101; ++i) {
if (inputA[i] == '\0' && inputB[i] == '\0') {
break;
}
if (inputA[i] != inputB[i] || (inputA[i] == '\0') || (inputB[i] == '\0')) {
is = 0;
break;
}
}
printf("%s", (is == 1) ? "The two strings ARE equal"
: "The two strings are NOT equal");
return;
}
#ifndef TEST_BUILD
int main(int argc, char *argv[]) {
printf("-- read_print_string --\n");
read_print_string();
printf("\n-- read_print_string_length --\n");
read_print_string_length();
printf("\n-- read_print_string_alphnum --\n");
read_print_string_alphnum();
printf("\n-- read_print_string_lower --\n");
read_print_string_lower();
printf("\n-- read_print_string_replace --\n");
read_print_string_replace();
printf("\n-- read_print_string_compare --\n");
read_print_string_compare();
return 0;
}
#endif

18
Cviko3_1/types.h Normal file
View file

@ -0,0 +1,18 @@
/**
* Hlavičkový soubor types.h
*
* OBSAH V TOMTO SOUBROU NEUPRAVUJTE!
*/
#ifndef TYPES_H
#define TYPES_H
// DEKLAROVANÉ HLAVIČKY FUNKCÍ NIJAK NEMĚŇTE
void read_print_string();
void read_print_string_length();
void read_print_string_alphnum();
void read_print_string_lower();
void read_print_string_replace();
void read_print_string_compare();
#endif

27
Cviko3_2/Makefile Normal file
View file

@ -0,0 +1,27 @@
all: main
CC = gcc
override CFLAGS += -Wall -Wextra -Wno-unused-variable -Wno-unused-parameter -Wno-unused-result -Wno-unknown-pragmas -pedantic -lm
.PHONY: run test submit clean
main: main.c
$(CC) $(CFLAGS) -O1 ./*.c -o "$@"
main-debug: main.c
$(CC) $(CFLAGS) -O1 -g ./*.c -o "$@"
main-test: main.c
$(CC) $(CFLAGS) -DTEST_BUILD=1 ./*.c -o "$@"
main-solution: main.c
$(CC) $(CFLAGS) -DTEST_BUILD=1 -DSOLUTION_BUILD=1 test.c solution/*.c -o "$@"
test:
@./.tests/scripts/run_tests.sh
submit:
@PROJECT_SUBMIT_MODE=sources ECHO_QUIET=1 ./.tests/scripts/run_tests.sh
clean:
rm -f main main-*

114
Cviko3_2/main.c Normal file
View file

@ -0,0 +1,114 @@
#include "types.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/**
* Safely print first argument provided to the program. Determine its meaning.
*
* @param argc total number of arguments provided to the program
*
* @param argv array/vector of arguments
*/
void print_first_argument(int argc, char *argv[]) {
if (argc < 1) {
return;
}
printf("%s\n", argv[0]);
return;
}
/**
* Safely print first 4 arguments provided to the program while converting them
* to their corresponding data type.
*
* ./main <int> <double> <string>
*
* To convert <string> to <int>, use function atoi()
* (https://cplusplus.com/reference/cstdlib/atoi/)
*
* To convert <string> to <double>, use function atof()
* (https://cplusplus.com/reference/cstdlib/atof/)
*
* Use the following commmand to execute your program with set of arguments:
*
* ./main 42 13.37 hello_program
*
* @param argc total number of arguments provided to the program
*
* @param argv array/vector of arguments
*/
void print_parse_arguments(int argc, char *argv[]) {
int a;
double b;
int s = (argc<4)?argc:4;
for (int i = 0; i < s; ++i) {
switch (i) {
case 1:
a = atoi(argv[i]);
printf("%d\n",a);
break;
case 2:
b = atof(argv[i]);
printf("%.3f\n",b);
break;
default:
printf("%s\n",argv[i]);
break;
}
}
return;
}
/**
* Safely print ALL arguments provided to the program without any conversion.
*
* ./main <int> <double> <string>
*
* @param argc total number of arguments provided to the program
*
* @param argv array/vector of arguments
*/
void print_all_arguments(int argc, char *argv[]) {
for (int i = 0; i < argc; ++i) {
printf("%s\n", argv[i]);
}
return;
}
/**
* Safely print the largest argument
*
* ./main <int> <double> <string>
*
* @param argc total number of arguments provided to the program
*
* @param argv array/vector of arguments
*/
void print_largest_argument(int argc, char *argv[]) {
char *c = "";
for (int i = 0; i < argc; ++i) {
if(strlen(argv[i]) > strlen(c)){
c = argv[i];
}
}
printf("Largest argument: %s",c);
return;
}
#ifndef TEST_BUILD
int main(int argc, char *argv[]) {
printf("\n-- print_first_argument --\n");
print_first_argument(argc, argv);
printf("\n-- print_parse_arguments --\n");
print_parse_arguments(argc, argv);
printf("\n-- print_all_arguments --\n");
print_all_arguments(argc, argv);
printf("\n-- print_largest_argument --\n");
print_largest_argument(argc, argv);
return 0;
}
#endif

14
Cviko3_2/types.h Normal file
View file

@ -0,0 +1,14 @@
/**
* Hlavičkový soubor types.h
*
* OBSAH V TOMTO SOUBROU NEUPRAVUJTE!
*/
#ifndef TYPES_H
#define TYPES_H
// DEKLAROVANÉ HLAVIČKY FUNKCÍ NIJAK NEMĚŇTE
void print_first_argument(int argc, char *argv[]);
void print_parse_arguments(int argc, char *argv[]);
void print_all_arguments(int argc, char *argv[]);
#endif