Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » нужны задания практические по С

Ответить
Настройки темы
нужны задания практические по С

Аватара для bool

Старожил


Сообщения: 229
Благодарности: 9

Профиль | Отправить PM | Цитировать


Изменения
Автор: bool
Дата: 28-05-2007
вспоминаю и изучаю дальше - С, самостоятельно. Дайте какие нибудь задания пожалуйста, а лучше несколько по возрастающей (по сложности) . Или посоветуйте где можно эти задания найти 8) Уровень начинающего.

Отправлено: 18:05, 17-11-2006

 

редкий гость


Сообщения: 1696
Благодарности: 44

Профиль | Сайт | Отправить PM | Цитировать


bool
Цитата:
а как потом объявлять сам массив? так ведь нельзя: int a[size] , потому что переменная size ещё не определена. Подскажите пожалуйста.
В C99 так можно.

В дополнение к ответу pva - если массив состоит из данных POD-типа, имеет небольшой размер и его время жизни привязано к области видимости функции (т.к. по выходу из функции он должен быть убит), то можно воспользоваться функцией alloca. Так сказать, pure-C way.

-------
http://ivank.ru


Отправлено: 00:23, 27-02-2007 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для bool

Старожил


Сообщения: 229
Благодарности: 9

Профиль | Отправить PM | Цитировать


а турбо С поддерживает С99? у меня почему то ошибку в синтаксисе показывает, может удобнее учиться на чем нибудь другом? что посоветуете? борланд 6 ?

Отправлено: 10:48, 28-02-2007 | #12

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


если уж билдер 6, то это достаточно продвинутый компилятор, чтобы использовать шаблоны с++. Есть например такой: vector<typename T>
Код: Выделить весь код
#include <vector>
#include <fstream>
using namespace std;

void myFunc()
{
   vector<double> fdoubles(100, 0.);
   // создан объект std::vector<double>,
   // представляющий собой обычный массив из 100 элементов
   // и инициализирован значением 0.0
   // объект будет уничтожен автоматически при выходе из блока
   // для работы с памятью используется класс std::allocator<double>.
   // тот, который по умолчанию использует операторы new и delete[],
   // но можно их переопределить (но лучше не трогать, если нет острой необходимости)

   // работаем как с обычным массивом:
   fdoubles[0] = 3.14;     
   fdoubles[1] = 123.23;

   // если нужна проверка границ:
   fdoubles.at(0) = 3.14;     
   fdoubles.at(101) = 123.23; // здесь вылетит с исключением std::out_of_range

   // меняем размер, если надо, память перераспределяется автоматически
   // но так, что если просишь меньше, то не освобождается, а просто берётся меньше
   // из уже выделенного куска. Например:
   fdoubles.resize(50);   // используется кусок из 100*sizeof(double)
   fdoubles.resize(200); // используется кусок из 200*sizeof(double) 
}

vector<double> readData()
{
   // работа с памятью оптимизирована для добавления небольших объектов.
   // то есть это идеальный класс для использования в качестве буфера чтения (небольших объектов)
   // и использования индексации.

   ifstream input("my_data.txt");
   double buf;
   vector<double> result;
   while(input>>buf) result.push_back(buf);

   return result;
}

// TList в делфи - это аналог vector<void*>
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:26, 28-02-2007 | #13


Аватара для bool

Старожил


Сообщения: 229
Благодарности: 9

Профиль | Отправить PM | Цитировать


pva

спасибо, но я попытаюсь освоить сначала всю функциональность С без С++.


Пишу программку определения определителя матрицы и у меня такой вопрос возник: правильно ли будет объявлять в цикле главной функции массив? Ведь при каждой итерации цикла будет создаваться новый массив, или он будет заменяться старым?
допустим вот такая ситуация:

pm=--pm; /* pm изначально определена, например pm=5 */

for(бла бла бла) {
бла бла бла
int f[pm][pm]; /* вот здесь */
бла бла
}

или лучше в цикл включить функцию объявленную заранее в которой будет этот массив объявляться и по её завершению удаляться, а потом при след. итеррации создаваться вновь?

Отправлено: 16:38, 04-03-2007 | #14


Аватара для bool

Старожил


Сообщения: 229
Благодарности: 9

Профиль | Отправить PM | Цитировать


что то я затормозился на этом определителе. использую рекурсивную функцию для определения.

Код: Выделить весь код
finder(int *a)
{  register int k;
   int answer;
   if(a[k][k])
   if(k==2) answer = a[k-1][k-1]* a[k][k]-a[k-1][k] * a[k][k-1];
   answer = (-1)^(k+1) * a[1][k] * finder(a[k-1][k-1]);
   return(answer);
}
в функцию передается указатель на массив, но как передать переменную - порядок матрицы? т.е. то чем в функции подменяется переменная к? в моем случае получается, что я её использую до определения

все остальное:
Код: Выделить весь код
 
#include <stdio.h>
#define n 5

finder(int *a);
void main(void)
{
   int b[n][n];
   int pm = 5;
   int opr=0;
   int opr1=0;
   int s;

   for(s=1;s<n;s++){
      pm = pm--;
      int p[pm][pm]; /*здесь опять ошибка синтаксиса С89 */
      opr=(-1)^(s+1) * b[1][s] * finder(p);
      opr1=opr1+opr;
      }
}
подскажите пжлст

Последний раз редактировалось bool, 04-03-2007 в 20:44.


Отправлено: 20:38, 04-03-2007 | #15

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


если действовать рекурсивно, то надо каждый раз делать копии подматриц (потому что по сути при выбрасывании столбца и строки метрица меняется). Но можно выбрасывать только индексы.
Код: Выделить весь код
// приучайте мышление к универсальным алгоритмам - шаг к С++
typedef int value_type;
typedef unsigned size_type;

value_type internal_det(value_type const** rows, size_type* cols, size_type size)
{
  value_type result;

  // rows - это указатели на строчки (с пропусками)
  // cols - индексы столбцов (тоже с пропусками)
   // чтобы взять элемент i, j такой матрицы, нужно:
   // elem = rows[i][cols[j]];

 if (2<size)
 {
   size_type size_less = size-1;
   value_type** rows_less = new value_type*[size_less];
   size_type* cols_less = new size_type[size_less];

   // собираем матрицу  с выброшенным первым столбцом (и строчкой):
   for(size_type i=1; i<size; ++i) rows_less[i-1] = rows[i];
   for(size_type j=1; j<size; ++j) cols_less[j-1] = cols[j];

   // собираем поочереди:
   for(size_type i=0; i<size_less; ++i, rows_less[i]=rows[i]) {
     for(size_type j=0; j<size_less; ++j, cols_less[i]=cols[i]) {
         // я точно не помню формулу, но суть в следующем:
         // получаем определитель матрицы с выброшенным элементом
         value_type det1 = internal_det(rows_less, cols_less, size_less);
         ...
     }
  }
   
   delete [] cols_less;
   delete [] rows_less;
 }
 else
 {
    // матрица 2x2
    result = rows[0][cols[0]] + rows[1][cols[1]] - rows[0][cols[1]] - rows[1][cols[0]];
 }

  return result;
}

value_type det(value_type* matrix, size_type n)
{
   value_type** rows = new value_type*[n];
   size_type* cols = new size_type[n];

  for(size_type i=0; i<n; ++i) rows[i] = matrix + n*i;
  for(size_type i=0; i<n; ++i) cols[i] = i;

  return internal_det(rows, cols, n);
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:49, 04-03-2007 | #16


Новый участник


Сообщения: 34
Благодарности: 0

Профиль | Отправить PM | Цитировать


Нужны задания?
Напиши марио, змейку, в общем какую-нибудь простенькую игру.

Отправлено: 10:56, 05-03-2007 | #17


Аватара для bool

Старожил


Сообщения: 229
Благодарности: 9

Профиль | Отправить PM | Цитировать


pva

огромное thx 8) сейчас переварю это (с новыми типами) допишу с формулой и перейду к структурам



ferrum2688

на С? я до такого уровня ещё не дошел, чтобы игры на нем писать, я даже не представляю как графический интерфейс на С стряпать ))

Отправлено: 11:26, 05-03-2007 | #18


Новый участник


Сообщения: 34
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата:
на С? я до такого уровня ещё не дошел, чтобы игры на нем писать, я даже не представляю как графический интерфейс на С стряпать ))
На C,C++ можно просто использовать текстовый режим, члены змейки можно сделать например "*". Конечно в графическом лучше, потому что символы имеют разную высоту и ширину.
В принципе достаточно только gotoxy(int x,int y) и cprintf("*"); , для очистки cprintf(" "), думаю этого достаточно для графики, есть конечно ещё и др. функции(clrscr();-очистка всего экрана), но написать можно и без них. Для того чтоб понять программирование можно писать с ограниченным числом функций, нужно подумать возможно ли на основании твоих знаний решить данную задачу, а большинство придуманных функций для ускорения процесса создания и можно обойтись без них. Например возведение в степень(целую), извлечение корней(целых) можно сделать из:+,-,*,for,if.

Последний раз редактировалось ferrum2688, 07-03-2007 в 11:07.


Отправлено: 15:32, 06-03-2007 | #19


Аватара для bool

Старожил


Сообщения: 229
Благодарности: 9

Профиль | Отправить PM | Цитировать


Цитата:
// приучайте мышление к универсальным алгоритмам - шаг к С++
typedef int value_type;
typedef unsigned size_type;
я уже понял почему на чистом Си писать неудобно) тот же typedef помоему взят уже из С++, по крайней мере его использовать, помоему , можно только в Вин компиляторах(вычитал у Г.Шилдта и мой турбо Си отказывается запускать и ругается на синтаксис при его применении) , но все же хочу опробывать все функции которые Шилдт описывает в своем издании, и потом уже начинать освоение С++ (там так и указано в самом начале справочника по С++ "перед началом изучения С++ вы должны знать основы С" ).

Отправлено: 16:22, 15-03-2007 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » нужны задания практические по С

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Ошибка - Двойные задания печати. rezzyurfak Microsoft Windows 2000/XP 0 28-09-2009 14:53
Fujifilm FinePix F100fd Практические советы и рекомендации! UADE Цифровое изображение 9 07-09-2009 10:39
Новые задания Veter23 Лечение систем от вредоносных программ 8 17-07-2009 21:30
Прочее - Беспроводной интернет. Практические вопросы. Murder7 Сетевое оборудование 4 07-11-2008 08:36
Назаначенные задания - Безопасность Chuk Microsoft Windows 2000/XP 3 19-10-2005 14:13




 
Переход