Одномерный массив. Простые числа. "Предупреждения" и "замечания" при компиляции в gcc под linux - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. Нужна помощь. Не могу разобраться, почему не компилируется. задача:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "my.c"
/* my.c требуется написать по заданию. 
в нем void функции ввода/вывода одномерного массива. 
содержимое файла ниже. */
 
main (int argc, char* argv[])
{ 
int N, A[N];
logo();
if (argc<3) {
  puts("Программа находит простые числа в одномерном целочисленном массиве и выводит их номера.");
  puts("Для запуска используйте аргументы командной строки:");
  puts("./03 N r -- автоматическое задание массива размером N;");
  puts("./03 N h -- ручное задание массива размером N;");
  puts(", где N - целое число.");
  puts("Пример:");
  puts("./03 10 r - автоматическое задание массива размером 10."); 
}
if (argc=2) {
   N=atoi(argv[1]);
   if (N<2||N>40) {
      puts("Ошибка.\nКол-во элементов должно быть больше 1 и меньше 40"); exit(1); 
   }
   if (strcmp(argv[2], "r")==0) {
      printf("Был выбрал АВТОМАТИЧЕСКИЙ способ заполнения массива размером %d\n", N);
      GetsArrayRand(A[N], N);
   }
   if (strcmp(argv[2], "h")==0) {
      printf("Был выбрал РУЧНОЙ способ заполнения массива размером %d\n", N);
      GetsArrayHand(A[N], N);  
   }
}
puts("Исходный массив:\n");
PutsArray(A[N], N);
}// Функция рандомного ввода массива
void GetsArrayRand(int A[], int N)
{
int i;
srand(time(NULL));
for (i=1; i<=N; i++)
    A[i]=rand()%100;
}
 
// Функция ручного ввода массива
void GetsArrayHand(int A[], int N)
{
int i; 
char buffer[10];
for (i=1; i<=N; i++) {
    printf("Введите A[%d]=", i);
    fgets(buffer,5,stdin);
    A[i]=atoi(buffer); }
}
 
// Вывод массива
void PutsArray(int A[], int N)
{
int i;
for (i=1; i<=N; i++) {
    printf("%d ", A[i]); }
puts(" ");
}
gcc ругается:
03.c: В функции «main»: 03.c:53:7: предупреждение: при передаче аргумента 1 «GetsArrayRand» целое преобразуется в указатель без приведения типа [по умолчанию включена] 03.c:7:6: замечание: expected «int *» but argument is of type «int» 03.c:57:7: предупреждение: при передаче аргумента 1 «GetsArrayHand» целое преобразуется в указатель без приведения типа [по умолчанию включена] 03.c:15:6: замечание: expected «int *» but argument is of type «int» 03.c:61:1: предупреждение: при передаче аргумента 1 «PutsArray» целое преобразуется в указатель без приведения типа [по умолчанию включена] 03.c:25:6: замечание: expected «int *» but argument is of type «int»

Не по теме:

Также буду благодарен за небольшую подсказку, как лучше организовать поиск простых чисел в массиве.

Спасибо!

Решение задачи: «Одномерный массив. Простые числа. "Предупреждения" и "замечания" при компиляции в gcc под linux»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
 
void GetsArrayRand(int A[], int N)
{
    int i;
    srand(time(NULL));
    //for (i = 1; i <= N; i++)
    // Адресация в массиве начинается с 0
    for (i = 0; i < N; i++)
    {
        A[i] = rand() % 100;
    }
}
 
void GetsArrayHand(int A[], int N)
{
    int i;
    char buffer[10];
    //for (i = 1; i <= N; i++)
    // Адресация в массиве начинается с 0
    for (i = 0; i < N; i++)
    {
        printf("Введите A[%d]=", i);
        fgets(buffer, 5, stdin);
        A[i] = atoi(buffer);
    }
}
 
void PutsArray(int A[], int N)
{
    int i;
    //for (i = 1; i <= N; i++)
    // Адресация в массиве начинается с 0
    for (i = 0; i < N; i++)
    {
        printf("%d ", A[i]);
    }
    printf("\n");
}
 
//main(int argc, char* argv[])
// Функция main должна возвращать int
int main(int argc, char* argv[])
{
    //int N, A[N];
    // N не инициализирована, соответственно размерность
    // массива не известна
    int N = 0, A[40];
    //logo();
    // Не понятно что за функция
 
    //if (argc < 3)
    // Аргументов должно быть 3. Первым (т.е. 0-ым) идёт имя программы
    if (argc != 3)
    {
        puts("Программа находит простые числа в одномерном целочисленном массиве и выводит их номера.");
        puts("Для запуска используйте аргументы командной строки:");
        puts("./03 N r -- автоматическое задание массива размером N;");
        puts("./03 N h -- ручное задание массива размером N;");
        puts(", где N - целое число.");
        puts("Пример:");
        puts("./03 10 r - автоматическое задание массива размером 10.");
        return 1;
    }
    //if (argc = 2)
    // Даже если это и оставлять и не пользоваться return-ом 3-мя строчками выше
    // всё равно не верно, ибо аргументов будет 3
 
    N = atoi(argv[1]);
    if (N < 2 || N > 40)
    {
        puts("Ошибка.\nКол-во элементов должно быть больше 1 и меньше 40");
        exit(1);
    }
    if (strcmp(argv[2], "r") == 0)
    {
        printf("Был выбрал АВТОМАТИЧЕСКИЙ способ заполнения массива размером %d\n", N);
        //GetsArrayRand(A[N], N);
        // Передаём весь массив, а не значение одного его элемента
        GetsArrayRand(A, N);
    }
    if (strcmp(argv[2], "h") == 0)
    {
        printf("Был выбрал РУЧНОЙ способ заполнения массива размером %d\n", N);
        //GetsArrayHand(A[N], N);
        // Передаём весь массив, а не значение одного его элемента
        GetsArrayHand(A, N);
    }
 
    puts("Исходный массив:\n");
    //PutsArray(A[N], N);
    // Передаём весь массив, а не значение одного его элемента
    PutsArray(A, N);
 
    return 0;
}

Объяснение кода листинга программы

  1. Объявлены функции:
    • GetsArrayRand()
    • GetsArrayHand()
    • PutsArray()
    • main()
  2. В функции main() инициализированы переменные:
    • N = 0
    • A[40]
  3. Проверка аргументов командной строки:
    • Если аргументов меньше или равно 2, выводится сообщение об ошибке и программа завершается.
    • Если аргументов больше 2, то:
      • Переменная N инициализируется значением первого аргумента командной строки.
      • Переменная N проверяется на соответствие условиям (больше 1 и меньше 40).
      • Если условия не выполняются, выводится сообщение об ошибке и программа завершается.
      • Если условия выполняются, то:
      • Если второй аргумент равен r, то вызывается функция GetsArrayRand().
      • Если второй аргумент равен h, то вызывается функция GetsArrayHand().
  4. Вывод исходного массива:
    • Вызывается функция PutsArray().
  5. Возвращение значения 0, что означает успешное завершение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.8 из 5
Похожие ответы