commit 750fc1c56d44c19099982d4d7b4e3297cb5bd276 Author: DIvan2000 Date: Sat Nov 30 13:07:30 2024 +0400 first commit diff --git a/.depend b/.depend new file mode 100644 index 0000000..62a4b95 --- /dev/null +++ b/.depend @@ -0,0 +1,4 @@ +foo.o: src/foo.c src/foo.h +main.o: src/main.c src/progs.h +prog1.o: src/prog1.c src/progs.h src/foo.h +prog2.o: src/prog2.c src/progs.h src/foo.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cd531cf --- /dev/null +++ b/.gitignore @@ -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 + diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..3583dc7 --- /dev/null +++ b/Makefile @@ -0,0 +1,25 @@ +TARGET ?= Recurce +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 diff --git a/README.md b/README.md new file mode 100644 index 0000000..4b1c20a --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# InfLab4 diff --git a/Recurce b/Recurce new file mode 100755 index 0000000..9127474 Binary files /dev/null and b/Recurce differ diff --git a/src/foo.c b/src/foo.c new file mode 100644 index 0000000..9970e82 --- /dev/null +++ b/src/foo.c @@ -0,0 +1,7 @@ +#include "foo.h" + +int foo(int n) { + if(n < 2) return 1; + if(!(n & 1)) return foo(n/2)+1; + return foo(3*n+1)+1; +} diff --git a/src/foo.h b/src/foo.h new file mode 100644 index 0000000..28af621 --- /dev/null +++ b/src/foo.h @@ -0,0 +1,6 @@ +#ifndef FOO_H_ +#define FOO_H_ + +int foo(int n); + +#endif diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..91f4c4b --- /dev/null +++ b/src/main.c @@ -0,0 +1,29 @@ +#include +#include "progs.h" + +int main() { + int prog_number; + + printf("Лабораторная работа №3\n\nВариант №1, 6106, автор: Морозов Иван\n\n"); + + printf("Выберите программу: \n\n"); + + printf("1. Программа для нахождения количества значений n на отрезке [1; 100], для которых F(n) больше 100.\n"); + printf("2. Программа для нахождения разности между минимальной и максимальной цифрами F(x).\n"); + + prog_number = getchar()-'0'; + + switch(prog_number) { + case 1: + prog1(); + break; + case 2: + prog2(); + break; + default: + printf("Ошибка: недопустимый номер программы!\n"); + return 1; + } + + return 0; +} diff --git a/src/prog1.c b/src/prog1.c new file mode 100644 index 0000000..7932fe6 --- /dev/null +++ b/src/prog1.c @@ -0,0 +1,11 @@ +#include +#include "progs.h" +#include "foo.h" + +void prog1() { + int counter = 0; + for(int i = 1; i <= 100; i++) { + if(foo(i) > 100) counter++; + } + printf("Количество значений n на отрезке [1; 100], для которых F(n) больше 100 равно %d\n", counter); +} diff --git a/src/prog2.c b/src/prog2.c new file mode 100644 index 0000000..5d80217 --- /dev/null +++ b/src/prog2.c @@ -0,0 +1,24 @@ +#include +#include "progs.h" +#include "foo.h" + +#define MIN(X, Y) (((X) < (Y)) ? (X) : (Y)) +#define MAX(X, Y) (((X) > (Y)) ? (X) : (Y)) + +void prog2() { + int x, d_min, d_max; + char fx[16] = ""; + printf("Программа вычисляет разность между минимальной и максимальной цифрами F(x).\n Введите данные.\n"); + printf("x: "); scanf("%d", &x); + + sprintf(fx, "%d", foo(x)); + + printf("F(%d) = %s\n", x, fx); + d_min = fx[0]-'0'; d_max = fx[0]-'0'; + for(char* d_ptr = fx+1; *d_ptr != '\0'; d_ptr++) { + int d = *d_ptr - '0'; + d_min = MIN(d_min, d); + d_max = MAX(d_max, d); + } + printf("Разность между максимальной и минимальной цифрами равна %d\n", d_max-d_min); +} diff --git a/src/progs.h b/src/progs.h new file mode 100644 index 0000000..814d6f4 --- /dev/null +++ b/src/progs.h @@ -0,0 +1,7 @@ +#ifndef PROGS_H_ +#define PROGS_H_ + +void prog1(); +void prog2(); + +#endif