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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2012, 23:27   #1
FenixGuard
Новичок
Джуниор
 
Регистрация: 28.04.2012
Сообщений: 10
По умолчанию Работа с массивами (С)

Доброго времени суток!
Пришел на Ваш форум за помощью. Необходимо решить 3 задачи, а вот у самого не получается, есть разные коды у меня для решения задач на максимальное и минимальное значение массива и тому подобное, а вот к этому не знаю как подобраться. Если не код, так хотя бы наводку, подсказку.

1) Дан массив размера N. Определить, существуют ли в массиве три последовательных элемента, образующих арифметическую или геометрическую прогрессию. Если существуют, то вывести их на экран, указав их значения и индексы.

2) Известна высота над уровнем моря каждого километра 100-километровой автотрассы. Определить, на каком расстоянии от начала автотрассы начинается и заканчивается первый самый длинный участок с непрерывным подъемом.

3) Дан целочисленные массив размера N. Определить максимальное количество его одинаковых элементов.


Буду очень благодарен за помощь!

Последний раз редактировалось FenixGuard; 28.04.2012 в 23:42.
FenixGuard вне форума Ответить с цитированием
Старый 29.04.2012, 15:50   #2
SlavaSSU
Пользователь
 
Регистрация: 15.04.2012
Сообщений: 46
По умолчанию

Код:
var
a:array[1..1000] of integer;
i,n:integer;
begin
writeln('vvedite kolichestvo elementov massiva');
readln(n);
writeln('vvedite massiv');
for i:=1 to n do read(a[i]);
for i:=1 to n-2 do
if (a[i]-a[i+1]=a[i+1]-a[i+2]) or (a[i+2]/a[i+1]=a[i+1]/a[i]) then begin
writeln('YES');
writeln('a[',i,']=',a[i],' a[',i+1,']=',a[i+1],' a[',i+2,']=',a[i+2]); exit; end;
writeln('NO');
readln;
end.
НИУ СГУ им. Чернышевского

Последний раз редактировалось SlavaSSU; 29.04.2012 в 16:14.
SlavaSSU вне форума Ответить с цитированием
Старый 29.04.2012, 16:03   #3
SlavaSSU
Пользователь
 
Регистрация: 15.04.2012
Сообщений: 46
По умолчанию задача 2: так как элементов в массиве всего сто, то можно просто перебором всех вариантов. надеюсь не набажил

Код:
var
a:array[1..100] of integer;
i,max,ans,kol:integer;
begin
writeln('vvedite visoti nad urovnem morya');
for i:=1 to 100 do read(a[i]);
max:=1; ans:=1;
kol:=1;
for i:=1 to 99 do begin 
if a[i+1]>a[i] then inc(kol) else 
begin if kol>max then begin max:=kol; ans:=i-max+1; end; kol:=1; end;
end;
writeln(ans);
readln;
end.
НИУ СГУ им. Чернышевского
SlavaSSU вне форума Ответить с цитированием
Старый 29.04.2012, 16:06   #4
SlavaSSU
Пользователь
 
Регистрация: 15.04.2012
Сообщений: 46
По умолчанию задача 2: надеюсь не набажил

Код:
var
a:array[1..100] of integer;
i,max,ans,kol:integer;
begin
writeln('vvedite visoti nad urovnem morya');
for i:=1 to 100 do read(a[i]);
max:=1; ans:=1;
kol:=1;
for i:=1 to 99 do begin 
if a[i+1]>a[i] then inc(kol) else 
begin if kol>max then begin max:=kol; ans:=i-max+1; end; kol:=1; end;
end;
writeln(ans);
readln;
end.
НИУ СГУ им. Чернышевского
SlavaSSU вне форума Ответить с цитированием
Старый 29.04.2012, 16:12   #5
SlavaSSU
Пользователь
 
Регистрация: 15.04.2012
Сообщений: 46
По умолчанию задача 3

Код:
var
a:array[1..1000] of integer;
i,n,kol,max,ans,j,t:integer;
begin
writeln('vvedite razmer massiva');
readln(n);
writeln('vvedite massiv');
for i:=1 to n do read(a[i]);
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]>a[j] then begin t:=a[i]; a[i]:=a[j]; a[j]:=t; end;
ans:=a[1]; kol:=1; max:=1;
for i:=1 to n-1 do begin
if a[i]=a[i+1] then inc(kol) else begin
if kol>max then begin max:=kol; ans:=a[i]; end; kol:=1;
end;
end;
writeln('max=',max);
writeln('znachenie samogo chastogo elementa=',ans);
readln;
end.
НИУ СГУ им. Чернышевского
SlavaSSU вне форума Ответить с цитированием
Старый 29.04.2012, 20:25   #6
FenixGuard
Новичок
Джуниор
 
Регистрация: 28.04.2012
Сообщений: 10
По умолчанию

Слава, благодарю Вас за помощь, но в паскале не силен, а код нужен на языке Си, в названии темы указано. Не могли бы вы переделать под Си? Просто паскаль я не знаю вообще.
FenixGuard вне форума Ответить с цитированием
Старый 29.04.2012, 21:07   #7
FenixGuard
Новичок
Джуниор
 
Регистрация: 28.04.2012
Сообщений: 10
По умолчанию

По поводу 3 задачи попробовал перевел на Си:

Код:
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
    int n=20,i,k,max,t,ans,j;
    int a[n];
    srand(6);
    for(i=0;i<n;i++)
     a[i]=rand()%10;
    printf("\n\nArray A\n\n");
     for(i=0;i<n;i++)
      printf("%8i",a[i]);

    for(i=0;i<n-1;i++)
     for(j=i+1;j<n;j++)
      if(a[i]>a[j])
      {
       t=a[i];
       a[i]=a[j];
       a[j]=t;
      }
    ans=a[0]; k=1; max=1;
    for(i=0;i<n-1;i++)
     if(a[i]==a[i+1])
         k++;
     else
     {
      k=1;
      if(k>max)
       {
           max=k;
           ans=a[i];
       }
     }
     printf("\nMax=%i",max);
     printf("\nChast elemtnts=%i",ans);

    return 0;
}
Но программа не работает, подскажите, что не так?
FenixGuard вне форума Ответить с цитированием
Старый 29.04.2012, 21:53   #8
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

FenixGuard

Вот вариант третьей задачи на C++ (на Си я не пишу)

Код:
#include <iostream>
#include <iterator>
#include <locale>

#include <algorithm>
#include <functional>

template <typename I, typename U>
void find_longest(I begin, I end, U u)
{
	typedef typename std::iterator_traits<I>::difference_type difference_type;

	I next, first = begin, found = end;
	difference_type max_seq = 0;

	for ( ; (next = std::adjacent_find(begin, end, u)) != end; begin = ++next)
	{
		const difference_type curr_length = std::distance(begin, next) + 1;
		if (curr_length > max_seq)
		{ max_seq = curr_length; found = begin; }
	}

	const difference_type last_length = std::distance(begin, next);
	if (last_length > max_seq)
	{ max_seq = last_length; found = begin; }

	typedef typename std::iterator_traits<I>::value_type T;
	typedef std::ostream_iterator<T> O;

	std::cout << "Исходная последовательность:" << std::endl;
	std::copy(first, end, O(std::cout, " "));
	std::cout << std::endl;

	std::cout << "Самая длинная последовательность:" << std::endl;
	std::copy(found, found + max_seq, O(std::cout, " "));
	std::cout << std::endl;
}

struct R
{
	static const int Min = -3;
	static const int Max = 3;

	int operator()() const
	{
		return rand() % (Max - Min + 1) + Min;
	}
};

int main()
{
	setlocale(LC_ALL, "");
	srand((unsigned) time(NULL));

	int arr[30];
	std::generate_n(arr, sizeof(arr) / sizeof(arr[0]), R());

	find_longest(arr, arr + sizeof(arr) / sizeof(arr[0]), std::not2(std::equal_to<int>()));
	
	return 0;
}
Проверка: http://codepad.org/WyaDDkuS

Ps. СлаваССУ ник ОМГ ((((((((((:
Rififi вне форума Ответить с цитированием
Старый 29.04.2012, 21:56   #9
FenixGuard
Новичок
Джуниор
 
Регистрация: 28.04.2012
Сообщений: 10
По умолчанию

Спасибо, но сами понимаете для меня это простой набор букв и цифр, я только начал изучать Си, до С++ долго еще
FenixGuard вне форума Ответить с цитированием
Старый 29.04.2012, 21:59   #10
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

FenixGuard

Да ничего страшного, вы-то здесь собственно и не причем.
Просто захотелось решить эту задачку ((((:
Rififi вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с массивами lindstorm Помощь студентам 0 05.12.2011 18:25
Работа с массивами L_Anya Помощь студентам 1 29.10.2011 19:57
Работа с массивами С++ LiskaAlik Помощь студентам 1 30.05.2011 17:48
Работа с массивами pashqa Помощь студентам 2 27.05.2011 15:23
Работа с массивами (С++) q3storm Помощь студентам 7 26.04.2011 09:46