Народ, мож кто перечислить задачи + их суть! плиз...(можн оначиная с "суммы рядов")...
------------------------------------------------------
Сумма ряда:
------------------------------------------------------
надо найти S=1+x+x^2/2+x^3/6+....+x^n/n!
(если n->бесконечности, то S=e^x, ряд Тейлора, есть в учебнике Шишкина)
S(x,n=0)=1;
S(x,n=1)=S(0)+x/1!
........
S(x,n=2)+=S(x,n=(n-1))+x^n/n!
=>
заводишь две переменные P(0)=1,F(0)=1, P=x^k, F=k!, тогда
в теле цикла:
for(k=1;k<=n+1;k++)
{
.........
P*=x;
F*=k;
S+=P/F;
.........
}
выводишь S
перед этим надо ввести (x) и (n)
вычисления дожны быть в виде отдельной функции, которой ты передаешь x и n,
а возвращать она должна S
ВОЗМОЖНЫ И ДРУГИЕ РЕАЛИЗАЦИИ ПРОГРАММЫ!!!
------------------------------------------------------
Нахождение корней уравнения:
------------------------------------------------------
Цель программы соответсвует названию
->создаешь функцию f(x), корни которой нужно найти.
->создаешь функцию, которая находит корень методом деления отрезка пополам
для этого нужно передавать указатель на функцию f(x), начальную и конечную точку отрезка (double) и кол-во итераций.
{
проверяем значение на концах отрезка f(a) и f(

проверяем не являются ли концы отрезка корнями
если они разных знаков (f(a)>0 && f(

<0) || (f(a)<0) && f(

>0), то продолжаем
вычисляем значение от середины отрезка (a+

/2.0
смотрим на каком промежутке меняется знак [a,x] или [x,b], обозначаем x=b или x=a соответственно
и так далее повторяем действия....
после n-операций возвращаем значение x.
}
->создаешь функцию, которая находит решения методом касательных
для этого надо передавать опять указатель на функцию, значение начальной точки, точность вычисления delta_x - передается для вычисления производной, кол-во шагов
f`(x)=(f(x+delta_x)-f(x))/delta_x
находишь новую точку, как x=x+f(x)/f`(x)
все в цикле.....
потом возвращаешь x
Откуда взялся этот метод я не знаю!
СИГНАТУРЫ (функций) ПЕРВОГО И ВТОРОГО МЕТОДА ДОЛЖНЫ СОВПАДАТЬ!!!!
в main сначала ссылаешься на одну функцию, через указатель, а потом на другую...
------------------------------------------------------
Умножение матриц:
------------------------------------------------------
пусть дана матрица A (n*m) и вектор-столбец B (m*1)
Тогда:
Нужно ввести: Нужно вывести:
Код
a_11 a_12 ..... a_1m b_1 a_11*b_1+a_12*b_2+.....+a_1m*b_m
a_21 a_22 ..... a_2m b_2 a_12*b_2+.....................+a_2m*b_m
..................... * ..... = .........................
a_n1 a_n2 ..... a_nm b_m a_n1*b_1+....................+a_nm*b_m
1.объявляем динамический двумерный массив ( как на семинаре, но где нужно double, вместо int) размера n*m, вводим его элементы (scanf!!)
2 объявляем динамический одномерный массив размера m, вводим его элементы
3 перемножаем в цикле их элементы, как показано выше
4 выводим элементы получившегося вектор-столбца
5 не забываем освободить память!
ivandasch
8.11.2006, 18:28
Препод, значит, ни разу не делал руками вычислительные задачи. Потому что еще с времен фортрана это прописная истина. Любому программисту со стажем(особенно поработавшему на машинах 70-80-х годов) от такого плохо станет. А вообще-то сделать это несложно. Например так:
Код
int main(int* argc, char** argv)
{
double** matrix = new double*[N];
for(int i=0; i < N; i++)
{
matrix[i] = new double[M];
}
//.....//
for(int i = 0; i < N; i++)
{
delete[] matrix[i];
}
delete[] matrix;
return 0;
}
или (вспоминая С)
Код
#include <cstdlib>
using namespace std;
int main(int* argc, char** argv)
{
double** matrix = (double**)malloc(N*sizeof(double*));
for(int i=0; i < N; i++)
{
matrix[i] = (double*)malloc(M*sizeof(double));
}
//.....//
for(int i = 0; i < N; i++)
{
free(matrix[i]);
}
free(matrix);
return 0;
}
Joe Satriani
10.11.2006, 2:05
2 ivandasch: О,
Нашел и даже осилил довольно интересную
перебранку дискуссию на эту тему .)
давайте по теме,проги писать и скидывать,а то только все просят и ни кто не скидывает ничего
SkyWinder
9.12.2006, 1:41
а я вчера научился с фаилами работать! просто ради интереса! так здорово! матрица намного легче задается! Си намного хуже учиться чем дельфа.. ацццкий язык..
Цитата(Don @ 8.12.2006, 19:37)
давайте по теме,проги писать и скидывать,а то только все просят и ни кто не скидывает ничего
все в комп классе. открою тебе мааааленький секрет - заходишь под пользователем a604koro и копируешь ту прогу, которая тебе нужна)) . дома у меня даж сишника нет.))
AgReS2or
9.12.2006, 18:08
Петя, чиркини тут суть метода Ньютона, я дома попробую заботать
SkyWinder
9.12.2006, 21:17
2 AgReS2or:
берем монотонно возрастающюю ф-ию. определяем начальную точку, откуда будем находить 0 ф-ии.
находим в этой точке касательную. вида kx+b
k=(f(x+e)-f(x-e))/2h
b находишь из вормулы. потом смотришь в какой точке касательная пересекает 0.
теперь иксу присваиваешь новое полученное значение и повторяешь ту же операцию, пока f(x)>e
где е - какое-то маленькое число. т.е. точность, с которой мы хотим определить 0 ф-ии.
AgReS2or
9.12.2006, 21:55
спс
ivandasch
10.12.2006, 12:23
2 SkyWinder: Фигасе!!!! За три месяца только с файлами научиться работать...... Жесть!
AgReS2or
10.12.2006, 13:57
Что, мало?
Мда. Интересно, чему же вас вообще он учит, этот "МЕГАУМНЫЙ ВСЕ ПОНИМАЮЩИЙ препод (сокр. госу)".
IMHO, группа должна в среднем иметь возможность все-таки это самое "программирование" сдать.
Типичные ошибки "госу":
1) Поднимаем уровень - надо - научатся.
Не научатся. Будут бегать, просить: "напиши мне", и т.д.
2) Уровень держим более менее средний, а вот тех, кто делает свыше уровня - грузим по полной программе.
Я сюда, кажется, пришел заниматься все-таки фундаментальной наукой, а не считать всякую абстрактную херню. И занимать мое ЛИЧНОЕ время, чтобы потом сказать - да, вы нам подходите , не хотите ли поработать в нашем институте в жопе Москвы (с) (ах да, туда еще ездить надо, на семинары группы, на кластер тоже бы приехать надо, бумажку подписать и т.д.). Да, денег мы вам особо не заплатим, может года через три дадим на время ноут попользоваться и т.д.
3) "А вот Задков подписал бумагу в которой написано Win32 !!! Ниначем больше мы писать не будем!!! Пусть переписывают учебный план !!!"
Угу. Только вот сам он считает что можно хоть свой ноут принести, если на чем-то экзатическом писать.
Ради теста передал преподу сию генеральную линию партии - ответ - "вот пусть Задков зачет Вам и ставит тогда ! ". Ну Win32, так Win32. Напишем очередную стандартную библиотеку и под эту платформу...
Мое мнение, что программированию методами наших преподов научить нельзя.
P.S.: Сразу отвечаю сам себе - да, мое время не "ЛИЧНОЕ", в это время по расписанию у меня программирование и доп. времени все это у меня не требует. Но все-равно как-то оно мне не нравится. Практикум - когда сделал задачу, тогда и свободен. А в расписании все-таки написано "Практикум по ЭВМ", а не "Слежение за полетом мысли препода в течение всего семестра".
ivandasch
11.12.2006, 8:37
2 SkyWinder: То, что мы изучали, такая параша.... Пришлось все самому учить.....
P.S. А строки вроде этого?
Код
char s[100];
scanf("%s",s);
..... Мда, когда же вам про stl то говорить будут.... Я, конечно, понимаю, неметодично, но заставлять работать с С-строками - садизм.
AgReS2or
14.12.2006, 17:03
Илья, перенеси все лишние сообщения в отдельную тему
Цитата(ivandasch @ 10.12.2006, 12:23)

2 SkyWinder: Фигасе!!!! За три месяца только с файлами научиться работать...... Жесть!
Три месяца - это 12 занятий в компьютерном классе, или 24 часа практики. Не думаю, что за одни сутки можно очень легко освоить файлы

А кроме файлов и весь C. Кроме того, не надо забывать, что в школе у многих программирования не было

Способность усваивать новое тоже у всех разная. На последнем зачете 5 ! человек не смогли написать функцию, возводящую целое число в квадрат
AgReS2or
15.12.2006, 15:57
Ура, хоть кто то заянлял мою сторону
Санек,луше б Ире помог,чем выпендриваться.у нее проблемы с инфой.
AgReS2or
15.12.2006, 20:30
Да, Ире не помешает помощь, зато у нее Орлов по истории есть

, и мне помоги с инфой
чем?возьми книгу давай ссылку дам,говорят ничего
а у меня Шилдт
AgReS2or
15.12.2006, 22:28
Что то Ире ты книгу не советовал! Мне лучше усваивается, когда объясняют, ну если Сане не в лом будет
ivandasch
15.12.2006, 22:31
А че конкретно не понятно?
P.S.Зарегистрируйтесь на форумах _education.aspu.ru и _vingrad.ru. Там много книг. И купите, наконец, Шилдта, он стоит рулей 300-400, а потом пригодится еще не раз.
AgReS2or
15.12.2006, 22:45
ну когда дают прогу, не ясно как бы ее записать в си
ivandasch
15.12.2006, 22:52
Может все-таки RTFM? Не может быть, что все не понятно.
AgReS2or
15.12.2006, 22:53
что есть RTFM? Нет, что то простенькое могу написать, но не думаю, что на зачете простые проги будут!
Цитата(ivandasch @ 11.12.2006, 8:37)
P.S. А строки вроде этого?
Код
char s[100];
scanf("%s",s);
..... Мда, когда же вам про stl то говорить будут.... Я, конечно, понимаю, неметодично, но заставлять работать с С-строками - садизм.
Хм. Нашей группе и этого не преподали.... У нас вообще все на практикумах сидят как в тумане..
Спасибо хоть моему лицею, научили программировать.... Иначе тут бы я точно ничему не научился
AgReS2or
15.12.2006, 23:02
а ты из какой
Умножение матрицы на вектор-столбец:
Вариант через new/delete:
Код
#include <stdio.h>
#include <conio.h>
int main()
{
int i, j;
printf("Input i:");
scanf("%d",&i);
printf("Input j:");
scanf("%d",&j);
if(i<1 || j<1)
{
printf("Invalid input");
return 0;
}
double **a = new double*[i*j];
for(int b=0;b<i;b++)
{
a[b]= new double[j];
}
printf("Input Matrix-Element I*J... \n");
for(int d=0;d<j;d++)
for(int c=0;c<i;c++)
{
printf("Input a[%d,%d]:",c,d);
scanf("%lf",&a[c][d]);
}
double *v = new double[j];
printf("Input Vector-Element J*1... \n");
for(int c=0;c<j;c++)
{
printf("Input c[%d]:",c);
scanf("%lf",&v[c]);
}
double *o = new double[i];
printf("Ouput Vector I*1... \n");
for(int y=0;y<i;y++)
{
o[y]=0;
for(int t=0;t<j;t++)
o[y]+=a[y][t]*v[t];
}
for(int h=0;h<i;h++)
printf("Output o[%d]=%lf \n",h,o[h]);
for (int e = 0; e < i; e++)
delete[] a[e];
delete[]a;
delete[]v;
delete[]o;
getch();
return 0;
}
Переделал на скорую руку.
Здесь инициализация вынесена в отдельную функцию и все через malloc/free
Код
#include <stdio.h>
#include <conio.h>
#include <malloc.h>
double** Init_Matrix(int i,int j)
{
double **a = (double**)malloc(i*sizeof(double*));
for(int b=0;b<i;b++)
{
a[b]=(double*)malloc(j*sizeof(double));
}
return a;
}
void Input_Matrix(double** a, int i, int j)
{
printf("Input Matrix-Element I*J... \n");
for(int d=0;d<j;d++)
for(int c=0;c<i;c++)
{
printf("Input a[%d,%d]:",c,d);
scanf("%lf",&a[c][d]);
}
}
double* Init_Vector(int j)
{
return (double*)malloc(sizeof(double)*j);
}
void Input_Vector(double* v,int j)
{
printf("Input Vector-Element J*1... \n");
for(int c=0;c<j;c++)
{
printf("Input c[%d]:",c);
scanf("%lf",&v[c]);
}
}
void Multiplication(double** a,double* v,double* o,int i,int j)
{
for(int y=0;y<i;y++)
{
o[y]=0;
for(int t=0;t<j;t++)
o[y]+=a[y][t]*v[t];
}
}
void Output_Vector(double* o,int i)
{
printf("Ouput Vector I*1... \n");
for(int h=0;h<i;h++)
printf("Output o[%d]=%lf \n",h,o[h]);
}
int main()
{
int i, j;
printf("Input i:");
scanf("%d",&i);
printf("Input j:");
scanf("%d",&j);
if(i<1 || j<1)
{
printf("Invalid input");
return 0;
}
double** a=Init_Matrix(i,j);
Input_Matrix(a,i,j);
double* v=Init_Vector(j);
Input_Vector(v,j);
double* o=Init_Vector(i);
Multiplication(a,v,o,i,j);
Output_Vector(o,i);
for (int e = 0; e < i; e++)
free((void*)a[e]);
free((void*)a);
free((void*)v);
free((void*)o);
getch();
return 0;
}
AgReS2or
19.12.2006, 16:38
Спс
Чтение файла
Жду критически настроенных прогрммистов, которые осудят мою программу.
Надо бы еще проверки делать...
Код
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <malloc.h>
FILE* Open(char* file)
{
return fopen(file,"r");
}
int Size(FILE* a)
{
char c;
int i=1;
while(!feof(a))
{
fscanf(a,"%c",&c);
if(c=='\n')i++;
}
rewind(a);
return i;
}
double* Read(FILE* m, int i)
{
double* a=(double*)malloc(sizeof(double)*i);
double* p=a;
while(!feof(m))
{
fscanf(m,"%lf \n",p++);
}
return a;
}
void Bubble(double* a,int size)
{
double temp;
for(int i=0;i<size;i++)
for(int j=size-1;j>i;j--)
if(a[j]>a[j-1])
{
temp=a[j-1];
a[j-1]=a[j];
a[j]=temp;
}
}
int main()
{
FILE* stream;
char c;
stream = Open("s:\\changer\\io.i"); // "Ваш файл"
int i = Size(stream);
double* arr=Read(stream,i);
Bubble(arr,i);
for(int j=0;j<i;j++)
printf("%lf \n",arr[j]);
getch();
fclose(stream);
free((void*)arr);
}
AgReS2or
19.12.2006, 17:22
Это последнее, что нам дали?
да
молодец,сделай еще ченить со стоой простое
AgReS2or
19.12.2006, 18:18
это все что у него есть дома
у меня вопрос: как используя цикл for можно добиться чтобы на экран выводилось с итого по катый элемент массива(номера элементов вводим тоже с клавы) вот начало,а как продолжить?:
#include<iostream.h>
int main()
{
char arr[20];
cout<<"vvedite stroku 1:";
cin>>arr;
cout<<"\n";
cout<<"ento vascha 1 stroka:";
cout<<arr;
cout<<"\n";
int i,k;
cout<<"vvedite i :";
cin>>i;
cout<<"znach: "<<arr[i];
cout<<"\n";
cout<<"vvedite k :";
cin>>k;
cout<<"znach :"<<arr[k];
cout<<"\n";
for(а что тут писать?)
{
и тут что писать
}
return 0;
}
AgReS2or
22.12.2006, 21:08
ну не знаю я с твоими, но с принтф это примерно так
for (k=1; k<i-1; k=k+1) i кол-во элементов, к номер
printf (%d, &arr[k]);
Могу ошибаться, поправьте, если не так
А с итого соответственно не с 1 а с нужного номера
ivandasch
22.12.2006, 21:16
2 Don:
Код
for(j = element_i; j <= element_k; j++)
{
.....
cout<<arr[j]<<"\n";
}
AgReS2or
22.12.2006, 22:25
AgReS2or
22.12.2006, 22:53
блин, народ, не по теме сказано будет, но че то аватар не меняется, удаляю, ставлю новый с компа, а появляется старый
AgReS2or
22.12.2006, 23:23
Все, отбой, все ОК
SkyWinder
25.3.2007, 0:43
а-а-а)) народ, скиньте сюда 3-ю задачку плиз) я ООП нифига не понимаю)
AgReS2or
25.3.2007, 22:09
напомни условия, просто то, что третье у И.И., у меня второе и наоборот
Цитата(SkyWinder @ 25.3.2007, 1:43)

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

И не надо говорить, что программирование Вам не понадобится. Вам много еще чего из Вашего обучения не понадобится - воспринимайте это как тренировку головы.
DELIRIUM
25.3.2007, 22:18
2 Buzzard:
ну вообще говоря, ООП не всем нужно =) Я например не использую, хоть и программер =)
Воспринимать, как тренировку головы правильно =)
AgReS2or
25.3.2007, 22:18
Честно говоря, в том семестре было полегче, я во всяком случае понимал, что делаю, делал сам, а тут уже приходится все время спрашивать, в этот раз зачет страшнее, да еще и коллоквиум.
SkyWinder
25.3.2007, 23:12
2 Buzzard:
Ну спасибо тебе большое за бесценнейший совет!

Но я не такой безнадежный раздолбай, как это могло показаться)
на Дельфи я эти проги бы написал за один урок.. а тут мне нужно хотя бы одна программа, что бы с синтаксисом разобраться..
2 DELIRIUM:
ООП нужно для больших проектов только.. или если составляешь базу данных например.. там без него никак..
КЛАССНАЯ КНИГА ПО С++ а главное коротко и ясно))))
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.