Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Заказы "Сделайте все за меня"


Рекомендуемые сообщения

спасибо вам, Тролль! код разумеется работает))

тока понятно, но не понятно))каков принцип вычисленя точности здесь и в дальнейшем?! пока |(1+х)^2|>e => суммировать и таким образом "подгонять" под нужную точность?! :)

Ссылка на комментарий
Поделиться на другие сайты

Mike497:

Если очередной член ряда по абсолютной величине >e, то его надо прибавлять и считать следующий. Как только он оказался равен или меньше e, дальше можно не считать, хотя раз уж мы его вычислили, можно и прибавить (а можно и нет, сумма оставшегося ряда меньше его, значит, и e). Так проще, чем, как в твоей программе, прибавлять его, а потом в проверке в заголовке цикла находить разницу между тем, что было, и тем, что стало. Ясно и так, что эта разница - прибавленный член ряда.

Мы используем при этом теорему (признак сходимости знакопеременных рядов) Лейбница - сумма конечного знакопеременного ряда отличается от суммы бесконечного ряда менее чем на величину первого из отброшенных членов бесконечного ряда. То есть в данном случае надо вычислять до тех пор, пока очередной член ряда не окажется по модулю меньше или равен 10^-3. Проще всего считать каждый член ряда, домножая предыдущий на отношение соседних членов ряда (оно равно -(1+x)² *n/(n+1) ).

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Опять я. Доброго времени суток. Задание: помощью union вывести отдельно введенные младшее и старшее числа типа unsigned int в виде одного unsigned long. Использовать тот факт, что поля в union занимают один и тот же адрес.

Вот что то черканул. Ну хотел бы увидеть ваш, как я уверен, правильный вариант

#include <iostream.h>#include <conio.h>void main(){clrscr();union {unsigned x1,x2; unsigned long k;}p;cin>>p.x2>>p.x1;cout<<p.k;getch();}
Ссылка на комментарий
Поделиться на другие сайты

core:

Ну, в данном случае ты наложил друг на друга два стандартных беззнаковых целых (только не подумай, что друг за другом: друг на друга) и сверху на них длинное беззнаковое целое. Надо было в union вкладывать структуру. Второе: откуда ты знаешь длины твоих типов? Всё это не определено в C++ и зависит от конкретного компилятора, как и битовые поля вообще (кстати, то, что ты писал в прошлой программе, когда ты не обозначил специально поля как беззнаковые, могло и сработать в некоторых компиляторах - трактовка поля как знакового или беззнакового, если это не определено явно в программе, отдается на усмотрение разработчика компилятора). С одним компилятором int и short - синонимы, с другим это int и long, с третьим все три разной длины.

По идее, это может (и должен) учитывать программист, если программу предполагается использовать с разными компиляторами, с помощью функции sizeof(имя_типа). Но для конкретного компилятора можно раз и навсегда узнать размеры его типов (с помощью sizeof или описания компилятора) и исходить из этого. Например, для Dev-C++ длина int совпадает с длиной long (при этом длина short - 2 байта, длина long - 4, длина long long - 8, а длина double long - даже 12).

Так что в Dev-C++ работает, например, это

#include <iostream.h>#include <conio.h>main(){union {struct{unsigned short x1,x2;}; unsigned k;}p;cin>>p.x2>>p.x1; cout<<p.k<<endl;getch();}

При вводе 100 и 100 у меня результат будет 6553700 - поскольку это 100*65536+100. Таинственное 65536 - это 2^16. поскольку каждая единица левого числа при длине правого 16 битов означает 65536 объединенного числа. Но это у меня так, при длинах типов Dev-C++. А в твоем компиляторе надо узнать длины ЕГО целых разного вида и исходить из этого.

Я уже заметил когда-то, не понимаю, чего вас мучают с изучением личных качеств конкретного компилятора :) . C++ родился из битов и байтов и до сих пор лелеет к ним нежную привязанность (и поэтому очень эффективен), в отличие от, например, Pascal, который был построен так, чтобы машина приспосабливалась к языку человека, а не человек - к языку машины (и платит за это той же эффективностью).

Ссылка на комментарий
Поделиться на другие сайты

Для моего компилятора - int - 4, long - 8. Спасибо за помощь. И за краткую лекцию

только так:

#include <iostream.h>#include <conio.h>main(){union {struct{unsigned short x1,x2;}b; unsigned k;}p;cin>>p.b.x2>>p.b.x1; cout<<p.k<<endl;getch();}

ибо иначе х1 и х2 не евляются членами union :)

точнее не union а struct

Ссылка на комментарий
Поделиться на другие сайты

core: Да, по правилам так. Но у меня работает и так, как у меня. Я отметил, что пример - для Dev-C++. Опять же, допускает такое сокращение компилятор или нет - дело разработчика компилятора.

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Помогите пожалуйста.

Дана матрица размера 5х6. Составить программу для подсчета количества нечетных элементов в каждом столбце матрицы.

Ps>на Си

Ссылка на комментарий
Поделиться на другие сайты

core:

Кстати, необходимые при таком компиляторе обращения типа p.b.x1 выглядят громоздкими. Добавь в свою программу после объявления union строчку

unsigned short &x1=p.b.x1,&x2=p.b.x2; unsigned &k=p.k;

и сможешь обращаться к переменным проще:

cin>>x2>>x1; cout<<k<<endl;

Students:

#include <stdio.h>main(){int i,j,a[5][6],b[6]; printf("Enter the test matrix:\n");for(i=0;i<5;i++){for(j=0;j<6;j++)scanf("%i",&a[i][j]); printf("\n");}for(j=0;j<6;j++){b[j]=0; for(i=0;i<5;i++)if(a[i][j]%2)b[j]++;}for(j=0;j<6;j++)printf("b[%i]=%i\n",j+1,b[j]);getchar(); getchar();}
Ссылка на комментарий
Поделиться на другие сайты

задание выделить память на масив с елементами типов double. Найти максимальный елемент. Вот такое состряпал, но в результате какой-то адрес:

#include <stdlib.h>#include <stdio.h>#include <conio.h>double *vk;int n,k;void main() {clrscr();printf ("Vvedit kilkist elementiv masuvy:\n");scanf ("%d",&n);k=sizeof(double);if ((vk=(double *) malloc (k*(n-1)))==NULL){printf ("Out of memory!!!\n");exit(1); };double mass[20];vk=mass;int i=0;for (i=0;i<n;i++){printf ("Vvedit %d element masuvy:\n",i);scanf("%d",*(mass+i));};double *max; max=mass;for (i=1;i<n;i++){if (*(mass+i)>*max) max=(mass+i);};printf ("Naybilwuy element = %d   ",*max);getch();}

дико извиняюсь. Нашел ошыбку))

scanf("%d",*(mass+i));};

забыл что синтаксис оператора scanf это

scanf("%d",(mass+i));};
Ссылка на комментарий
Поделиться на другие сайты

все-таки неработает. Возвращает как максимальный - последний елемент. Да ... и в память неправильно пишет. Наверное направильно выделял?

#include <stdlib.h>#include <stdio.h>#include <conio.h>double *vk;int n,k;void main() {clrscr();printf ("Vvedit kilkist elementiv masuvy:\n");scanf ("%d",&n);k=sizeof(double);if ((vk=(double *) malloc (k*(n-1)))==NULL){printf ("Out of memory!!!\n");exit(1); };double mass[20];vk=mass;int i=0;for (i=0;i<n;i++){printf ("Vvedit %d element masuvy:\n",i);scanf("%d",(mass+i));};int max=0;printf ("%d",*(mass+max));for (i=1;i<n;i++){if (*(mass+i)>*(mass+max)){max=i;}};printf ("Naybilwuy element = %d   ",*(mass+max));free(mass);getch();}
Ссылка на комментарий
Поделиться на другие сайты

core:

Выделяешь память ты правильно, но по китайской поговорке "вырыл пруд и пустил туда крокодила". После выделения памяти ты тут же теряешь ее адрес, присваивая указателю адрес совсем ненужного статического массива mass, и в дальнейшем выделенную память, естественно, не используешь. Соответственно в конце работы программа пытается освободить память статического массива, а выделенный по malloc и потерянный кусок памяти остается висеть в воздухе.

#include <stdlib.h>#include <stdio.h>main() {int n,i,m; double *vk; printf ("Vvedit kilkist elementiv masuvy: "); scanf("%d",&n);if((vk=(double*)malloc(sizeof(double)*n))==NULL){printf("Out of memory!!!\n");exit(1);}for(i=0;i<n;i++){printf("Vvedit %d element masuvy: ",i+1); scanf("%lf",&vk[i]);}m=0; for(i=0;i<n;i++)if(vk[i]>vk[m])m=i; printf("\nNaybilwuy element = %f\n",vk[m]);free(vk); vk=NULL; getchar(); getchar();}

Можно было искать только значение максимального элемента, это немножко проще. Но на всякий случай я запоминаю индекс максимального элемента, а вывожу, как у тебя, только его значение.

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Хм. Задание. Дано масив елементов типа char. Если в масиве есть последовательности с 3 елементами и больше со значениями 0, тогда присвоить етим елементам значение елемента, что идет после последовальности с 3 нулей. (например, 6,7,0,0,0,0,2,3,0,0,0,6 - результат 6,7,2,2,2,2,2,3,6,6,6,6). Для подсчета количества елементов в последовальности использовать использовать разницу указателей на начало и конец последовальности.

Начал делать, но какой-то бред получился.

#include <iostream.h>#include <conio.h>char mas [40]; int i,j;void main(){clrscr();cout<<"Vvedit kilkist elementiv masuvy:\n";cin>>j;for (i=0;i<j;i++){cout<<"Vvedit "<<i<<"-uy element:\n";cin>>*(mas+i);};char k=0,s,*p1,*p2;for (i=0;i<j;i++){if (*(mas+i)==0){p1=mas+i;k=i+1;s=i;while (*(mas+k++)==0)p2=mas+k; };if (p2-p1>2){for (int l=s;l<k;l++)*(mas+l)=*(mas+k); }};for (i=0;i<j;i++)cout<<"\n"<<*(mas+i);cout<<p2-p1;getch();}
Ссылка на комментарий
Поделиться на другие сайты

А подскажите пожалуйста... Чувствую что сделаю неправильно. :bye1:

Не совсем понятное задание попалось, хотя очень простое: (язык Pascal)

"Описать массив записей, содержащий сведения о должностях, их количествах, разрядах и окладах для конкретной фирмы.

Вывести сведения о вакантных должностях. "

С выводом информации никаких проблем, все понятно.

А с записями (record) - не очень. Точнее как все это записать, структуру этих записей. И как должен выглядеть "массив записей"?.

Подскажите как это правильно написать. Как работают записи - знаю, но как описать то, что в задании - не совсем понимаю.

Вся информация забивается в программу при запуске, но вопрос не в этом, а в том, как правильно описать записи.

Ссылка на комментарий
Поделиться на другие сайты

Upgrader:

Выглядит это примерно так:

var a:array[1..100]of record job:string[20]; amount,payment,category:word end;

begin

Write('job? '); Readln(a[1].job); Write('amount? '); Readln(a[1].amount); Write('payment? '); Readln(a[1].payment); Write(category? '); Readln(a[1].category);

...

WriteLn(a[1].job, a[1].amount, a[1].payment, a[1].category); Readln

end.

Судя по вопросу, надо ввести в структуры еще поле количества вакантных должностей.

Ссылка на комментарий
Поделиться на другие сайты

core:

Вас всё мучают изучением древностей? :blink:

#include <stdio.h>main(){int n,a[100],*k,*j,i;printf("Vvedit kilkist elementiv masuvy: "); scanf("%d",&n);for(i=0;i<n;i++){printf("Vvedit %d-uy element: ",i+1); scanf("%d",&a[i]);}k=NULL; for(i=0;i<n;i++){if(*(a+i)==0&&k==NULL)k=a+i; else if(*(a+i)){if(a+i-k>=3&&k!=NULL)for(j=k;j<a+i;j++)*j=*(a+i);k=NULL;}}for(i=0;i<n;i++)printf("%d\n",*(a+i)); getchar(); getchar();}

P.S. не обратил внимания, что просили массив типа char, а я сделал его int. Замени в третьей строке слово int на char.

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

а мож и мне поможите! надо срочно сделать а я ненаю как!задание:

Счастливый билетик.Билет с шестизначным номером считается счастливым если сумма 3-х старших цифр совпадает с суммой трех младших цифр.Допустим, что в билетной кассе находиться 1 млн.билетов с померами от 000000 до 999999, надо определить количество счастлтвых билетов. :(:( :doh:

Ссылка на комментарий
Поделиться на другие сайты

Глупышка:

var i,i1,i2,i3,k:word; c:array[0..27]of word;begink:=0; for i:=0 to 27 do c[i]:=0;for i1:=0 to 9 do for i2:=0 to 9 do for i3:=0 to 9 do inc(c[i1+i2+i3]); for i:=0 to 27 do k:=k+sqr(c[i]);writeln(k); readlnend.
Ссылка на комментарий
Поделиться на другие сайты

Вообщем дано такое условие задачи на Паскаль:

Дано целое число N (> 0). Сформировать и вывести целочисленный массив размера N, содержащий N первых положительных нечетных чисел: 1, 2, 3,… .

program _;

const n=100;

type mas=array[1..n]of integer;

var a:mas; i,v,k:integer;

begin

writeln('kol-vo elementov massiva,k=');

readln(k);

v:=1;

for i:=1 to k do begin

a:=v;

v:=v+2;end; writeln;

for i:=1 to k do

writeln (a);

end.

Скажите пожалуйста, что я делаю не так?!

Ссылка на комментарий
Поделиться на другие сайты

Mike497:

Ну, для начала надо посмотреть, что такое нечетные числа. Я бы не стал причислять к ним число 2 :) . А программа у тебя правильная и все делает так, как надо. Не понимаю, чем она тебе не нравится.

Единственное, что можно заметить, что то же самое можно было сделать проще.

var a:array[1..100]of integer; i,k:integer;beginwrite('kol-vo elementov massiva: '); readln(k);for i:=1 to k do a[i]:=2*i-1;for i:=1 to k do write (a[i]:5); readlnend.
Ссылка на комментарий
Поделиться на другие сайты

Привет)эт я снова,помогите плиз,к зачету надо

Дано натуральное число N.Вычислить произведение первых N сомножителей:р=(2/3)*(4/5)*(6/7)*...*(2N/(2N+1))

На Паскале с циклом for,где в скобках там дроби,незнала прост как написать)))

Ссылка на комментарий
Поделиться на другие сайты

Помогите переделать программу используя указатели на массивы

#include <stdio.h>

#define N 10

#include <conio.h>

main()

{

int i,j,a[N][N],b[N],n,m;

printf("Введите размер матрицы\n");

scanf("%d%d",&n,&m);

printf("Введите матрицу из%5d элементов\n",n*m);

for(i=0;i<n;i++)

for(j=0;j<m;j++)

{

printf("a[%d][%d]=",i+1,j+1);

scanf("%5d",&a[j]);

}

printf("Исходная матрица\n");

for(i=0;i<n;i++)

{

for(j=0;j<m;j++)

printf("%5d",a[j]);

printf("\n");

}

for(i=0;i<n;i++)

{

b=0;

for(j=0;j<m;j++)

if(!(a[j]%2))b++;

}

for(i=0;i<n;i++)

printf("b[%d]=%d\n",i+1,b);

getch();

}

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу



×
×
  • Создать...