first commit

This commit is contained in:
DIvan2000 2024-11-30 13:06:00 +04:00
commit 52aa11d04e
18 changed files with 258 additions and 0 deletions

4
.depend Normal file
View File

@ -0,0 +1,4 @@
main.o: src/main.c src/scanFile.h src/myString.h
myAlphabet.o: src/myAlphabet.c src/myAlphabet.h src/myString.h
myString.o: src/myString.c src/myString.h
scanFile.o: src/scanFile.c src/scanFile.h src/myString.h src/myAlphabet.h

54
.gitignore vendored Normal file
View File

@ -0,0 +1,54 @@
# ---> C
# Prerequisites
*.d
# Object files
*.o
*.ko
*.obj
*.elf
# Linker output
*.ilk
*.map
*.exp
# Precompiled Headers
*.gch
*.pch
# Libraries
*.lib
*.a
*.la
*.lo
# Shared objects (inc. Windows DLLs)
*.dll
*.so
*.so.*
*.dylib
# Executables
*.exe
*.out
*.app
*.i*86
*.x86_64
*.hex
# Debug files
*.dSYM/
*.su
*.idb
*.pdb
# Kernel Module Compile Results
*.mod*
*.cmd
.tmp_versions/
modules.order
Module.symvers
Mkfile.old
dkms.conf

25
Makefile Normal file
View File

@ -0,0 +1,25 @@
TARGET ?= VowelOrConsonant
CC ?= gcc
PREF_SRC = ./src/
PREF_OBJ = ./obj/
SRC = $(wildcard $(PREF_SRC)*.c)
OBJ = $(patsubst $(PREF_SRC)%.c, $(PREF_OBJ)%.o, $(SRC))
$(TARGET) : $(OBJ)
$(CC) $(OBJ) -o $(TARGET)
depend: .depend
.depend: $(SRC)
rm -f "$@"
$(CC) -MM $^ > "$@"
-include .depend
$(PREF_OBJ)%.o : $(PREF_SRC)%.c
$(CC) -c $< -o $@ -D_PROG_NAME=\"$(TARGET)\"
clean :
rm $(TARGET) $(PREF_OBJ)*.o *.d

1
README.md Normal file
View File

@ -0,0 +1 @@
# InfLab3

BIN
VowelOrConsonant Executable file

Binary file not shown.

24
src/main.c Normal file
View File

@ -0,0 +1,24 @@
#include <stdio.h>
#include "scanFile.h"
int main(int argc,char *argv[]){
FILE* in;
FILE* out;
printf("Лабораторная работа №3\n\nВариант №1, 6106, автор: Морозов Иван\n\n");
if(argc!=3){
printf("Неверные аргументы! Используйте \"" _PROG_NAME " <имя_входногоайла> <имя_выходногоайла>\"\n");
return 1;
}
in = fopen(argv[1], "r");
out = fopen(argv[2], "w");
processFile(in, out);
fclose(in);
fclose(out);
return 0;
}

20
src/myAlphabet.c Normal file
View File

@ -0,0 +1,20 @@
#include <ctype.h>
#include "myAlphabet.h"
char isVovel(int c){
c = tolower(c);
return(c=='e'||c=='i'||c=='a'||c=='o'||c=='u'||c=='y');
}
char areVovelMore(MyString str){
int vovels = 0;
int consonants = 0;
for(unsigned int i = 0; i < str.len; i++){
char c = str.arr[i];
if(isalpha(c)){
if(isVovel(c)) vovels++;
else consonants++;
}
}
return vovels>consonants;
}

9
src/myAlphabet.h Normal file
View File

@ -0,0 +1,9 @@
#ifndef MY_ALPHABET_H_
#define MY_ALPHABET_H_
#include "myString.h"
char isVovel(int c);
char areVovelMore(MyString str);
#endif

37
src/myString.c Normal file
View File

@ -0,0 +1,37 @@
#include <stdlib.h>
#include <stdio.h>
#include "myString.h"
static void reallocString(MyString* str);
MyString newString(unsigned int init_capacity){
MyString str;
str.arr = (char*) malloc(init_capacity);
str.len = 0;
str.capacity = init_capacity;
return str;
}
void addCharToString(MyString* str, char c){
if(str->len >= str->capacity){
reallocString(str);
}
(str->arr)[str->len] = c;
(str->len)++;
}
void freeString(MyString* str){
free(str->arr);
str->len = 0;
str->capacity = 0;
str->arr = NULL;
str = NULL;
}
static void reallocString(MyString* str){
str->arr = realloc(str->arr, (str->capacity)*2);
(str->capacity)*=2;
if(str->arr==0){
printf("Нет памяти для строки 0x%lX", (unsigned long) str);
exit(1);
}
}

15
src/myString.h Normal file
View File

@ -0,0 +1,15 @@
#ifndef MY_STRING_H_
#define MY_STRING_H_
typedef struct myStr
{
unsigned int capacity;
unsigned int len;
char* arr;
} MyString;
MyString newString(unsigned int init_capacity);
void addCharToString(MyString* str, char c);
void freeString(MyString* str);
#endif

41
src/scanFile.c Normal file
View File

@ -0,0 +1,41 @@
#include <stdio.h>
#include <ctype.h>
#include "scanFile.h"
#include "myString.h"
#include "myAlphabet.h"
#define DEFAULT_BUFFER_SIZE 16
void processFile(FILE* in, FILE* out){
while(!feof(in)){
MyString str = newString(DEFAULT_BUFFER_SIZE);
scanString(&str, in);
processString(out, str);
freeString(&str);
}
}
void scanString(MyString* dst, FILE* src){
for(char ch = fgetc(src); ch != '\n' && !feof(src); ch = fgetc(src)){
addCharToString(dst, ch);
}
}
void processString(FILE* out, MyString str){
char isVovelsMore = areVovelMore(str);
char letters['z'-'a'];
for(char i = 'a'; i < 'z'; i++){
letters[i-'a']=0;
}
for(unsigned int i = 0; i < str.len; i++){
char ch = str.arr[i];
if(isalpha(ch)){
ch = tolower(ch);
if(!letters[ch-'a'] && (isVovelsMore == isVovel(ch))){
fputc(ch, out);
}
letters[ch-'a']=1;
}
}
fputc('\n', out);
}

11
src/scanFile.h Normal file
View File

@ -0,0 +1,11 @@
#ifndef SCANFILE_H_
#define SCANFILE_H_
#include <stdio.h>
#include "myString.h"
void processFile(FILE* in, FILE* out);
void scanString(MyString* dst, FILE* src);
void processString(FILE* out, MyString str);
#endif

2
test_files/test1_in Normal file
View File

@ -0,0 +1,2 @@
bbad, sdiv
aaagh yd

3
test_files/test1_out Normal file
View File

@ -0,0 +1,3 @@
bdsv
ay

2
test_files/test2_in Normal file
View File

@ -0,0 +1,2 @@
Shall I compare thee to a summers day?
Thou art more lovely and more temperate…

3
test_files/test2_out Normal file
View File

@ -0,0 +1,3 @@
shlcmprtd
thrmlvndp

3
test_files/test3_in Normal file
View File

@ -0,0 +1,3 @@
The quick brown fox jumps over the lazy dog
ackdaws love my big sphinx of quartz
The five boxing wizards jump quickly

4
test_files/test3_out Normal file
View File

@ -0,0 +1,4 @@
thqckbrwnfxjmpsvldg
ckdwslvmbgphnxfqrt
thfvbxngwrdsjmpqckl