PDA

Просмотр полной версии : пожалуйста помогите с программами по С++



Keti
21.12.2004, 14:49
Пожалуйста,помогите мне решить задачки на C ++,нам задали 100 задачек,
надо решить за 7 дней,до 27-ого,времени вобрез.Эти задачи я не могу
решить:

1)Дано натуральное число N.Вычислить произведение N сомножителей:
1/2 * 7/8 * 13/14 * 19/20 * ...

2)Определить,встречается ли введенная цифра М среди первых трех
цифр дробной части заданного вещественного числа Р.

Среди N введенных чисел найти количество соседств положительных цифр.

3)Дана квадратная матрица размерности К<20.Найти сумму ее элементов,
находящихся на диагонали, "ортогональной" главной.

4)Дан вещественный массив A(N).Отсортировать его таким образом, чтобы
все положительные числа находились в начале,а отрицательные-в конце
массива и был сохранен исходный порядок следования элементов в обеих
группах.

Определить k-ю цифру последовательности 1234567891011121314...,в
которой выписаны подряд все натуральные числа.

6)Переформировать матрицу таким образом, чтобы ее столбцы распологались
по убыванию их поэлементных сумм.

Нати седловые точки матрицы (седловой точкой называется элемент,
являющийся минимальным в строке и максимальным в столбце).

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

7)Дан массив символьных строк. Если в командной строке не заданы аргументы,
распечатать все строки, а если задана опция -n- распечатать последние n строк.

Во введенном словеподсчитать количество различных пар букв. (Например,в слове
babacabacd 5 различных пар букв)

Зарание большое человеческое спасибо. :cry:

Kolinus
22.12.2004, 17:58
1)
double rez=1;
for(int i=0;i<n;i++)
{
rez*=(i*6+1)/(i*6+2);
}


2)
b- введенное число
m - введенная цифра
и то и другое читаешь как строку (символ)
int i;
for(i=0;i<strlen(b);i++)
{
if(b[i]=='.')
break;
}
int lim= (strlen(b)-i > 3) ? i+3 : strlen(b);
for(;i<lim;i++)
{
if(b[i]==m)
{
//prisutstvuet
}
}

4)
A - твой массив
n - его размерность
про 0 ничего не сказано - поэтому ниче не известно

double * pol,*otr;
int k=0,l=0;
pol= new double [n];
otr= new double [n];
for(int i=0;i<n;i++)
{
if(A[i]>0)
pol[k++]=A[i];
else if(A[i]<0)
pol[l++]=A[i];
}

for(int i=0;i<k;i++)
A[i]=pol[i];
for(int i=k;i<k+l;i++)
A[i]=otr[i-k];


PS вчера встречал НГ...

Keti
23.12.2004, 15:07
Kolinus, спасибо ты настоящий друг.Надо бы другме решать...

Lakomka
07.10.2005, 22:39
Мне тоже такую задачку решить надо, но почему-то этот код не срабатывает :cry: ругается на strlen, я его заменила на char, тогда прога стала ругаться на if(b[i]==m)



2)
b- введенное число
m - введенная цифра
и то и другое читаешь как строку (символ)
int i;
for(i=0;i<strlen(b);i++)
{
if(b[i]=='.')
break;
}
int lim= (strlen(b)-i > 3) ? i+3 : strlen(b);
for(;i<lim;i++)
{
if(b[i]==m)
{
//prisutstvuet
}
}

Kolinus
10.10.2005, 16:49
стрлен выисляет длину строки а чар - енто тип данных что на что ты поменяла я не понял посему помочь не могу
а если ругается на стрлен то скорее всего не указана библиотека

Lakomka
10.10.2005, 21:41
Вот полностью код... библиотеку подключаю, а все равно не работает :( может я в другом месте где-нить напортачила :roll:


#include <iostream>
using namespace std;
#include <stdio.h>
#include <windows.h>
#include <fstream.h>
#include <string.h>
#include <strstream.h>

void main ()
{

char str[128];
int m;
float b;
CharToOem("Введите значение b ",str);cout<<str;cin>>b;
CharToOem("Введите значение m ",str);cout<<str;cin>>m;

int i;
for(i=0;i<strlen(b);i++)
{
if(b[i]=='.')
break;
}
int lim= (strlen(b)-i > 3) ? i+3 : strlen(b);
for(;i<lim;i++)
{
if(b[i]==m)
{
cout << " m prisutstvuet " << m << endl;

} } }

Kolinus
11.10.2005, 13:20
конечно напортачила :)
внимательно читаем написанное
b- введенное число
m - введенная цифра
и то и другое читаешь как строку (символ)
ключевая строчка про строку :)
ты же читаешь как числа - то есть тебе надо дополнительно перегонять прочитанное число в строку, либо перобъяви b m

Lakomka
11.10.2005, 15:23
т.е. m и b объявить как char ? тогда == принимать компилятор не будет.. че-то я не понимаю :(
а с библиотеками у меня все нормально? а то strlen не признает тоже.

Kolinus
11.10.2005, 18:00
принимать будет.
какой средой \ версией компилятора пользуешься ?
char b[100], m;

Lakomka
11.10.2005, 21:29
у меня visual c++ 6.0

Kolinus
12.10.2005, 15:55
должно работать со стрленом. попробуй подключить еще stdlib.h

Lakomka
12.10.2005, 19:20
переставила с++ и заработало :wink: пасибо большое за помощь. вот еще бы как-то те две задачки побороть и счастье будет полным....

Kolinus
12.10.2005, 20:37
За счастье бороться надо ;)
Будет время - посмотрю не будет - не посмотрю
а какие именно две ?

Lakomka
13.10.2005, 11:44
Вот эти...

Задача 1. Дано натуральное число k. Определить k-ю цифру последовательности, где выписаны подряд степени числа 10

Задача 2 Дана квадратная матрица размерности K<20. Найти сумму ее элементов, находящихся на диагонали, "ортогональной" главной.

Kolinus
13.10.2005, 18:57
вторая - ортоганальная диагональ - енто диагональ которая начинается справа сверху и оканчивается слева снизу отсюда имеем
когда m - целевая матрица
int sum=0;
int j=k;
for(int i=0;i<k;i++){
sum+=m[i][j--];

Kolinus
13.10.2005, 18:59
сорри m[i][--j]
либо
int j=k-1;
for(int i=0;i<k;i++){
sum+=m[i][j];
j--;
}

Kolinus
13.10.2005, 19:30
последняя - ваапще красота
смысл такой - вычитаешь из введенного числа последовательно все натуральные числа
то есть 1 2 3 и тд как только остается число меньшее чем следующее вычитаемое число то выходишь из цикла и смотришь - если единица то будет 1 если другое число - то 0

Lakomka
17.10.2005, 10:13
бр-рррр первую про k-ю цифру последовательности так и не поняла :( а с матрицей спасибо, получилось :wink:

Kolinus
17.10.2005, 16:04
объясняю на примере
сверху послдеовательность снизу номер цифры
пусть тебе ввели 11
110100100010000100
123456789012345678
в цикле начинаешь
11-1=10-2=8-3=5-4=1<=5 => 1
пусть ввели 12
12-1=11-2=9-3=6-4=2<=5 => 0
там же так и написано ;)

Lakomka
18.10.2005, 10:45
ммм.. получилось :P
теперь заморочка вот на чем
Определить, является ли введенная строка правильной записью целого шестнадцатеричного числа без знака, прога запускается, но когда ввожу строку (например 5А3) результат выдает не тот что нужно, она на каждую совпадающую букву или цифру в строке пишет да да да


#include <iostream>
using namespace std;
#include <stdio.h>
#include <windows.h>
#include <string.h>

void main ()
{

char str[128];

CharToOem("Введите строку",str);cout<<str;cin>>str;

int i;
for(i=0;i<strlen(str);i++)
{
if (strspn(str, "0123456789abcdefABCDEF") == strlen (str))

{ cout << " yes " << endl;}

else {cout << " no " << endl;}
} }

Kolinus
18.10.2005, 13:56
и чему удивляться ????
что написано то и делает
ты i наращиваешь, но нигде его не применяешь - что тебе непонятно ?
и зачем тут вообще цикл ?

Lakomka
18.10.2005, 15:10
упс... пасибо, меня как котенка маленького мордочкой в каждую строчку тыкать надо, везде напортачу... :oops: