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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2013, 22:19   #1
abstractionhawk
Пользователь
 
Регистрация: 01.11.2012
Сообщений: 26
По умолчанию Программа на СИ с массивами

Здравствуйте! Следующую задачку задали.
Пусть x[i],y[i] (i=1,2,...) определены как
x[i]=((y[i-1]-y[i-2])/i)
y[i]=((x[i-1]*x[i-1]+x[i-2]+y[i-1])/i)
Получить x[1],...,x[n]; y[1],...,y[n];
Код:
#include <stdio.h>
#include <stdlib.h>


void main()
{ int p;
  printf("Vvedite dlinu massiva X i dlinu massiva Y \n"); scanf("%i",&p);

    int i;
    int x[p],y[p];
    x[0]=1;y[0]=1;
    x[1]=2;y[1]=2;


    for(i=2;i<p;i++)
     x[i]=((y[i-1]-y[i-2])/i);
     y[i]=((x[i-1]*x[i-1]+x[i-2]+y[i-1])/i);

    printf("Massiv X:\n");
for(i=0;i<p;i++)
     printf("%i ",x[i]);

    printf("\n Massiv Y:\n");
for(i=0;i<p;i++)
     printf("%i ",y[i]);

getch();
}
Вот что я пока что своими силами сделал. Но результат не очень похож на правду. Посмотрите пожалуйста код кто может, правельно ли все сделано? Заранее благодарю (Сильно не кидайте камнями в меня, СИ никогда не учил, за что сейчас расплачиваюсь)
abstractionhawk вне форума Ответить с цитированием
Старый 06.02.2013, 22:52   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Компилятор должен был капитально выругаться.
Всё почти правильно, но
1) Тело цикла состоит из одной инструкции либо блока, ограниченного {}:
Код:
    for(i=2;i<p;i++) {
     x[i]=((y[i-1]-y[i-2])/i);
     y[i]=((x[i-1]*x[i-1]+x[i-2]+y[i-1])/i);
    }
2) Неясно, должны члены последовательности быть целыми числами или вещественными. Если второе, то надо поменять типы x и y, а также спецификатор вывода printf(). Пока будем считать, что всё правильно.

3) (главное) Недопустимо объявлять переменные, которые занимают "неизвестно сколько места":
Код:
   int x[p],y[p]; //Эй, сколько места занимает x? А y?
Есть два способа. Первый - задать размер "с избытком": если известно, что n<1000, то
Код:
   int x[1000],y[1000];
решает проблему.
Второй, более правильный - использовать динамический массив:
Код:
int *x; //Указатель на массив int-ов
x = malloc(p*sizeof(int)); //Выделяем место, когда p уже известно
int *y;
y = malloc(p*sizeof(int)); //То же для y
Abstraction вне форума Ответить с цитированием
Старый 06.02.2013, 22:59   #3
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

(i = 1, 2.....) - это вероятно указание, что цикл начинается с 1 и т.д.
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 06.02.2013, 23:01   #4
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Код:
int *x; //Указатель на массив int-ов
x = (int*)malloc(p*sizeof(int)); //Выделяем место, когда p уже известно
int *y;
y = (int*)malloc(p*sizeof(int)); //То же для y
Лично мне такой вариант нравится!
Кстати компилятор на стену полез!!!!!!!!!!
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!

Последний раз редактировалось Bugrimov; 06.02.2013 в 23:04.
Bugrimov вне форума Ответить с цитированием
Старый 06.02.2013, 23:13   #5
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Какие ошибки?
Базиля вне форума Ответить с цитированием
Старый 06.02.2013, 23:14   #6
abstractionhawk
Пользователь
 
Регистрация: 01.11.2012
Сообщений: 26
По умолчанию

У меня CodeBlocs нормально запускает программу
abstractionhawk вне форума Ответить с цитированием
Старый 07.02.2013, 02:27   #7
abstractionhawk
Пользователь
 
Регистрация: 01.11.2012
Сообщений: 26
По умолчанию

Дело в том, что когда я запускаю так программа как я ее изначально написал, то она выдает очень большие числа, то положительные, то отрицательные....
Вопрос, если забыть про кривое оформление, сам алгоритм верный?
abstractionhawk вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа с одномерными массивами. Ольга198812 Помощь студентам 10 21.03.2012 21:48
Программа связаная с массивами anderbeli Помощь студентам 1 18.12.2011 15:36
некорректно работает программа с массивами altair555222 Помощь студентам 4 30.11.2010 13:50
программа на паскале с одномерными массивами Loga Помощь студентам 27 14.01.2010 11:12
Программа по работе с массивами Kamikadze_666 Общие вопросы C/C++ 2 16.12.2008 18:29