Записать алгоритм, проверяющий является ли заданное число простым как рекурсивную функцию - C (СИ)

  1. 2. Записать алгоритм, проверяющий является ли заданное число простым как рекурсивную функцию. Вывести на экран все простые числа, не превосходящие n. Только пожалуйста более подробнее , ну эт не главное


textual

Код к задаче: «Записать алгоритм, проверяющий является ли заданное число простым как рекурсивную функцию - C (СИ)»

#include <conio.h>
 #include <stdio.h>
int prost(int s,int count)
{
    if(s==count) // делиться только на себя
        return 1; 
    if(s%count==0) // делится на что-то еще
        return 0;
    return prost(s,count+1); // проверяем следующее
 
}
int main()
{
    int i,n;
    puts("n=");
    scanf("%d",&n);
    for(i=2;i<=n;i++)
        if(prost(i,2)) // начинаем с двойки
            printf(" %d",i);
    getch();
}

СДЕЛАЙТЕ РЕПОСТ

12   голосов, оценка 4.167 из 5



Похожие ответы
  1. Написала программу, она компилируется, но не даёт результат (текстовые файлы я создала). Помогите, пожалуйста C++1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #include #include #include FILE *f, *f1; int main() {int x, q=0,  sum=0; double l; f=fopen("D:\\TextFile", "rt"); f1=fopen("D:\\rez", "wt"); if(f == NULL)         {           printf("Problems");           system("pause");           return 1;         } if (fscanf(f,"%d",&x)>0)   {sum+=x; q+=1; l=sum/q; }     fprintf(f1," %3lf",l); fclose(f); fclose(f1);   return 0; }

  1. Не работает функция delspace. C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 #include #define LIM 1000 // предел длины строки       int get_line(char fixed_line[], int lim); //сохраняет строку в массив, возвращает длину строки void copy(char to[], char from[]); // копирует одну строку в другую void delspace(char a[], int len); // функция удаления из строки лишних пробелов и табуляций   int main() {   int len; // текущая длина строки     char current_line[LIM]; // текущая записанная строка     char fixed_line[LIM]; // измененная строка на вывод         while((len = get_line(current_line, LIM))) // пока мы считываем входной поток     {   if(len > 1)         {   copy(fixed_line, current_line); // скопировать строку вводу в наш массив             delspace(fixed_line, len); // удаляем пробелы и знаки табуляции в строке             printf("%s\n", fixed_line); // написать строку         }             } return 0; } /* get_line-считывание строки в массив, возврат ее длины */ int get_line(char s[], int lim) {   int i = 0;     char c;       for(i = 0; i < lim - 1 && (c = getchar()) != '\n' && c != EOF; ++i)     {   s[i] = c;     }         if(c == '\n')     {   s[i] = c;         ++i;        }     s[i] = '\0';     return i; }   /* copy-копирование строки from в to */ void copy(char to[], char from[]) {   int i = 0;       while((to[i] = from[i]) != '\0')     {   ++i;     } } /* delete_space удаление пробелов и знаков табуляции в строке */ void delspace(char a[], int length) {     int i;     for(i = 0; i < length; ++i)     {   if(a[i] == ' ' || a[i] == '\t')         {   putchar('\b');         }       } }Добавлено через 2 часа 22 минуты переписал функцию, но в выводе иногда дописывает элементы в количестве равные количеству пробелов. C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 /* delete_space удаление пробелов и знаков табуляции в строке */ void delspace(char a[], int length) {     int i;     int j;     char lineout[1000];           for(i = 0, j = 0; i < length; ++i)         {   if(a[i] != ' ' && a[i] != '\t')             {   lineout[j] = a[i];                 ++j;             }             else             {   putchar('\b');             }     }     for(i = 0; i < length; ++i)     {   a[i] = lineout[i];     }   }

  1. Здравствуйте! Вопрос наверное крайне глупый, но выходит ошибка. Задача такова, что нужно считать все символы в массиве и переписать их в ином виде. Например первый массив "XXYYYGXX", во второй массив нужно прописать "2X3YG2X", то есть указать сколько раз символы повторились. так же в работе нужно использовать только указатели и только динамические массивы. Выходит нужен второй массив, куда будут переписываться измененные значения. Первый план, который пришел в голову: 1) Подсчитываем одинаковые подрядидущие символы (count) 2) как только символы перестали повторяться, переписываем во второй массив текущее количество count и текущий элемент 3) Обнуляем count и смещаем индекс второго массива на 1 4) Повторяем пункт 1C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 void input(char *arr, int *siz) //забиваем первый массив символами {   gets_s(arr, *siz); }   void dec(char *arr, char *arr_2, int *count) {   for (*arr; *arr != '\0'; *arr++)   {     if (*arr == *(arr + 1)) //если текущий элемент равен следующему     {       *count++;     }     if (*arr != *(arr + 1) && *arr == *(arr - 1)){ //если текущий элемент не равен следующему, НО равен предыдущему (таким образом мы не учитываем символы, которые не имеют пары)        char c = *count + '0'; //переводим счетчик в символьный тип, для дальнейшей записи.   //*********************************** //А вот здесь нужно сделать пункт 2) и 3), т.е. переписать значения во второй массив. Что у меня и не получается.... //***********************************     }     } }   void output(char *arr, char *arr_2) {   printf("%s\n", arr);   printf("%s", arr_2);   }   void main() {   int siz = 1024;   char *arr = (char*)malloc(siz*sizeof(char)); //выделяем память под динамический массив   int count = 0;   //int siz_2 = 1024;   //char *arr_2 = (char*)malloc(siz_2*sizeof(char));     input(arr, &siz);   dec(arr, arr_2, &count);   output(arr, arr_2);     free(arr); //освобождаем память   //free(arr_2);     system("pause"); }

  1. В структуре нужно записать строку с пробелами, но gets пропускает, а printf работает до пробела. C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 #define _CRT_SECURE_NO_WARNINGS #include #include #include   struct films {     char name[60];     char actor[60];     int time;     int price; }; void read(struct films *Films, int i);       void read(struct films *Films, int i) {     for (int j = 0; j < i; j++)     {           printf("Введiть назву фільма\n");         gets(&Films[j].name);         printf("Имя главного героя\n");         scanf("%s",&Films[j].actor);         printf("Длина фильма\n");         scanf("%d", &Films[j].time);         printf("Стоимость диска\n");         scanf("%d", &Films[j].price);     } } int main() {     SetConsoleCP(1251);     SetConsoleOutputCP(1251);     struct films Films[2];     read(Films, 2);     printf("\n");             _getch();     return 1; }

  1. Добрый день, хочу считать побайтово файл и записать его в другой. С текстовыми файлами все нормально, но с картинками не работает корректно. В чем может быть проблема? Заранее спасибо. Вот код:C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 #include #include #include   int main() { #define MAX_FILE_SIZE 100000     FILE *uk1;     char filename[255] = "200.gif";     unsigned int readdata[MAX_FILE_SIZE];     int file_length = 0;     if ((uk1 = fopen(filename, "rb")) == NULL)     {         printf("Error! Can not read file %s.\n", filename);         exit(1);     }     else     {         // Определяется размер файла         fseek(uk1, 0, SEEK_END);         file_length = ftell(uk1);         printf("File %s lenght is %d\n", filename, file_length);         // Побайтно считыватся данные         fseek(uk1, 0, SEEK_SET);         int i = 0;         while (!feof(uk1) && i

  1. C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #define S 80 #define F 50 void write_file(char name[F]); int main(void) {     SetConsoleCP(1251);     SetConsoleOutputCP(1251);     char fname[F];     printf("Введiтьiм'я файлу:\n");     scanf("%s%*c", &fname);     write_file(fname);       return 0; }   void write_file(char name[F]) {     int str[10][S];     FILE *fp;         if ((fp = fopen(name, "w+")) == NULL) {         printf("Помилка при вiдкриттi файлу.\n");         exit(1);     }     int i, j, x, min, temp, A[6][9];           srand(time(NULL));     for (i = 0; i < 6; i++, putchar('\n'))     {         for (j = 0; j < 9; j++)                     printf("%4d", A[i][j] = rand() % 999);             fprintf(fp, " %4d %4d %4d %4d %4d %4d %4d %4d %4d\n %4d %4d %4d %4d %4d %4d %4d %4d %4d\n %4d %4d %4d %4d %4d %4d %4d %4d %4d\n %4d %4d %4d %4d %4d %4d %4d %4d %4d\n %4d %4d %4d %4d %4d %4d %4d %4d %4d\n %4d %4d %4d %4d %4d %4d %4d %4d %4d\n", A[0][0], A[0][1], A[0][2], A[0][3], A[0][4], A[0][5], A[0][6], A[0][7], A[0][8], A[1][0], A[1][1], A[1][2], A[1][3], A[1][4], A[1][5], A[1][6], A[1][7], A[1][8], A[2][0], A[2][1], A[2][2], A[2][3], A[2][4], A[2][5], A[2][6], A[2][7], A[2][8], A[2][0], A[2][1], A[2][2], A[2][3], A[2][4], A[2][5], A[2][6], A[2][7], A[2][8], A[3][0], A[3][1], A[3][2], A[3][3], A[3][4], A[3][5], A[3][6], A[3][7], A[3][8], A[3][0], A[3][1], A[3][2], A[3][3], A[3][4], A[3][5], A[3][6], A[3][7], A[3][8], A[4][0], A[4][1], A[4][2], A[4][3], A[4][4], A[4][5], A[4][6], A[4][7], A[4][8]);                               int B = max(A[0][0], A[0][1], A[1][1], A[1][2], A[3][4], A[3][5], A[4][5], A[4][6], A[5][7], A[5][8], A[6][8], A[6][9]);         printf("%d %d %d %d %d %d %d %d %d %d   ", A[0][0], A[0][1], A[1][1], A[1][2], A[3][4], A[3][5], A[4][5], A[4][6], A[5][7], A[5][8], A[6][8], A[6][9]);     fprintf(fp, "\n%d %d %d %d %d %d %d %d %d %d \n", A[0][0], A[0][1], A[1][1], A[1][2], A[3][4], A[3][5], A[4][5], A[4][6], A[5][7], A[5][8], A[6][8], A[6][9]);     printf("\n");         printf("%d ---- MAX element\n", B);     printf("\n");     fprintf(fp, "%d ---- MAX element\n", B);     fclose(fp); }Нужно записать вот этот массив C1 2 3 4 5 6  srand(time(NULL));     for (i = 0; i < 6; i++, putchar('\n'))     {         for (j = 0; j < 9; j++)                     printf("%4d", A[i][j] = rand() % 999); в файл.C1 fprintf(fp, " %4d %4d %4d %4d %4d %4d %4d %4d %4d\n %4d %4d %4d %4d %4d %4d %4d %4d %4d\n %4d %4d %4d %4d %4d %4d %4d %4d %4d\n %4d %4d %4d %4d %4d %4d %4d %4d %4d\n %4d %4d %4d %4d %4d %4d %4d %4d %4d\n %4d %4d %4d %4d %4d %4d %4d %4d %4d\n", A[0][0], A[0][1], A[0][2], A[0][3], A[0][4], A[0][5], A[0][6], A[0][7], A[0][8], A[1][0], A[1][1], A[1][2], A[1][3], A[1][4], A[1][5], A[1][6], A[1][7], A[1][8], A[2][0], A[2][1], A[2][2], A[2][3], A[2][4], A[2][5], A[2][6], A[2][7], A[2][8], A[2][0], A[2][1], A[2][2], A[2][3], A[2][4], A[2][5], A[2][6], A[2][7], A[2][8], A[3][0], A[3][1], A[3][2], A[3][3], A[3][4], A[3][5], A[3][6], A[3][7], A[3][8], A[3][0], A[3][1], A[3][2], A[3][3], A[3][4], A[3][5], A[3][6], A[3][7], A[3][8], A[4][0], A[4][1], A[4][2], A[4][3], A[4][4], A[4][5], A[4][6], A[4][7], A[4][8]);вот такой отрывок кода работает, но не выглядит хорошо.. вот и не знаю как проще записать этот отрывок кода.

  1. Добрый вечер. Столкнулся с проблемой, не могу записать структуру в файл. Есть структура C++1 2 3 4 5 6 7 8 9 10 11 struct Pokypatel {     char fam[10];     char name[100];     char otche[100];     char sity[100];     char yl[100];     int numhouse[100];     int numflooat[100];     int numcart[100];     int codpok[100]; };На этом этапе я заполняю его:C++1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 printf("Ведите Фамилию:");     gets_s(p[i].fam);     printf("Ведите имя:");     gets_s(p[i].name);     printf("Ведите отчество:");     gets_s(p[i].otche);     printf("Ведите город:");     gets_s(p[i].sity);     printf("Ведите Улицу:");     gets_s(p[i].yl);     printf("Ведите № дома:");     scanf("%d%*c",  p[i].numhouse);     printf("Ведите № квартиры:");     scanf("%d", p[i].numflooat);     printf("Ведите № карты:");     scanf("%d", p[i].numcart);     printf("Ведите № покупки:");     scanf("%d", p[[/CSHARP]i].codpok);А на этом этапе я записываю его в файл:C++1 2 3 FILE *f1 = fopen("Text.txt", "w");     fwrite(&p[i], sizeof(char), 1, f1);     fclose(f1);Проблема в том что он записывает его с мусором, пробовал C++1 p[i] = {};Не помогло. Помогите пожалуйста!

  1. как введёную пользователем строку записать в массив. если размер строки известен это понятно как делать. но если размер троки не известен заранее то и размер массива нельзя определить. Вопрос: как в си сделать чтобы вводилась строка, определялся её размер и под этот размер объявлялся массив и в него записалась строка?

  1. записать число в обратном порядке например 12345 - 54321(СИ)