Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2017, 15:26   #1
наталья776
Пользователь
 
Регистрация: 31.01.2017
Сообщений: 12
По умолчанию Одномерный массив.

Код:
<#include <stdlib.h> //не правильно ищет индекс элемента
#include <stdio.h>
#include <time.h>
#include <locale.h>
#include <malloc.h>
#include <conio.h>
#include <process.h>

//Заданы два массива А(N) и В(M). Первым на печать вывести массив, содержащий наибольшее значение. 
//Напечатать также это значение и его порядковый номер

#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <locale.h>
#include <process.h>
#include <malloc.h>

int getMax(int*, int);
void printResults(int*, int, int, int);

void main(void) {
	setlocale(LC_CTYPE, "Russian");
	int n1, n2, max1, max2;	
	int *a1, *a2;	

	RE1: printf_s("Enter the number of elements in 1st array: "); //printf_s("Введите количество элементов в Вашем  1-м массиве:");
	scanf_s("%d", &n1);

	if (n1 <= 0) { 	
		puts("No! The number of elements in array should be > 0!");//puts("Нет! Число элементов в массиве должно быть > 0!");
		goto RE1;
	}
	
	if ((a1 = (int*)calloc(n1, sizeof(int))) != NULL) {
		puts("Enter first array elements:");//puts("Введите элементы первого массива:");

		for (int i = 0; i < n1; i++) {
			printf_s("a[%d] = ", i);
			scanf_s("%d", a1+i);
		}
	}
	else {
		puts("Lack of memory!");//puts("Недостаточно памяти!");
	}

	RE2: printf_s("Enter the number of elements in 2 array: ");//printf_s("Введите количество элементов в Вашем  2м массиве:");
	scanf_s("%d", &n2);

	if (n2 <= 0) {
		puts("No! The number of elements in array should be > 0!");//puts("Нет! Число элементов в массиве должно быть > 0!");
		goto RE2;
	}
	
	if ((a2 = (int*)malloc(n2*sizeof(int))) != NULL) {
		puts("Enter second array elements:");//puts("Введите элементы первого массива:");

		for (int i = 0; i < n2; i++) {
			printf_s("a[%d] = ", i);
			scanf_s("%d", a2+i);
		}
	}
	else {
		puts("Lack of memory!");//puts("Недостаточно памяти!");
	}

	max1 = getMax(a1, n1);
	max2 = getMax(a2, n2);
	if (max1>max2){
	printResults(a1, n1, max1, 1);
	printResults(a2, n2, max2, 2);
	}
	else {
		printResults(a2, n2, max2, 2);
		printResults(a1, n1, max1, 1);
	}
	_getch();
}

int getMax(int* arr, int n) {
	int max = *arr;
	for (int i = 1; i < n; i++) {
		if (*(arr+i) > max) {
			max = *(arr + i);
			int index=i;
		}
	}
	return max;
}

void printResults(int* arr, int n, int max, int i) {
	printf_s("\nArray %d:\n", i);
	printf_s("Maximum = %d and index=%d\n", max, i);
	
	for (int i = 0; i < n; i++){
		printf_s("a[%d] %d,\n", *(arr + i), i+1);
	}
}>

___________
сначала надо выделить код, потом нажать кнопочку "#" на панели инструментов: (читать FAQ)
модератор.

Последний раз редактировалось Serge_Bliznykov; 16.02.2017 в 15:50.
наталья776 вне форума Ответить с цитированием
Старый 16.02.2017, 15:29   #2
наталья776
Пользователь
 
Регистрация: 31.01.2017
Сообщений: 12
По умолчанию

Даны 2 массива а1(n1) и a2(n2). Первым на печать вывести массив, содержащий наибольшее значение. Напечатать также это значение и его порядковый номер. Наибольшее значение находит, а вот с порядковым номером - беда. К может, помогите, пожалуйста.
наталья776 вне форума Ответить с цитированием
Старый 16.02.2017, 15:34   #3
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

надо как-то с getMax помимо max ретарнуть и index
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 16.02.2017, 15:41   #4
наталья776
Пользователь
 
Регистрация: 31.01.2017
Сообщений: 12
По умолчанию

пробовала, но не хочет работать программа, просто после создания массива выбрасывает ошибку.
наталья776 вне форума Ответить с цитированием
Старый 16.02.2017, 16:29   #5
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

не умею С, но имхо
Код:
int getMaxPos(int* arr, int n, int max) {
        int index = 0;
	for (int i = 1; i < n; i++) {
		if (*(arr+i) = max) {
			index=i;
		}
	}
	return index;
}
Код:
        max1 = getMax(a1, n1);
	max2 = getMax(a2, n2);
	if (max1>max2){
	printResults(a1, n1, max1, getMaxPos(max1));
	printResults(a2, n2, max2, getMaxPos(max2));
	}
	else {
		printResults(a2, n2, max2, getMaxPos(max2));
		printResults(a1, n1, max1, getMaxPos(max1));
	}
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 17.02.2017, 11:02   #6
наталья776
Пользователь
 
Регистрация: 31.01.2017
Сообщений: 12
По умолчанию

Спасибо, большое за помощь, но, к сожалению, так тоже не работает(((
наталья776 вне форума Ответить с цитированием
Старый 17.02.2017, 11:35   #7
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Приведите код, который "тоже не работает((("
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 17.02.2017, 12:11   #8
наталья776
Пользователь
 
Регистрация: 31.01.2017
Сообщений: 12
По умолчанию

Код:
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <locale.h>
#include <process.h>
#include <malloc.h>

int getMax(int*, int);
void printResults(int*, int, int, int);
int getMaxPos(int* arr, int n, int max);

int getMaxPos(int* arr, int n, int max) {
        int index = 0;
	for (int i = 1; i < n; i++) {
		if (*(arr+i) = max) {
			index=i;
		}
	}
	return index;
}

void main(void) {
	setlocale(LC_CTYPE, "Russian");
	int n1, n2, max1, max2, index1, index2;	
	int *a1, *a2;	

	RE1: printf_s("Enter the number of elements in 1st array: "); //printf_s("Введите количество элементов в Вашем  1-м массиве:");
	scanf_s("%d", &n1);

	if (n1 <= 0) { 	
		puts("No! The number of elements in array should be > 0!");//puts("Нет! Число элементов в массиве должно быть > 0!");
		goto RE1;
	}
	
	if ((a1 = (int*)calloc(n1, sizeof(int))) != NULL) {
		puts("Enter first array elements:");//puts("Введите элементы первого массива:");

		for (int i = 0; i < n1; i++) {
			printf_s("a[%d] = ", i);
			scanf_s("%d", a1+i);
		}
	}
	else {
		puts("Lack of memory!");//puts("Недостаточно памяти!");
	}

	RE2: printf_s("Enter the number of elements in 2 array: ");//printf_s("Введите количество элементов в Вашем  2м массиве:");
	scanf_s("%d", &n2);

	if (n2 <= 0) {
		puts("No! The number of elements in array should be > 0!");//puts("Нет! Число элементов в массиве должно быть > 0!");
		goto RE2;
	}
	
	if ((a2 = (int*)malloc(n2*sizeof(int))) != NULL) {
		puts("Enter second array elements:");//puts("Введите элементы первого массива:");

		for (int i = 0; i < n2; i++) {
			printf_s("a[%d] = ", i);
			scanf_s("%d", a2+i);
		}
	}
	else {
		puts("Lack of memory!");//puts("Недостаточно памяти!");
	}

	max1 = getMax(a1, n1);
	max2 = getMax(a2, n2);
	if (max1>max2){
	printResults(a1, n1, max1, getMaxPos(max1));
	printResults(a2, n2, max2, getMaxPos(max2));
	}
	else {
		printResults(a2, n2, max2, getMaxPos(max2));
		printResults(a1, n1, max1, getMaxPos(max1));
	}
	_getch();
}

int getMax(int* arr, int n, int index) {
	int max = *arr;
	index=0;
	for (int i = 1; i < n; i++) {
		if (*(arr+i) > max) {
			max = *(arr + i);
			index=i;
		}
	}
	return max, index;
}

void printResults(int* arr, int n, int max, int index) {
	printf_s("\nArray %d:\n", arr);
	printf_s("Maximum = %d, index=\n", max, index);
	
	for (int i = 0; i < n; i++){
		printf_s("a[%d] %d,\n", *(arr + i), index);
	}
}
наталья776 вне форума Ответить с цитированием
Старый 17.02.2017, 12:13   #9
наталья776
Пользователь
 
Регистрация: 31.01.2017
Сообщений: 12
По умолчанию

Код:
else {
		printResults(a2, n2, max2, getMaxPos(max2));
		printResults(a1, n1, max1, getMaxPos(max1));
	}
в этих строках "подсвечивается" в функции max2 и max1
наталья776 вне форума Ответить с цитированием
Старый 17.02.2017, 13:00   #10
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

А если переписать getMax?
Код:
int getMax(int* arr, int n) {
	int max = *arr;
	for (int i = 1; i < n; i++) {
		if (*(arr+i) > max) {
			max = *(arr + i);
		}
	}
	return max
}
вы возвращали 2 значения max, index - С позволяет так делать?
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программирование в VBA: двумерный массив M на N, нужно создать новый одномерный массив TheAnnihilyator Помощь студентам 1 04.06.2014 09:16
Найти одномерный массив элементы которого равны минимальным значениям в строках исходной матрицы и одномерный массив элементы... Richik123 Microsoft Office Excel 1 16.10.2013 15:45
Двумерный массив развернуть в одномерный массив по строкам[QBASIC] TrueStyle777 Помощь студентам 3 29.05.2013 21:56
Дан одномерный массив, сформировать новый массив по заданному правилу {Delphi} Nickolai47 Помощь студентам 5 16.12.2012 14:51
Одномерный массив. Q basic - Построить новый массив из элементов исходного ,которые больше P. Marishkaa Помощь студентам 2 12.01.2010 16:54