first commit

This commit is contained in:
DIvan2000 2024-11-30 13:07:30 +04:00
commit 750fc1c56d
11 changed files with 168 additions and 0 deletions

4
.depend Normal file
View File

@ -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

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 ?= 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

1
README.md Normal file
View File

@ -0,0 +1 @@
# InfLab4

BIN
Recurce Executable file

Binary file not shown.

7
src/foo.c Normal file
View File

@ -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;
}

6
src/foo.h Normal file
View File

@ -0,0 +1,6 @@
#ifndef FOO_H_
#define FOO_H_
int foo(int n);
#endif

29
src/main.c Normal file
View File

@ -0,0 +1,29 @@
#include <stdio.h>
#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;
}

11
src/prog1.c Normal file
View File

@ -0,0 +1,11 @@
#include <stdio.h>
#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);
}

24
src/prog2.c Normal file
View File

@ -0,0 +1,24 @@
#include <stdio.h>
#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);
}

7
src/progs.h Normal file
View File

@ -0,0 +1,7 @@
#ifndef PROGS_H_
#define PROGS_H_
void prog1();
void prog2();
#endif