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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.03.2010, 18:40   #1
pupik100
Пользователь
 
Регистрация: 19.10.2009
Сообщений: 19
По умолчанию Одномерные массивы(Си)

Привет.

Помогите разобраться в одной задачке..

Определите второй (по значению) наибольший элемент
одномерного массива A(M).

Код:
#include "stdafx.h"
#include <conio.h>

int _tmain(int argc, _TCHAR* argv[])
{
	int a[20];
	int max_A,max_A2,i,N;
	printf("Enter N=");
           scanf("%d", &N);
           max_A=-4000;
           for (i=1;i<=N;i++)
           {
           printf("Enter a[%d]=", i);
           scanf("%d", &a[i]);
               if (a[i]>max_A)
               max_A2=max_A;
               max_A=a[i];
           }
	printf("Result=%d", max_A2);
	_getch();


	return 0;
}
работает только в некоторых случаях если N=5, A[]={1,2,3,5,4} то второй по величине будет 3..
Помогите пожлайста
pupik100 вне форума Ответить с цитированием
Старый 07.03.2010, 18:44   #2
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

Нумерация массивов в C начинается с 0. Соответственно, цикл должен быть таким
Код:
 for (i=0;i<N;i++)
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 07.03.2010, 18:48   #3
pupik100
Пользователь
 
Регистрация: 19.10.2009
Сообщений: 19
По умолчанию

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

там на 4-ом шаге получается 4>5 и из за этого не считает дальше.
pupik100 вне форума Ответить с цитированием
Старый 07.03.2010, 19:10   #4
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Думаю так. Сначала ищем наибольший элемент и запоминаем его позицию. Во втором цикле ищем тоже наибольший элемент пропуская предыдущий наибольший, который нашли в первый раз.
Код:
#include <iostream.h>
#include <windows.h>

int main()
{
	int a[5]={1,2,3,4,5}, max = 0, max_i = 0;

	for(int i = 0; i < 5; i++)
		if(a[i] > max)
		{
			max = a[i];
			max_i = i;
		}

	max = 0;
	for(int j = 0; j < 5; j++)
		if((max_i != j) && (a[j] > max))
			max = a[j];

	cout << "Two max: " << max << "\n";

	system("PAUSE");

	return 0;
}
profi вне форума Ответить с цитированием
Старый 07.03.2010, 19:15   #5
pupik100
Пользователь
 
Регистрация: 19.10.2009
Сообщений: 19
По умолчанию

а через один цикл возможно сделать? и еще там допустимое условие чисел от [-1000;+1000]
pupik100 вне форума Ответить с цитированием
Старый 09.03.2010, 23:50   #6
pupik100
Пользователь
 
Регистрация: 19.10.2009
Сообщений: 19
По умолчанию

если кому надо то могу выложить решение через один цикл
pupik100 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Даны одномерные массивы А и В. Сформировать массивы, состоящие из элемент LyaLya Помощь студентам 15 20.12.2009 14:12
одномерные массивы Кнопка Общие вопросы C/C++ 2 17.12.2009 09:56
Одномерные массивы!!!!! SLAVIK_71 Паскаль, Turbo Pascal, PascalABC.NET 4 10.06.2009 10:41
Одномерные массивы chistayastranichka Помощь студентам 2 29.05.2009 00:56
Одномерные массивы aiktz Помощь студентам 3 13.03.2009 16:49