История изменений
Исправление rtxtxtrx, (текущая версия) :
Лови:
import argparse
def is_number_in_range(number, start, end):
try:
num = float(number)
return start <= num <= end
except ValueError:
return False
def process_file(file_path, start, end):
with open(file_path, 'r') as file:
for line_number, line in enumerate(file, start=1):
numbers = line.split() # Разделяем строку на числа
for number in numbers:
if is_number_in_range(number, start, end):
print(f'Число {number} найдено на строке {line_number}')
def main():
parser = argparse.ArgumentParser(description="Утилита для поиска чисел в диапазоне в файле")
parser.add_argument('file', help='Путь к файлу')
parser.add_argument('start', type=float, help='Начало диапазона')
parser.add_argument('end', type=float, help='Конец диапазона')
args = parser.parse_args()
process_file(args.file, args.start, args.end)
if __name__ == "__main__":
main()
А вот и на C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
int is_number_in_range(double number, double start, double end) {
return number >= start && number <= end;
}
void process_file(const char* file_path, double start, double end) {
FILE *file = fopen(file_path, "r");
if (file == NULL) {
perror("Ошибка открытия файла");
return;
}
char line[1024];
int line_number = 0;
while (fgets(line, sizeof(line), file)) {
line_number++;
char *token = strtok(line, " \t\n"); // Разделение строки на токены по пробелам и табуляциям
while (token != NULL) {
char *endptr;
errno = 0;
double num = strtod(token, &endptr);
if (endptr != token && errno == 0) { // Проверяем, что преобразование прошло успешно
if (is_number_in_range(num, start, end)) {
printf("Число %.2f найдено на строке %d\n", num, line_number);
}
}
token = strtok(NULL, " \t\n");
}
}
fclose(file);
}
int main(int argc, char *argv[]) {
if (argc != 4) {
fprintf(stderr, "Использование: %s <файл> <начало диапазона> <конец диапазона>\n", argv[0]);
return 1;
}
const char* file_path = argv[1];
double start = atof(argv[2]);
double end = atof(argv[3]);
process_file(file_path, start, end);
return 0;
}
Исходная версия rtxtxtrx, :
Лови:
import argparse
def is_number_in_range(number, start, end):
try:
num = float(number)
return start <= num <= end
except ValueError:
return False
def process_file(file_path, start, end):
with open(file_path, 'r') as file:
for line_number, line in enumerate(file, start=1):
numbers = line.split() # Разделяем строку на числа
for number in numbers:
if is_number_in_range(number, start, end):
print(f'Число {number} найдено на строке {line_number}')
def main():
parser = argparse.ArgumentParser(description="Утилита для поиска чисел в диапазоне в файле")
parser.add_argument('file', help='Путь к файлу')
parser.add_argument('start', type=float, help='Начало диапазона')
parser.add_argument('end', type=float, help='Конец диапазона')
args = parser.parse_args()
process_file(args.file, args.start, args.end)
if __name__ == "__main__":
main()