Поменять все негативные числа на самое маленькое положительное число - C (СИ)
Формулировка задачи:
Здравствуйте!
Необходимо составить программу для обработки массива. Программа должна состоять из главной функции и двумя подпрограммами. В каждой подпограмме надо делать одну и ту же обработку начального массива, но для реализации одной функции надо использовать переменные с индексами, для вторый - показатели. Функциям надо отдать массив и верхние границы его индексов(массив локальный переменный).
В главной функции предусмотреть: вывод информации об авторе, заполнение массива и его вывод, вызов подпрогрпмм. Предусмотреть выбор вида заполнение массива(случайными числами либо самостоятельно введены числами) . Для проверки программы использовать оба размера массивов.
Задача: Поменять все негативные числа на самое маленькое положительное число( не 0). Размеры массива 20 и 25 элементов.
пока что с указателями не сделал.
ОШИБки:
#include <stdio.h> #include <windows.h> #include <time.h> #include <conio.h> int function1(int arr[]); int function2(int *arr[]); int main() { int arr1[20],i; int arr2[25],n; int choice,choice2; do { system ("cls"); printf("меню\n"); printf("1. ИНФО\n 2. заполнение массива\n 3. вывод массива\n"); printf("4. массив 20 элементов, функция с индексами\n 5. массив с 20 элементами, функция с указателями\n"); printf("6. массив 25 elementov, funkcija s indeksiem\n 7. Massiv s 25 elementami, функция с указателями\n"); printf("8. EXIT\n"); printf("\nВЫБОР: "); scanf("%d", &choice); switch(choice) { case 1: system("cls"); printf(" ИНФО/n"); break; case 2: do { system("cls"); srand(time(NULL)); printf("меню\n"); printf("1. рандом\n"); printf("2. s klaviaturi\n"); printf("\n выбор: "); scanf("%d", &choice2); switch(choice2) { case 1: printf("Masiv:\n 1. Odnodimenss masiv\n"); for(i=0; i<20; i++) { arr1[i]=10-rand()%20; // числовой diapazon -10..10, целые } printf("Masiv:\n 2. Odnodimenss masiv\n"); for(i=0; i<25; i++) { arr2[i]=10-rand()%20; // chislovoj diapazon -10..10, целые } break; case 2: for(i=0; i<20; i++) { printf("Vvedite %i element" ,i); arr1[i]=getche(); } for(i=0; i<25; i++) { printf("vvedite %i element" ,i); arr2[i]=getche(); } break; default: printf("Neverno!") ; getche(); } } while (choice!=1 || choice!=2); break; case 3: system("cls"); printf("Masiv:\n 1. Odnodimensijas masiv\n"); for(i=0; i<20; i++) { printf("%4d", arr1[i]); } printf("Masivi:\n 2. Odnodimensijas masiv\n"); for(i=0; i<25; i++) { printf("%4d", arr2[i]); } break; case 4: system("cls"); function1(arr1[20]); getch(); break; case 5: system("cls"); function1(arr2[25]); break; case 6: system("cls"); function2(arr1[20]); break; case 7: system("cls"); function2(arr2[25]); break; case 8: break; default: printf("neverno!"); getch(); } // switch konec } // do konec while (choice!=8); int function1(int arr[]); { int tmp,arr[]; printf(" masiv: \n"); for (i=0; i<n;i++) printf("%d ",arr[i]); printf("\n"); tmp=100; for (i=0; i<n;i++) if (arr[i]>0 && arr[i] < tmp) { tmp=arr[i]; } for (i=0; i<n;i++) if (arr[i]<0) { arr[i]=tmp; } printf(" POlu4en masiv: \n"); for (i=0; i<=n;i++) printf("%d ",arr[i]); printf("\n"); } system ("pause"); int function2(int arr[]); { return 0; }}
invalid conversion from `int' to `int*'
иinitializing argument 1 of `int function1(int*)'
наfunction1(arr1[20]);
(строка 84) Заранее спасибо!
думаю, что проблема в декларировании функции. мне, используя одну подпрограмму надо обработать 2 массива, поэтому в самой функции сделать так, чтобы смогла обрабатывать 2 массива с разными массивами
Решение задачи: «Поменять все негативные числа на самое маленькое положительное число»
textual
Листинг программы
#include <stdio.h> #include <windows.h> #include <time.h> #include <conio.h> int function1(int arr[]); int function2(int arr[]); int main() { int arr1[20],i,max; int arr2[25],n; int choice,choice2; do { system ("cls"); printf("Меню\n"); printf("1. ИНФО\n 2. Заполение массива\n 3. Создание массива\n"); printf("4. Массив с 20 элементами, функция с индексами\n 5.Массив с 20 элементами, функция с указателями\n"); printf("6. Массив с 25 элементами, функция с индексами\n 7. Массив с 25 элементами, функция с указателями\n"); printf("8. ВЫХОД\n"); printf("\nВАШ выбор: "); scanf("%d", &choice); switch(choice) { case 1: system("cls"); printf(" ИНФО"); break; case 2: do { system("cls"); srand(time(NULL)); printf("меню\n"); printf("1. Рандом\n"); printf("2. Клавиатура\n"); printf("\nВаш выбор: "); scanf("%d", &choice2); switch(choice2) { case 1: printf("Заполнение 1. массива\n"); for(i=0; i<20; i++) { arr1[i]=10-rand()%20; // } printf("Заполнение 2 массива\n"); for(i=0; i<25; i++) { arr2[i]=10-rand()%20; // } break; case 2: for(i=0; i<20; i++) { printf("Введите &i элемент" ,i); arr1[i]=getche(); } for(i=0; i<25; i++) { printf("Введите &i элемент" ,i); arr2[i]=getche(); } break; default: printf("Неверно") ; getche(); } } while (choice!=1 || choice!=2); break; case 3: system("cls"); printf("вывод\n"); for(i=0; i<20; i++) { printf("%4d", arr1[i]); } printf("вывод\n"); for(i=0; i<25; i++) { printf("%4d", arr2[i]); } break; case 4: system("cls"); max=20; function1(&arr1[max]); getch(); break; case 5: system("cls"); max=25; function1(&arr2[max]); break; case 6: system("cls"); max=20; function2(&arr1[max]); break; case 7: system("cls"); max=25; function2(&arr2[25]); break; case 8: break; default: printf("неверно"); getch(); } // switch конец } // do кнец while (choice!=8); system ("pause"); return 0; } int function1(int arr[], int max) { int tmp; printf(" Было: \n"); for (int i=0; i<=max;i++) printf("%d ",arr[i]); printf("\n"); tmp=100; for (int i=0; i<=max;i++) if (arr[i]>0 && arr[i] < tmp) { tmp=arr[i]; } for (int i=0; i<=max;i++) if (arr[i]<0) { arr[i]=tmp; } printf(" СТало: \n"); for (int i=0; i<=max;i++) printf("%d ",arr[i]); printf("\n"); } int function2(int arr[], int* max) { system("cls"); int tmp2; printf(" Было: \n"); for (int* i=arr; i<=max;i++) printf("%d ",*(arr+i)); printf("\n"); tmp2=100; for (int* i=arr; i<=max;i++) if ((*i>0) && (*i < tmp2)) { tmp2=*i; } for (int* i=arr; i<=max;i++) if (*i<0) { *i=tmp2; } printf(" Стало: \n"); for (int* i=arr; i<=max;i++) printf("%d ",*i); printf("\n"); }
Объяснение кода листинга программы
В этом коде реализована программа на языке C, которая меняет все негативные числа в массиве на самое маленькое положительное число. Список действий программы:
- Ввод числа из массива в переменную
choice
. - Проверка значения
choice
. - Если
choice
равно 1 или 2, выполнение функцийfunction1
илиfunction2
соответственно. - Если
choice
равно 3, вывод содержимого массиваarr1
иarr2
. - Если
choice
равно 4 или 5, выполнение функцийfunction1
илиfunction2
соответственно с использованием массиваarr1
илиarr2
. - Если
choice
равно 6 или 7, выполнение функцийfunction1
илиfunction2
соответственно с использованием массиваarr1
илиarr2
. - Если
choice
равно 8, выход из программы. - Если
choice
не равно 1, 2, 3, 4, 5, 6, 7 или 8, вывод сообщенияневерно
. Функцияfunction1
принимает два аргумента: массив и максимальное значение индекса в массиве. Внутри функции происходит вывод содержимого массива, а затем замена всех негативных чисел на самое маленькое положительное число, найденное в массиве. Функцияfunction2
также принимает два аргумента: массив и указатель на максимальное значение индекса в массиве. Внутри функции происходит вывод содержимого массива, а затем замена всех негативных чисел на самое маленькое положительное число, найденное в массиве. Обратите внимание, что в этой функции используется оператор*
для доступа к элементам массива через указатель.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д