Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C] Явл.ли элементы массива выборкой из геом. ряда


Автор: GreyMad 6.1.2007, 15:23
Задача: 

Заданы размер массива и действительные значения его элементов.
Определить, могут ли являться данные значения упорядоченной выборкой из геометрического ряда (как я понял имеется ввиду геометрическая прогрессия?), и, если да, дополнить массив недостающими значениями. 
В выборке могут быть пропущены последовательности не более чем из 4 членов ряда.
Максимальный размер исходного массива - 10 элементов.

Нужно решить на С (не ++).

Спасибо заранее smile 

Автор: Sartorius 6.1.2007, 15:29
 Строишь массив из n-1 элементов, причем res[i] = ish[i+1]/ish[i]; для того что бы выполнялось условие зачади n-2 элементов должны быть одинаковыми, причем "лишний элемент" должен быть квадратом. кубом или четвертой степенью остальных.

Автор: GreyMad 6.1.2007, 17:59
мне желательно код, сам я ниасилю smile 

Автор: GreyMad 8.1.2007, 14:59
Цитата(GreyMad @ 6.1.2007,  15:23)
В выборке могут быть пропущены последовательности не более чем из 4 членов ряда. 

Вот этот момент мне особенно не ясен. Это если после элемента 4 следующих не являются прогрессией, то пропускать этот элемент? А если являются, то заполнить массив до конца прогрессией?

Автор: GreyMad 10.1.2007, 17:45
Вот что я сам сделал, но она работате как-то через раз. С некоторыми числами работает, с некоторыми нет. Посмотрите, пожалуйста, что тут не так и исправьте если не трудно smile 

Код

#include <stdio.h>
#include <conio.h>
#include <math.h>
#define ELEM 10
int main(void)
{
    int mas[ELEM];
    int k, e, i, j, kolvo;
    clrscr();
    e=1;
    printf("Vvedite kol-vo elementov (4...10)  : ");
    scanf("%d", &kolvo);
    if (kolvo>ELEM)
      kolvo=ELEM;
    if (kolvo<4)
      {printf ("Ne menshe 4 elementa");
      return 0;}
    for(k = 0; k < kolvo; k++)
      {
      printf("Vvedite element\n");
      scanf("%d",&mas[k]);
      }
    k=0;
    puts("");
    while (k<kolvo)
    {
      printf("%d ",mas[k]);
      k++;
    }

    for (i=1; i<kolvo+1; i++)
    {
      if (mas[i]==sqrt(mas[i-1]*mas[i+1]) )
    e++;
    }
    if (e>3)
      {
      for (j=1; j<kolvo; j++)
    mas[j+e]=mas[j+e-1]*2;
      printf ("\nProgressia\n");
      }
    else printf("\nNe progressia");

    j=0;
    puts("");
    while (j<kolvo)
    {
     printf("%d ",mas[j]);
     j++;
    }
    printf("\n\nPress any key to quit...\n");
    getch();
    return 0;
}



M
Alexeis
Модератор: выбирайте тип подсветки http://forum.vingrad.ru/index.php?showtopic=126445

Автор: GreyMad 17.1.2007, 18:45
уже сам сделал.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)