Nata6enka Опубликовано 20 декабря, 2010 Жалоба Поделиться Опубликовано 20 декабря, 2010 Программа на Си++ (что-то элементарное типа Dev++) Задача: По некоторому объекту ведется стрельба n независимыми выстрелами. Объект состоит из k частей (элементов). Вероятность попадания в i-ый элемент равна p i-ое ( i=1,2,...k)/ Найти вероятность Р того, что в результате стрельбы будет m0(нулевое) промахов, m1 (первое) попаданий в 1 элемент и т.д., вообще m i-ое попаданий в i-ый элемент. ( i=1,2,...k), Сумма элементов m i-ое от i=0 до k равна n. Необходимо написать программу , но при этом функция генерации случайных чисел должна быть написана вручную. Что касается моих мыслей, то ... Если брать m-это количество выстрелов, n-количество экспериментов. Т.е. определенно нужен вложеный цикл for (int i=0;i<m;i++) for (int j=0;i<n;j++) Что касается определения вероятности для каждого элемента: r1=random(100)/100 // это будет вероятность попадания. НО функция должна быть написана ВРУЧНУЮ. Random у меня здесь как пример. if r1<p then a=a+1; // a-это массив, где хранится количество выстрелов в каждый элемент. На этом поток моих мыслей заканчивается. (( Очень прошу помочь. Судя по всему программа простая, но не догоняю) Ссылка на комментарий Поделиться на другие сайты Поделиться
Nata6enka Опубликовано 20 декабря, 2010 Жалоба Поделиться Опубликовано 20 декабря, 2010 Программа на Си++ (что-то элементарное типа Dev++) Задача: По некоторому объекту ведется стрельба n независимыми выстрелами. Объект состоит из k частей (элементов). Вероятность попадания в i-ый элемент равна p i-ое ( i=1,2,...k)/ Найти вероятность Р того, что в результате стрельбы будет m0(нулевое) промахов, m1 (первое) попаданий в 1 элемент и т.д., вообще m i-ое попаданий в i-ый элемент. ( i=1,2,...k), Сумма элементов m i-ое от i=0 до k равна n. Необходимо написать программу , но при этом функция генерации случайных чисел должна быть написана вручную. Что касается моих мыслей, то ... Если брать m-это количество выстрелов, n-количество экспериментов. Т.е. определенно нужен вложеный цикл for (int i=0;i<m;i++)for (int j=0;i<n;j++) Что касается определения вероятности для каждого элемента: r1=random(100)/100 // это будет вероятность попадания. НО функция должна быть написана ВРУЧНУЮ. Random у меня здесь как пример.if r1<p[i] then a[i]=a[i]+1; // a-это массив, где хранится количество выстрелов в каждый элемент. На этом поток моих мыслей заканчивается. (( Очень прошу помочь. Судя по всему программа простая, но не догоняю) Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 20 декабря, 2010 Жалоба Поделиться Опубликовано 20 декабря, 2010 Nata6enka: Надо посчитать, в какой части из множества серий выстрелов получился нужный ряд попаданий. А нужный ряд нам задается. Насколько я понял задание. Хотя в принципе эта вероятность и так считается. Но, видимо, надо смоделировать. Для простоты объяснения: начертили отрезок прямой, весь он - единица, вероятность попадания в каждый элемент равна соответствующей части отрезка. Так что отмечаем на нем по порядку части длиной в вероятности. Потом стреляем, то есть генерируем случайное число от нуля до единицы и проверяем, в каком оно отрезке - в этот элемент мы и попали. И так стреляем в каждой серии n раз. В отношении программирования - прибавляем вероятности p[k], пока пока не сравняемся или превзойдем наше случайное число, как только это произошло, значит, в этот элемент и попали. И так делаем n раз. Попадания накапливаем в массиве с номерами наших отрезков (частей мишени). После каждой серии, то есть когда набралось n выстрелов, проверяем, соответствуют ли накопленные в массиве количества попаданий заданному ряду. Если совпали, засчитываем удачу (прибавляем к переменной, в которой хранятся удачи, единицу), затем обновляем массив частей мишени и стреляем снова. Когда много раз постреляем (или когда накопится достаточно много, скажем, хоть с десяток) совпадений, делим число удач на количество серий выстрелов и вот она, наша вероятность. Генератор псевдослучайных чисел от 0 до 1 - есть разные варианты этих генераторов. Можн сделать, например. возведением предыдущего числа в квадрат и извлечением из этого числа его средних разрядов в качестве нового числа. Ну а для приведения в интервал 0..1 поделить на максимально возможное. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
yuliya#1 Опубликовано 20 декабря, 2010 Жалоба Поделиться Опубликовано 20 декабря, 2010 нужна помощь срочно. заранее спасибо огромное, людям, которые помогают!!!! 1) Вычислить значения функций f1(x) и f2(x) для значений аргументов. Функцию f2(x) вычислить для ряда точностей e=0.01, e=0.001, e=0.0001 . Для указанных точностей определить количество N элементов ряда, суммируемых для достижения заданной точности. рис. к этой задаче. 2) Для заданной целочисленной матрицы X[n x n] найти максимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали матрицы. Прикрепленные изображения * Прикрепленное изображение: итерация.jpg на turbo pascal Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 20 декабря, 2010 Жалоба Поделиться Опубликовано 20 декабря, 2010 yuliya#1: 1а) var f,x:real; i:integer; begin for i:= 1 to 20 do begin x:=i/20-0.65; f:=ln(1+x); writeln(x:5:2,f*f*f/6:14:8) end; readln end. 1б) var s1,s2,s3,p,x,e:real; i,k,n,m:integer;beginfor i:=1 to 20 do begin x:=i/20-0.65; e:=0.01/2; s1:=0; p:=-x*x/2; for k:=1 to 10000 do begin s2:=0; for n:=1 to k do begin s3:=0; for m:=1 to n do s3:=s3+1/m; s2:=s2+s3/(n+1) end; p:=-p*x/(k+2)*(k+1); s1:=s1+p*s2; if abs(p*s2)<e then begin write(' n=',i:2,', s=',s1:11:8); e:=e/10 end; if e<0.00005 then begin writeln; break end end end;readln end. Второе задание оставим на завтра. По ночам хорошие люди спят ;) 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 21 декабря, 2010 Жалоба Поделиться Опубликовано 21 декабря, 2010 (изменено) yuliya#1: 2) var x:array[1..10,1..10]of integer; i,j,m,n,s:integer;beginwriteln('n ? '); readln(n); for i:=1 to n do begin writeln('Введите элементы ',i,'-й строки, разделяя пробелами'); for j:=1 to n do read(x[i,j]); readln; end; m:=0; for i:=1 to n-1 do begin s:=0; for j:=1 to i do s:=s+abs(x[i-j+1,j]); if m<s then m:=s end;for i:=1 to n-1 do begin s:=0; for j:=1 to i do s:=s+abs(x[n-i+j,n-j+1]); if m<s then m:=s end;writeln(m); readlnend. Согласно условию, учитываем только параллельные побочной диагонали. Сама побочная - вне игры. Изменено 21 декабря, 2010 пользователем Тролль 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Nata6enka Опубликовано 21 декабря, 2010 Жалоба Поделиться Опубликовано 21 декабря, 2010 Тролль, а с точки зрения программной реализации это как будет выглядеть? А то у меня проблемы с программированием(( Язык си++. Заранее огромное спасибо, если поможете. Ссылка на комментарий Поделиться на другие сайты Поделиться
Lolka Опубликовано 21 декабря, 2010 Жалоба Поделиться Опубликовано 21 декабря, 2010 Здравстсвуйте , не могли бы вы составить мне блок схемы и вообще расписать, что и где какая команда делает... #include <iostream.h>#include <stdio.h>#include <stdlib.h>#include <conio.h>using namespace std;struct LIBRARY{ char nomer[30]; char FIO[30]; char nazvanie[40]; int Year; int kolvo;};struct STR{ LIBRARY *Library; STR *next;};STR * create(LIBRARY * Library) { STR *root=new STR; root->Library=Library; root->next=NULL; return root;}void add(LIBRARY *Library, STR* root) { while(root->next) root=root->next; root->next=new STR; root->next->Library=Library; root->next->next=NULL;}void printLIBRARY(LIBRARY *Library) { cout<<"Nomer => "<<Library->nomer<<endl; cout<<"FIO => "<<Library->FIO<<endl; cout<<"Nazvanie => "<<Library->nazvanie<<endl; cout<<"Year => "<<Library->Year<<endl; cout<<"Kolvo => "<<Library->kolvo<<endl; cout<<endl;}LIBRARY * makeLIBRARY() { cout<<"Enter book data:"<<endl; LIBRARY *Library=new LIBRARY; fflush(stdin); cout<<"Enter book nomer: => "; cin.getline(Library->nomer,30); cout<<"Enter Author's FIO: => "; cin.getline(Library->FIO,30); cout<<"Enter book name: => "; cin.getline(Library->nazvanie,40); cout<<"Enter made year: => "; cin>>Library->Year; cout<<"Enter count of books: => "; cin>>Library->kolvo; return Library;}int choice(){ int answer; getch(); system("cls"); cout<<"Main menu"<<endl; cout<<"1. Add new books to the list"<<endl; cout<<"2. Print LIBRARY at list"<<endl; cout<<"3. Search and delete"<<endl; cout<<"4. Clear all entries"<<endl; cout<<"5. Exit"<<endl; cout<<"Enter your choice: "; cin>>answer; fflush(stdin); if(answer>=1 && answer<=5) return answer; else return 0;}int main(){ STR *root=NULL; int ch; while(1) { ch=choice(); if(ch==1) { cout<<endl; if(root==NULL) root=create(makeLIBRARY()); else add(makeLIBRARY(),root); } else if(ch==2) { cout<<endl; int i=0; int N=0; STR *proot=root; while (root) { N++; root=root->next; } LIBRARY *buf; LIBRARY **pLibrary=new LIBRARY*[N]; root=proot; while (root) { pLibrary[i]=root->Library; root=root->next; i++; } root=proot; for (i=0;i<N;i++) printLIBRARY(pLibrary[i]); } else if(ch==3) { char qwe[30]; char qw[30], q[1]; cout<<"Enter nomer of book => "<<endl; cin.getline(qwe,30); while (root) { if (!strcmp(qwe,root->Library->nomer)) { { printLIBRARY(root->Library);cout<<"Do you want clear this entries? (y/n) "<<endl; cin.getline(q,1); if (!strcmp(q,"y")) { root->Library=NULL; } root=root->next; } } else if (strcmp(qwe,root->Library->nomer)) root=root->next; } cout<<endl; } else if(ch==5) { break; cout<<endl; } } return 0;} Ссылка на комментарий Поделиться на другие сайты Поделиться
yuliya#1 Опубликовано 21 декабря, 2010 Жалоба Поделиться Опубликовано 21 декабря, 2010 спасибо огромное!!!! вы просто сууупер!!!! Ссылка на комментарий Поделиться на другие сайты Поделиться
furer Опубликовано 21 декабря, 2010 Жалоба Поделиться Опубликовано 21 декабря, 2010 Добрый вечер, помогите пожалуйста в написании программы на языке Си,буду очень признателен. Вот задание: Составить программу, которая содержит текущую информацию о книгах в библиотеке. Сведения о книгах содержат: -номер УДК; -фамилию и инициалы автора; -название; -год издания; -количество экземпляров данной книги в библиотеке. Программа должна обеспечивать: -начальное формирование данных обо всех книгах в библиотеке в виде двоичного дерева; -добавление данных о книгах, вновь поступающих в библиотеку; -удаление данных о списываемых книгах; -по запросу выдаются сведения о наличии книг в библиотеке, упорядоченные по годам издания. Ссылка на комментарий Поделиться на другие сайты Поделиться
yuliya#1 Опубликовано 21 декабря, 2010 Жалоба Поделиться Опубликовано 21 декабря, 2010 еще раз спс огромное, но нужна помощь еще в одной задачке на pascal. Произвести анализ сортировок массивов . Для чего отсортировать по возрастанию массивы целочисленных элементов различной размерности: 10 элементов, 100 элементов, 2000 элементов. Анализ произвести по числу сравнений и перестановок двух элементов. Исследования производить над массивами трех типов: 1.Массив, содержащий неотсортированные элементы 2.Массив, содержащий отсортированные элементы 3.Массив, содержащий элементы, отсортированные в обратном порядке 4.Все данные свести в таблицу: Тип массива Сортировка №1 Сортировка №2 Сортировка №3 Число сравнений Число перестановок Число сравнений Число перестановок Число сравнений Число перестановок 10 эл. Неотсорт. 10 эл. отсорт. 10 эл. Обр. пор. 100 эл. Неотсорт. … … 2000 эл. Обр. пор. Сортировка пузырьком; Сортировка прямым выбором; Ссылка на комментарий Поделиться на другие сайты Поделиться
Fanat Опубликовано 21 декабря, 2010 Жалоба Поделиться Опубликовано 21 декабря, 2010 Ребят помогите программу сделать) В одномерном массиве,состоящем из n вещественных элементов,вычислить: 1)произведение положительных элементов массива 2)сумму элементов массива,расположенных до минимального элемента Упорядочить по возрастанию отдельно элементы,стоящие на четных местах,и элементы,стоящие на нечетных местах. Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 21 декабря, 2010 Жалоба Поделиться Опубликовано 21 декабря, 2010 Lolka: Здравстсвуйте , не могли бы вы составить мне блок схемы и вообще расписать, что и где какая команда делает... Ну, по первому пункту - нет более глупого занятия, по-моему, чем вписывать команды в прямоугольники и ромбики. Зачем это требуют - непонятно, эпоха блок-схем закончилась полвека назад. Но для особо бестолковых заказчиков есть программы, автоматически вычерчивающие блок-схемы по коду программы, например, AutoFlowchart. Что и какая команда делает - это тоже мартышкин труд. Писать надо целое сочинение, имена останутся именами, а комментарии все равно будут переведенными на русский названиями служебных слов и операций. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Fanat Опубликовано 22 декабря, 2010 Жалоба Поделиться Опубликовано 22 декабря, 2010 Ребят помогите программу сделать на Си++) В одномерном массиве,состоящем из n вещественных элементов,вычислить: 1)произведение положительных элементов массива 2)сумму элементов массива,расположенных до минимального элемента Упорядочить по возрастанию отдельно элементы,стоящие на четных местах,и элементы,стоящие на нечетных местах. Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 23 декабря, 2010 Жалоба Поделиться Опубликовано 23 декабря, 2010 Fanat: #include<iostream>using namespace std;int main(){float a[100],p,s,q; int i,j,m,n; cout<<"N ? "; cin>>n; cout<<"elements? "; for(i=0;i<n;i++)cin>>a[i]; p=1; for(i=0;i<n;i++)if(a[i]>0)p*=a[i];m=0; for(i=0;i<n;i++)if(a[i]<a[m])m=i; s=0; for(i=0;i<m;i++)s+=a[i];cout<<"p="<<p<<" s="<<s<<endl;for(j=2;j<n;j+=2)for(i=2;i<n;i+=2)if(a[i]<a[i-2]){q=a[i-2];a[i-2]=a[i];a[i]=q;}for(j=3;j<n;j+=2)for(i=3;i<n;i+=2)if(a[i]<a[i-2]){q=a[i-2];a[i-2]=a[i];a[i]=q;}for(i=0;i<n;i++)cout<<a[i]<<" "; cout<<endl; getchar(); getchar();} 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 23 декабря, 2010 Жалоба Поделиться Опубликовано 23 декабря, 2010 (изменено) Nata6enka: Ну просто надо переписывать потихоньку инструкцию с русского языка на С :) Там ничего сложного нет, только самые простые операторы. Вот по созданию собственной функции, вырабатывающей псевдослучайные числа - профессионально чаще всего используется так называемый линейный конгруэнтный метод, проще говоря, выработка следующего числа из предыдущего умножением и, возможно, сложением. Тут довольно сложная теория относительно выбора коэффициентов, чтобы числа не повторялись и были распределены как случайные, а также эти числа не выходили за представимый в компьютере диапазон чисел. Вот готовая функция с примером использования, написана по этому руководству. void Random(double &s){// algorithm of Lewis, Goodman, Miller and Parkconst long a=16807, m=2147483647, q=m/a, r=m%a; long t,seed;seed=long(s*m); t=seed%q*a-seed/q*r; if(t>0)seed=t; else seed=t+m; s=double(seed)/m;}#include<iostream>int main(){double s=0.5; for(int i=1;i<=20;i++){Random(s);std::cout<<s<<std::endl;}getchar();} Меняет при каждом обращении значение аргумента на новое псевдослучайное число, равномерно распределенное между 0 и 1. Перед первым использованием надо в основной программе дать аргументу начальное значение, тоже больше 0 и меньше 1. Изменено 23 декабря, 2010 пользователем Тролль 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Riki_Tiki_Tavi Опубликовано 23 декабря, 2010 Жалоба Поделиться Опубликовано 23 декабря, 2010 Помогите пожалуйста решить на языке Си с использованием структур. Создать массив, содержащий данные об учащихся: фамилия, класс, номер школы и дополнительно оценки за последнюю четверть (средний балл). Выяснить, сколько учеников имеют средний балл не ниже 4. Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 23 декабря, 2010 Жалоба Поделиться Опубликовано 23 декабря, 2010 Riki_Tiki_Tavi: #include <stdio.h>main(){struct sc{char Fam[20]; unsigned Cl,Nsc,Oz;}S[100];int i,j=0,k=0; char T[20];for(i=0;i<100;i++){ printf("\nFamilija? "); gets(S[i].Fam); if(strlen(S[i].Fam)==0)break; printf("Class, Nomer shkoli, Ozenka? "); scanf("%u%u%u",&S[i].Cl,&S[i].Nsc,&S[i].Oz); gets(T); k++;};for(i=0;i<k;i++)j+=S[i].Oz>=4; printf("\n%u pupils",j); getchar();} Ввод данных учеников заканчивается просто нажатием Enter вместо очередной фамилии. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Fanat Опубликовано 23 декабря, 2010 Жалоба Поделиться Опубликовано 23 декабря, 2010 Fanat: #include<iostream>using namespace std;int main(){float a[100],p,s,q; int i,j,m,n; cout<<"N ? "; cin>>n; cout<<"elements? "; for(i=0;i<n;i++)cin>>a[i]; p=1; for(i=0;i<n;i++)if(a[i]>0)p*=a[i];m=0; for(i=0;i<n;i++)if(a[i]<a[m])m=i; s=0; for(i=0;i<m;i++)s+=a[i];cout<<"p="<<p<<" s="<<s<<endl;for(j=2;j<n;j+=2)for(i=2;i<n;i+=2)if(a[i]<a[i-2]){q=a[i-2];a[i-2]=a[i];a[i]=q;}for(j=3;j<n;j+=2)for(i=3;i<n;i+=2)if(a[i]<a[i-2]){q=a[i-2];a[i-2]=a[i];a[i]=q;}for(i=0;i<n;i++)cout<<a[i]<<" "; cout<<endl; getchar(); getchar();} А ты можешь написать подробно что за p,s,q,m и тд...а то я вообще не понимаю)) Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 23 декабря, 2010 Жалоба Поделиться Опубликовано 23 декабря, 2010 А ты можешь написать подробно что за p,s,q,m и тд...а то я вообще не понимаю))не надо цитировать всю программу. Это имена переменных... Ссылка на комментарий Поделиться на другие сайты Поделиться
Fanat Опубликовано 23 декабря, 2010 Жалоба Поделиться Опубликовано 23 декабря, 2010 (изменено) не надо цитировать всю программу. Это имена переменных... просто препод может попросить расскать,не хочу неуд получить))) ! Предупреждение: Не надо повторять собственные сообщения, ОК? Изменено 23 декабря, 2010 пользователем Yezhishe Ссылка на комментарий Поделиться на другие сайты Поделиться
Riki_Tiki_Tavi Опубликовано 24 декабря, 2010 Жалоба Поделиться Опубликовано 24 декабря, 2010 Riki_Tiki_Tavi: #include <stdio.h>main(){struct sc{char Fam[20]; unsigned Cl,Nsc,Oz;}S[100];int i,j=0,k=0; char T[20];for(i=0;i<100;i++){ printf("\nFamilija? "); gets(S[i].Fam); if(strlen(S[i].Fam)==0)break; printf("Class, Nomer shkoli, Ozenka? "); scanf("%u%u%u",&S[i].Cl,&S[i].Nsc,&S[i].Oz); gets(T); k++;};for(i=0;i<k;i++)j+=S[i].Oz>=4; printf("\n%u pupils",j); getchar();} Ввод данных учеников заканчивается просто нажатием Enter вместо очередной фамилии. Ошибочка `strlen' undeclared (first use this function) Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 24 декабря, 2010 Жалоба Поделиться Опубликовано 24 декабря, 2010 Ошибочка `strlen' undeclared (first use this function) Да, забыл в начале программы написать #include<string.h> Вообще-то ты и сам бы мог добавить... А можно и не добавлять, заменив if(strlen(S.Fam)==0)break; на if(*S.Fam==0)break; Ссылка на комментарий Поделиться на другие сайты Поделиться
krukyu Опубликовано 24 декабря, 2010 Жалоба Поделиться Опубликовано 24 декабря, 2010 помогите пожалуйста!!! буду очень благодарна! язык pascal 1. Напечатать глухие согласные буквы, которые не входят только в одно слово. Вывести исходную последовательность слов. 2. Напечатать все слова, отличные от последнего слова, в которые входят те же гласные буквы, что и в первое слово. 3. Напечатать все слова, отличные от последнего слова, удаляя все согласные буквы, которые уже встречались раньше. спс заранее. Ссылка на комментарий Поделиться на другие сайты Поделиться
Fanat Опубликовано 24 декабря, 2010 Жалоба Поделиться Опубликовано 24 декабря, 2010 не надо цитировать всю программу. Это имена переменных... а можно еще попросить схему алгоритм решения) Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти