Найти в матрице единственный элемент противоположного знака по отношению к другим - C (СИ)
Формулировка задачи:
Добрый вечер.
Я вас уже стал слишком часто беспокоить, хорошо, однако, кой-какие недостатки исправляю сам.
Есть программа, которая работает: она ищет один единственный элемент в матрице, который противоположного знака, чем все остальные. Это значит, что если в матрице NxM все элементы положительные, и один единственный отрицательный (нулей нет, они исключены), то ответ будет: Отрицательный. И наоборот.
Но это работает, когда вводимые N и M соответственно небольшие.
Когда я ввожу 100000000000000000 и 100000000000000000 (или даже чуть меньшее число), то пишет:
Однако, я выделил память под Long Long.
Где ошибка?
Вот код:
Segmentation fault (core dumped)
#include <stdio.h> #include <stdlib.h> int main() { long long i, j, eilute, stulpelis, elementas; int skaitliukas_teigiamu = 0; int skaitliukas_neigiamu = 0; scanf ("%lld %lld", &eilute, &stulpelis); long long **array = (long long **) malloc(eilute * sizeof(long long *)); for(i = 0; i < eilute; i++) { array[i] = (long long *) malloc(stulpelis * sizeof(long long)); } for(i = 0; i < eilute; i++) { for(j = 0; j < stulpelis; j++) { scanf("%lld", &elementas); if (elementas > 0) { skaitliukas_teigiamu++; } if (elementas < 0) { skaitliukas_neigiamu++; } } } if (skaitliukas_teigiamu > skaitliukas_neigiamu) { printf("Neigiamas\n"); } if (skaitliukas_neigiamu > skaitliukas_teigiamu) { printf("Teigiamas\n"); } // free(array); return 0; }
Решение задачи: «Найти в матрице единственный элемент противоположного знака по отношению к другим»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> int main() { int i, j, eilute, stulpelis, elementas; int *ptr; int skaitliukas_teigiamu = 0; int skaitliukas_neigiamu = 0; scanf ("%d %d", &eilute, &stulpelis); if ((ptr = (int*) malloc(eilute*stulpelis *sizeof(int))) == NULL) { return 0; } else { for(i = 0; i < eilute*stulpelis; i++) { *(ptr + i) = i; } for(i = 0; i < eilute; i++) { for(j = 0; j < stulpelis; j++) { scanf("%d", &elementas); if (elementas > 0) { skaitliukas_teigiamu++; } if (elementas < 0) { skaitliukas_neigiamu++; } } } } if (skaitliukas_teigiamu > skaitliukas_neigiamu) { printf("Otricatelnoe\n"); } if (skaitliukas_neigiamu > skaitliukas_teigiamu) { printf("Polozitelnoe\n"); } //free(array); return 0; }
Объяснение кода листинга программы
- Объявление переменных:
- i, j - для циклов;
- eilute, stulpelis - для матрицы;
- elementas - для поиска элемента;
- ptr - указатель на матрицу;
- skaitliukas_teigiamu, skaitliukas_neigiamu - для подсчета элементов с положительным и отрицательным знаком соответственно.
- Запрос на ввод размеров матрицы.
- Выделение памяти под матрицу.
- Заполнение матрицы числами от 0 до eilute*stulpelis-1.
- Перебор элементов матрицы и подсчет количества положительных и отрицательных чисел.
- Сравнение количества положительных и отрицательных чисел и вывод соответствующего сообщения.
- Освобождение памяти.
- Возврат 0, т.к. это основная функция программы и она не должна возвращать значение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д