C/C++

Програмирование на си

Помогите пожалуйста сделать лабу!
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <time.h>
#define RAND(min, max) (rand() % ((max) - (min)) + (min))
#define BUFFER 6
_Bool isprime(unsigned n, unsigned m) {
if (m > (n >> 1)) return true;
return n % m? isprime(n, ++m) : false;
}
void fill(int* box, int a, int b) {
int i;
srand((unsigned)time(NULL));
for (i = 0; i < BUFFER; ++i) box[i] = RAND(a, b);
}
void show(int* box) {
int i;
for (i = 0; i < BUFFER; ++i) printf("%3i", box[i]);
puts("");
}
size_t countprime(int* box) {
size_t n = 0;
for (int i = 0; i < BUFFER; ++i) if (isprime(box[i], 2)) ++n;
return n;
}
void firstprime(int* box) {
int i;
for (i = 0; i < BUFFER; ++i) if (isprime(box[i], 2)) {
printf("%3i\n", box[i]);
break;
}
}
void swapprime(int* box) {
int i = 0, j;
while (!isprime(box[i], 2)) ++i;
j = i;
while (!isprime(box[++i], 2));
int tmp = box[i];
box[i] = box[j];
box[j] = tmp;
show(box);
}
void indexesprime(int* box) {
int i;
for (i = 0; i < BUFFER; ++i) if (isprime(box[i], 2)) printf("%3i ", i);
puts("");
}
int main(void) {
int box[BUFFER];
size_t count;
fill(box, 10, 100);
show(box);
count = countprime(box);
if (!count) puts(" Not found!");
else if (1 == count) firstprime(box);
else if (2 == count) swapprime(box);
else indexesprime(box);
return 0;
}
Konstantin Brosowski
Konstantin Brosowski
73 350
Лучший ответ
Vladimir Мякота Простите выдаёт ошибку
Konstantin Brosowski int isprime(unsigned n, unsigned m) {
if (m > (n >> 1)) return 1;
return n % m? isprime(n, ++m) : 0;
}

Директиву stdbool.h можете убрать
По-моему, тут двух функций вполне хватит: prime, проверяющую число на простоту, и главную функцию main (плюс ещё стандартные функции time, srand и rand). Алгоритм простой: задаём с экрана длину массива, создаём три динамических массива a (для псевдослучайных чисел), b (для значений простых чисел) и с (для индексов простых чисел), заполняем в цикле массив а, в том же цикле проверяем на простоту очередной сгенерированный элемент массива а, если он - простое число, добавляем его значение в массив b, индекс массива а в массив с и увеличиваем счётчик простых чисел m на единицу. По выходу из цикла делаем ветвление: если m=0, то ничего не делаем, если m=1, выводим единственный элемент массива b, если m=2, меняем два первых элемента массива b местами, а если m>2, тогда выводим m элементов массива с на экран через какой-нибудь разделитель (у меня это точка с запятой). Массивы a, b, c пока больше не нужны, поэтому и стираем их оператором delete.
Саня Бондарь
Саня Бондарь
29 440