Я начинающий, подскажите как...(Все вопросы начинающих - постить только здесь!!!)
Чтение из файла и разбиение на целую и дробную части можно организовать так:
[SIZE="1"](подразумевается, что формат входного файла следующий: )[/SIZE]
[quote=in.txt]
123124451451451.134514715612
5223452342345235.423424123123
2342342341133.243422342342
[/quote]
Вариант:
#include <fstream>
#include <iostream>
using namespace std;
int main()
{
ifstream in( "in.txt" );
if (!in.is_open())
return -1;
while (!in.eof())
{
string bignum;
in >> bignum;
string::size_type indexDot = bignum.find( '.' );
if ( string::npos == indexDot )
continue;
string mainpart = bignum.substr( 0, indexDot++ );
string mantissa = bignum.substr( indexDot );
cout << mainpart << '.' << mantissa << endl;
// тут преобразовывай и выкидывай в какой-нить контейнер
}
in.close();
// тут сохраняй из контейнера
return 0;
}
но мне надо было считывать именно в массив
тоесть что-то похожее на то что написал я...
и классы тоже должны хоть как-нибудь использоваться
хоть как-нибудь я их и использовал =)))
ещё только учусь, начинаю точнее даже учиться..
ещё неочень ясен рядок в твоём коде там где continue - разве он обязателен??
но мне надо было считывать именно в массив
тоесть что-то похожее на то что написал я...
и классы тоже должны хоть как-нибудь использоваться
хоть как-нибудь я их и использовал =)))
Классы можешь кие-нить ввести для преобразованных чисел.
ещё только учусь, начинаю точнее даже учиться..
Это хорошо. :)
А вместо массива используй контейнер:
#include <vector>
#include <fstream>
#include <iostream>
using namespace std;
int main()
{
ifstream in( "in.txt" );
if (!in.is_open())
return -1;
typedef vector< pair<string, string> > BinArray;
BinArray myArray;
while (!in.eof())
{
string n;
in >> n;
string::size_type indexDot = n.find( '.' );
if ( string::npos == indexDot )
continue;
string m1 = n.substr( 0, indexDot++ );
string m2 = n.substr( indexDot ));
myArray.push_back( make_pair(m1, m2) );
}
in.close();
// --- Для просмотра контейнера ---
typedef BinArray::const_iterator ba_cIter;
for (ba_cIter it = myArray.begin(); it != myArray.end(); it++)
cout << it->first << '.' << it->second << endl;
return 0;
}
ещё неочень ясен рядок в твоём коде там где continue - разве он обязателен??
А это если попадается число без дробной части.
я так думал что у меня всё будет в одном классе
крео у меня не особо, назвал его binary ))
так мыслю, что там у меня будет 4 функции:
считывание, вывод, перевод целой и перевод дробной части числа в двоичный код
А вместо массива используй контейнер:
ну учусь я ещё))
контейнер эт что??
так понял что это vector..
пока ещё не изучал..
как изучу буду использовать ))
но в любом случае мне надо считывать в массив.
я считывал в символьный массив,
разбивал его на две части: целую и дробную.
и сохранял в разных массивах (mainpart и mantissa)
ну и ещё я передавал индекс последнего элемента
вроде всё более-менее логично...
но не компилируеццо
собственно и вопрос мой был:
"где ошибки?"
хочу поблагодарить за то, что ты мне подаешь мне всё на блюдечке, тратишь своё время пишешь мне код. но, сорри, условие у меня "использовать массив" - я кагбэ использовал.
если какие-то моменты есть в моём коде которые уж слишком режут глаза то конечно было бы очень неплохо копипастить их
крео у меня не особо, назвал его binary ))
так мыслю, что там у меня будет 4 функции:
считывание, вывод, перевод целой и перевод дробной части числа в двоичный код
Не усложняй. Все решается проще. Хотя, если в целях изучения языка...
контейнер эт что??
динамический массив??
Еще круче. :)
но в любом случае мне надо считывать в массив.
я считывал в символьный массив,
разбивал его на две части: целую и дробную.
и сохранял в разных массивах (mainpart и mantissa)
ну и ещё я передавал индекс последнего элемента
Присмотрись внимательно к своему коду. Тебе самому он нравится? ;)
вроде всё более-менее логично...
но не компилируеццо
собственно и вопрос мой был:
"где ошибки?"
Как говорят коллеги-медики: "Ушиб всей бабушки" :) Там весь код неправильный.
конечно можно было бы и немного подругому считывать,но
разве совсем я что-то резко неправильное сделал??
ну считал в массив чаров, ну разбил на две части записал в массивы интов и
потом вывел
в чём ошибка?
сейчас мне бы хотелось чтобы ты правильно меня понял:
я не оправдываюсь, просто где я наошибался хочу услышать))
в чём ошибка?
сейчас мне бы хотелось чтобы ты правильно меня понял:
я не оправдываюсь, просто где я наошибался хочу услышать))
Ок, оставим способ решения в стороне.
Самое первое:
binary num;
num.indMPRT=0;
num.indMNTS=0;
//(ниже) вызываем ф-ю считывания из файла числа
binary::in_num(num.mainpart, num.indMPRT, num.mantissa, num.indMNTS);
...
Зачем вызываешь нестатичную функцию для тобой же созданного объекта, который её инкапсулирует, да еще и передаёшь ей в аргументах ссылки на члены-данные, к которым она и так имеет доступ?
Ну, и дальше:
binary::out_num(num.mainpart, num.indMPRT, num.mantissa, num.indMNTS);
Опять фигня.
if ((c==48) || (c==49) || (c==50) || (c==51)
|| (c==52) || (c==53) || (c==54) || (c==55)
|| (c==56) || (c==57)) i++;
else break;
Это не проверка на точку, эта проверка на цифру.
for (int k=0; k<=i; k++)
{
a1[k]=c[k]; // неявное преобразование
a1[k]=(a1[k]-48);
};
Ну а потом, чтение а твоем примере возможно только одного числа.
А это "чей туфля"?
{
for (int g1=0; g1<=z1; g1++)
{
cout<<ar1[g1];
};
for (int g2=0; g2<=z1; g2++)
{
cout<<"."<<ar2[g2];
}
// вывели значение ввиде:
// [элементы первого массива без пропусков].[элементы второго массива без пропусков]
cout<<endl;
system("pause");
exit(0);
}
1. Уверен, что на экран попадет то, что нужно? (подсказка: твои индексы - это фигня)
2. Преждевременный выход в систему? Круто...
Извиняй, но дальше копаться сил и желания нету...
Да нет, блин. Тебе даже компилятор подсказывал...
спасибо))
ещё где глаза режет? )) подскажи пож. если не сложно
спасибо))
ещё где глаза режет? )) подскажи пож. если не сложно
Я же здесь расписал.
для формулы нужно сделать:
1. Точечный просчет. Должна быть обеспечена возможность установки значения для любого параметра задачи (х и а), после чего рассчитывается и выводится на экран значение, требуемое по условию индивидуального варианта задания.
2. Просчет в диапазонном режиме. Должна быть обеспечена возможность установки значения для параметра а. Для аргумента х задаются его наименьшее и наибольшее значения. В результате х должен изменяться в заданном диапазоне значений для максимально возможного количества точек. В результате выполняется расчет и вывод на экран номеров точек, значений аргумента х и соответствующие значения функции. Результаты представляются на экране в виде таблицы, имеющей 2 колонки.
Если какое-то сочетание параметров является недопустимым (полюс функции или, например, отрицательное подкоренное значение), то в точечном режиме додлжно быть выведено сообщение об этом, а в диапазонном – в таблице вместо значения функции размещается соответствующее сообщение.
формула: сигма(i от 0 до 10) дроби,в числителе квадратный корень из:2+a+ix.в знаменатиле:sin(ix+a)
вот что я придумал к первой части:
#include <iostream.h>
#include <conio.h>
#include <math.h>
void main()
{
int i,a,x;
double s,y,z;
cout<<"vvedite a:"<<endl;
cin>> a;
cout<<"vvedite x"<<endl;
cin>>x;
for (i=0;i<=10;i++)
{
if((2+a+x*i)>0)
{
y=sqrt(2+a+x*i);
}
else
{
cout<<"pri I ravnom "<<i<<" koren otricatilen";
break;
}
if(sin(x*i+a)!=0)
{
z=sin(x*i+a);
}
else
{
cout<<"pri I ravnom "<<i<<" znamenatel raven 0";
break;
}
s=(y/z);
cout<<"pri I ravnom "<<i<<" zna4enie s="<<s<<endl;
}
}
но,если ставить брейки,то возможно,что при изменении I получится отриацателен корень или знаменатель равен 0,но при дальнейшем изменении i решение будит,а без брейка выходит какой-то левый ответ,че делать?помогите!
Задание элементарное, но из-за нехватки теоретических знаний его сделать не могу :(
Дана квадратная матрица размером NxN, содержащая вещественные числа.
Определить сумму элементов в каждой строке матрицы и упорядочить номе-
ра строк по убыванию значений найденных сумм с помощью алгоритма сор-
тировки выбором. Вывести упорядоченный список номеров строк и соответ-
ствующих им сумм.
Насколько я понимаю, сортировка матрицы:
#include <stdio.h>
int main(){
int a[8]={10,5,-2,7,-1,4,0,3};
for(int i=0; i<8; i++) printf("%i ", a); printf("\n");
for(i = 1; i <= 8; i++)
{
int tmp = a[i-1];
int k = i;
for(int j = i; j <= 8; j++)
{
if(tmp > a[j-1])
{
tmp = a[j-1];
k = j;
}
}
a[k-1] = a[i-1];
a[i-1] = tmp;
}
for(i=0; i<8; i++) printf("%i ", a); printf("\n");
return 0;
}
не компилируется, не нравятся 4 и 5 строчка.. я подозреваю, что переменные нужно описывать... Подскажите, пожалуйста, как сделать...
Задание элементарное, но из-за нехватки теоретических знаний его сделать не могу :(
Дана квадратная матрица размером NxN, содержащая вещественные числа.
Определить сумму элементов в каждой строке матрицы и упорядочить номе-
ра строк по убыванию значений найденных сумм с помощью алгоритма сор-
тировки выбором. Вывести упорядоченный список номеров строк и соответ-
ствующих им сумм.
Насколько я понимаю, сортировка матрицы:
#include <stdio.h>
int main(){
int a[8]={10,5,-2,7,-1,4,0,3};
for(int i=0; i<8; i++) printf("%i ", a); printf("\n");
for(i = 1; i <= 8; i++)
{
int tmp = a[i-1];
int k = i;
for(int j = i; j <= 8; j++)
{
if(tmp > a[j-1])
{
tmp = a[j-1];
k = j;
}
}
a[k-1] = a[i-1];
a[i-1] = tmp;
}
for(i=0; i<8; i++) printf("%i ", a); printf("\n");
return 0;
}
не компилируется, не нравятся 4 и 5 строчка.. я подозреваю, что переменные нужно описывать... Подскажите, пожалуйста, как сделать...
Для начала я не могу понять, где у Вас матрица NxN.
Вот мой вариант программы. Сделан на скорую руку, поэтому не идеален.
Доработаете сами.
#include <stdio.h>
#include <conio.h>
#define N 4
//---------------------------------------------------------------------------
int main()
{
int mas[N][N] = {8, 5, 7, 4,
4, 0, 4, 1,
9, 4, 7, 4,
3, 2, 9, 8};
int sum[N], num[N] = {1, 2, 3, 4};
int i, j, k, min, temp;
for(i = 0; i < N; i++) {
printf("%d\t", num);
for(j = 0; j < N; j++) printf("%4d", mas[j]);
printf("\n");
}
printf("\n\n");
for(i = 0; i < N; i++) {
sum = 0;
for(j = 0; j < N; j++)
sum += mas[j];
}
for(i = 0; i < (N - 1); i++) {
min = i;
for(j = i + 1; j < N; j++) {
if(sum[j] < sum[min]) min = j;
}
temp = sum;
sum = sum[min];
sum[min] = temp;
for(k = 0; k < N; k++) {
temp = mas[k];
mas[k] = mas[min][k];
mas[min][k] = temp;
}
temp = num;
num = num[min];
num[min] = temp;
}
for(i = 0; i < N; i++) {
printf("%d\t", num);
for(j = 0; j < N; j++) printf("%4d", mas[j]);
printf("\n");
}
getch();
return 0;
}
//---------------------------------------------------------------------------
private void надстрочныйStripButton1_Click(object sender, EventArgs e)
{
if (Math.Abs(richText.SelectionCharOffset) != 0)
{
richText.SelectionCharOffset = 0;
}
else
{
richText.SelectionCharOffset = 6;
}
}
#include <stdlib.h>
#include <stdio.h>
using namespace std;
typedef struct
{
char fam [40];
char nam [40];
char otch [40];
char dol [40];
char date [10];
float zp;
}EMPLOYEE;
EMPLOYEE cadd(int n)
{ EMPLOYEE mass[n];
//формируем запись sotr
for(int i=0;i<=n;i++)
{ cout<<"fam="; cin>> mass.fam;
cout<<"nam="; cin>> mass.nam;
cout<<"otch="; cin>> mass.otch;
cout<<"dol="; cin>> mass.dol;
cout<<"date="; cin>> mass.date;
cout<<"zp="; cin>> mass.zp;
}
return mass[n];
}
int main()
{ FILE *fp;
int n=0;
cin>>n;
EMPLOYEE sotr[]=cadd(10);
fp = fopen("file.txt","wb");
if (fp==NULL)
{
cout<<"Error opening file: "<<ferror(fp)<<'\n';
return 1;
}
fwrite(&sotr, sizeof(EMPLOYEE),1,fp);
fclose(fp);
system("PAUSE");
return 0;
}
ругается вот на эту строчку
#include <stdlib.h>
#include <stdio.h>
using namespace std;
typedef struct
{
char fam [40];
char nam [40];
char otch [40];
char dol [40];
char date [10];
float zp;
}EMPLOYEE;
EMPLOYEE cadd(int n)
{ EMPLOYEE mass[n];
//формируем запись sotr
for(int i=0;i<=n;i++)
{ cout<<"fam="; cin>> mass.fam;
cout<<"nam="; cin>> mass.nam;
cout<<"otch="; cin>> mass.otch;
cout<<"dol="; cin>> mass.dol;
cout<<"date="; cin>> mass.date;
cout<<"zp="; cin>> mass.zp;
}
return mass[n];
}
int main()
{ FILE *fp;
int n=0;
cin>>n;
EMPLOYEE sotr[]=cadd(10);
fp = fopen("file.txt","wb");
if (fp==NULL)
{
cout<<"Error opening file: "<<ferror(fp)<<'\n';
return 1;
}
fwrite(&sotr, sizeof(EMPLOYEE),1,fp);
fclose(fp);
system("PAUSE");
return 0;
}
ругается вот на эту строчку
У Вас полностью неправильная логика формирования sotr. Функция EMPLOYEE cadd(int n) не вернет вам n значений. Вы используете структуру, поэтому используйте указатели.
Т.е вместо EMPLOYEE cadd(int n) - EMPLOYEE *cadd(int n).
Соответственно вместо sotr - *sotr. И *mass. А конструкция return mass[n] будет возвращать n - тый элемент, а не n элементов.
Мой вам совет: возьмите любой учебник по С++ и внимательно почитайте тему "Массивы" :) Да и тему "Функции" не мешало бы :)
Если вы объявляете статический массив, то в [] указывается константное выражение, если динамический - то его объявление будет выглядеть примерно так для вашего случая:
Это первое. Второе, что бросилось мне в глаза: Вы хотите, чтобы функция cadd вернула одну структуру или массив структур?
На мой взгляд, проще было бы сделать так:
{
EMPLOYEE empl;
cout<<"fam="; cin>> empl.fam;
cout<<"nam="; cin>> empl.nam;
cout<<"otch="; cin>> empl.otch;
cout<<"dol="; cin>> empl.dol;
cout<<"date="; cin>> empl.date;
cout<<"zp="; cin>> empl.zp;
return empl;
}
(функция возвращает структуру)
и вызывать эту функцию в цикле в main:
sotr = cadd();
Думаю, если вы поймете тему "Массивы", то и записать результаты в файл не составит особого труда ;)
с использованием массивов.
написано конечно дико))
кое-как скомпилировалось
уже патыюсь найти ошибку часа три.
безрезультатно..
подскажите пожалуйста где там у ошибка в алгоритмах перевода.
#include <fstream>
#include <cstdlib>
#include <binary.h>
using namespace std;
int main()
{
binary num;
num.in_num();
num.num_mainpart_conv();
num.num_mantissa_conv();
return 0;
}
ну и binary.h где собственно и находиццо ошибка в каком-то из алгоритмов:
(был вывод в текстовый файл, навремя сделал в консольку. так пока проще)
#include <cstdio>
#include <fstream>
#include <cstdlib>
#include <iostream>
using namespace std;
class binary
{
public:
// поскольку по условию работа будет с большими числами,
// то размер массивов целой и дробной части числа
// сделаем по 505 символов
// всего число сможет иметь максимально от 505 до 1010 цифр
// думаю должно хватить =)
int mainpart[505];
int convertedMPRT[2000];
int INDconvertedMPRT;
int mantissa[505];
int convertedMNTS[2000];// тут сохраняется уже двоичный код дробной части
int INDconvertedMNTS;// индекс последнего эл.
//(ниже) индекс последнего элемента mainpart
int indMPRT;
// (ниже) индекс последнего элемента mantissa
int indMNTS;
void in_num(); // ф-я считывания. записывает целую и дробную части числа в 2 массива:
// mainpart и mantissa
void divide_num(); // деление массива целой части числа на 2
void num_mainpart_conv(); //ф-я перевода целой части, использует divide_num
void mult_num(); // умножение массива целой части числа на 2.
// сделано так, что только первый элемент может иметь две цифры
// 1 цифра(десятки) это кагбэ если при умножении дроби 0.712 на 2 = 1.424
// то нулевой элемент был бы 14 массива
// первый соответственно 2 и т.д.
void num_mantissa_conv(); //ф-я перевода дробной части числа записанного в массив
//использует ф-ю mult_num
};
void binary::in_num()
{
ifstream in;
in.open("in.txt");
char c[510];
int i=0;
while (in)
{
in>>c;
// (ниже) идёт проверка на не цифру (подразумевается что будет точка)
if ((c==48) || (c==49) || (c==50) || (c==51)
|| (c==52) || (c==53) || (c==54) || (c==55)
|| (c==56) || (c==57)) i++;
else break;
};
i--;
indMPRT=i;
for (int k=0; k<=i; k++)
{
mainpart[k]=c[k];
mainpart[k]=(mainpart[k]-48);
};
int j=0;
while (in)
{
in>>c[j];
j++;
};
j=j--;
indMNTS=j;
for (int k=0; k<=j; k++)
{
mantissa[k]=c[k];
mantissa[k]=(mantissa[k]-48);
};
in.close();
return;
}
void binary::divide_num()
{
int state=0;
int ii=0;
int del[505];
int d=0;
int p;
convertedMPRT[INDconvertedMPRT]=mainpart[indMPRT]%2;
while(ii<=indMPRT)
{
if ((mainpart[ii]==0) && (state==0))
{
del[d]=0;
d++;
}
else
{
if ((mainpart[ii]==1) && (state==0) && (ii!=0))
{
state=1;
del[d]=0;
d++;
}
else
{
if ((mainpart[ii]==1) && (state==0) && (ii==0))
{
state=1;
}
else
{
if ((mainpart[ii]!=0) && (mainpart[ii]!=1) && (state==0))
{
p=mainpart[ii];
del[d]=p/2;
d++;
state=p%2;
}
else
{
if (state==1)
p=10+mainpart[ii];
del[d]=p/2;
d++;
state=p%2;
}
}
}
};
ii++;
};
ii--;
d--;
int hh;
for(hh=0; hh<d; hh++)
{
mainpart[hh]=del[hh];
};
indMPRT=hh;
return;
}
void binary::num_mainpart_conv()
{
INDconvertedMPRT=1;
while((indMPRT!=0) && (mainpart[0]>=2))
{
binary::divide_num();
INDconvertedMPRT++;
};
INDconvertedMPRT--;
convertedMPRT[0]=mainpart[0];
ofstream out;
out.open("out.txt");
cout<<endl;
for (int z=0; z<=INDconvertedMPRT; z++)
{
cout<<convertedMPRT[z];
};
out.close();
return;
}
void binary::mult_num()
{
int yy=0;
for(yy=0; yy<=indMNTS; yy++)
{
mantissa[yy]=mantissa[yy]+mantissa[yy];
};
for(int yyy=indMNTS; yyy>=1; yyy--)
{
if (mantissa[yyy]>9)
{
mantissa[(yyy-1)]=mantissa[yyy]/10;
mantissa[yyy]=mantissa[yyy]%10;
};
};
yy--;
while (mantissa[yy]==0)
{
indMNTS--;
yy--;
};
}
void binary::num_mantissa_conv()
{
int r=0;
ofstream out;
out.open("out.txt");
cout<<".";
int period[505][400];
for(int l=0; l<indMNTS; l++)
{
period[0][l]=mantissa[l];
};
int e1=0;
while(true)
{
binary::mult_num();
convertedMNTS[r]=mantissa[0]/10;
mantissa[0]=mantissa[0]%10;
for(int uu=0; uu<=e1; uu++)
{
for(int uuu=0; uuu<indMNTS; uuu++)
{
if (period[uu][uuu]==mantissa[indMNTS])
{
for(int q=0; q<uu; q++)
{
cout<<convertedMNTS[uu];
};
cout<<"(";
for(int qq=uuu; qq<=indMNTS; qq++)
{
cout<<convertedMNTS[qq];
};
cout<<")"<<endl;
out.close();
cout<<endl;
system("pause");
exit(0);
};
};
};
for(int gg=0; gg<=indMNTS; gg++)
{
if (mantissa[gg]!=0) break;
if (gg==indMNTS)
{
for(int hhh=0; hhh<r; hhh++)
{
cout<<convertedMNTS[hhh];
};
out.close();
cout<<endl;
system("pause");
exit(0);
};
};
if (r==400)
{
for(int bb=0; bb<=r; bb++)
{
cout<<convertedMNTS[bb];
};
cout<<endl;
system("pause");
exit(0);
};
r++;
};
}
Мне нужно узнавать полные адреса файлов перетаскиваемых на окно программы.
Я нашел в FAQ статейку по этому поводу, но не смог в ней разобраться.
Пишут вот что:
1. Добавить стиль приема фалов к стилю элемента управления или окна
SetWindowLong(hWnd, GWL_EXSTYLE, dwStyle | WS_EX_ACCEPTFILES);
С этой частью разобрался.
2.В оконной процедуре определить обработчик события WM_DROPFILES
case WM_DROPFILES:
HDROP hDrop = (HDROP)wParam;
DWORD DropsNo = DragQueryFile(hDrop, -1, NULL, 0);
for (DWORD i = 0; i < DropsNo; i++)
{
DragQueryFile(hDrop, i, tmp, 256);
MessageBox(NULL, tmp, "", MB_OK); // Что ни будь делаем с данными...
}
DragFinish(hDrop);
return(0);
Половину понял но реализовать не могу.
Непонял как работает WM_DROPFILES и
что это за выражение HDROP hDrop = (HDROP)wParam; ?
Буду признателен если поможите понять.
2.Оконная процедура находится в коде твоей программы,и звать её обычно WndProc(а вообще–по желанию).Она уравляет всеми действиями над окном(обрабатывает сообщения)–создание,отображение,перерисовка и мн. др.
3.case WM_DropFiles объявленно без switch потому что,видимо,это сделано в программе,а это просто кусок кода,который туда надо вставить.Т.е. подразумевается,что switch написан где-то выше в коде оконной процедуры
4.Выражение HDROP hDrop=(HDROP)wParam означает создание новой переменной типа HDROP и присвоение её значения,переданного в качестве параметра wParam.Почему перед ним стоит (HDROP),спросишь ты?А потому что надо присвоить значение одного типа значению другого типа,только и всего.Typecast,если я не ошибаюсь,да поправят меня знатоки:)
5.Это подразумевается куском функции(см. выше).Это означает,что обработчик сообщения WM_DropFiles отработал нормально
Для общего развития прочитай что-нибудь про Windows API,в частности,про окна и всё,что с ними связано.И изучай C/C++(что ты там изучаешь)
задание:
Дан список, содержащий 10 записей, каждая из которых имеет структуру:
Шифр книги Ф.И.О. авторов Название Год издания
тип строка тип строка тип строка целое
5 символов 20 символов 15 символов
Список упорядочен по возрастанию года издания. Разработать алгоритмы и
программы линейного и двоичного поиска всех книг, изданных до 1960 год с
выводом найденных записей на экран.
Обьясните, пожалуйста, как это можно сделать, насколько я понимаю:
addr data_list[] = { {“1elem”, “2el”, “3el”, 42},
{“adf12”, “asdf”, “asdf”, 34},
{“asdf”, “ared”, “sadf”, 342}
};
это описание массива структур...
далее, бинарный поиск:
int main()
{
int a[8]={-2,0,1,5,7,10,15,20};
int x = 14; // элемент который будем искать
int k, i=0, j=7;
bool b=false;
do
{
k=(i+j) / 2;
if(a[k] == x) b=true; else if(a[k] < x) i=k+1; else j=k-1;
} while(!(b || i>j));
if(b) printf("Интересующий Вас элемент найден;\nвпервые он встречается в массиве\nпод номером %i\n", k);
else printf("Интересующий Вас элемент не найден!\n");
return 0;
}
Линейный поиск нашёл на форуме -
#pragma warn -rpt
#include<stdio.h>
#include<stdlib.h>
int compare(int *x,int *y)
{
return(*x-*y);
}
int main(void)
{
int array[5] = {35,87,46,99,12};
int key;
int *result;
key = 99;
result = lfind(&key,array,5,sizeof(int),compare);
if(result)
printf("Число %d найдено",key);
else
printf("Число %d ненайдено",key);
return 0;
}
Помогите, пожалуйста, собрать в одну программу, сам не справился :(
#include <conio.h>
#include <string.h>
#include <fstream.h>
const n=3;
struct student
{
char fio[20];
char pol[3];
int stp[30];
};
student gr[n];
int i;
int main()
{
ifstream input("input.txt");
ofstream output("output.txt");
for(i=0;i<n;i++)
input>>gr.fio>>gr.pol>>gr.stp;
output<<("Девушки получающие повышенную стипендию:\n");
for(i=0;i<n;i++)
if ((gr.stp > 1100) && (!strcmp(gr.pol,"z")))
output<<gr.fio<<"\n";
input.close();
output.close();
getch();
return 0;
}
При компилляции выводит две ошибки:
1)illegal structure operation
2)cannot convert 'int' to 'int*'
Помогите, пожалуйста, как надо исправить.
задание:
Дан список, содержащий 10 записей, каждая из которых имеет структуру:
Шифр книги Ф.И.О. авторов Название Год издания
тип строка тип строка тип строка целое
5 символов 20 символов 15 символов
Список упорядочен по возрастанию года издания. Разработать алгоритмы и
программы линейного и двоичного поиска всех книг, изданных до 1960 год с
выводом найденных записей на экран.
Обьясните, пожалуйста, как это можно сделать, насколько я понимаю:
addr data_list[] = { {“1elem”, “2el”, “3el”, 42},
{“adf12”, “asdf”, “asdf”, 34},
{“asdf”, “ared”, “sadf”, 342}
};
это описание массива структур...
далее, бинарный поиск:
int main()
{
int a[8]={-2,0,1,5,7,10,15,20};
int x = 14; // элемент который будем искать
int k, i=0, j=7;
bool b=false;
do
{
k=(i+j) / 2;
if(a[k] == x) b=true; else if(a[k] < x) i=k+1; else j=k-1;
} while(!(b || i>j));
if(b) printf("Интересующий Вас элемент найден;\nвпервые он встречается в массиве\nпод номером %i\n", k);
else printf("Интересующий Вас элемент не найден!\n");
return 0;
}
Линейный поиск нашёл на форуме -
#pragma warn -rpt
#include<stdio.h>
#include<stdlib.h>
int compare(int *x,int *y)
{
return(*x-*y);
}
int main(void)
{
int array[5] = {35,87,46,99,12};
int key;
int *result;
key = 99;
result = lfind(&key,array,5,sizeof(int),compare);
if(result)
printf("Число %d найдено",key);
else
printf("Число %d ненайдено",key);
return 0;
}
Помогите, пожалуйста, собрать в одну программу. Очень надо.
#include <fstream>
#include <string>
#include <WinSock2.h>
#pragma comment(lib,"Ws2_32.lib")
using namespace std;
int main()
{
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD(2, 2);
int s=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN sin;
sin.sin_family=AF_INET;
sin.sin_port=htons(3456);
WSAStartup(wVersionRequested, &wsaData);
PHOSTENT phe=gethostbyname("localhost");
memcpy((char FAR *)&(sin.sin_addr ),
phe->h_addr_list , phe->h_length);
int con=connect(s,(struct sockaddr *)&sin,sizeof(&sin));
cout<<con<<endl;
cout<<WSAGetLastError()<<endl;
WSACleanup();
}
при попытке исполнения этого кода WSAGetLastError() выдаёт ошибку 10038. Подскажите как решить эту проблему, пожалуйста.
Возможно,где-то ошибки в коде–точно сказать не могу.Убедитесь,что инициализация проходит успешно(ну,может,нет у вас версии 2.2)
Если не трудно фрагментиком кода?
Что в этой программе может быть неправильным?
#include<iostream>
int main(int argc, char* argv[])
{
cout << "Enter the string: ";
char* string = new char [];
cin >> string;
int c=0;
while(*string != '\0')
{
if (*string == '1'){c++;}
string++;
}
cout<<'\n'<<c;
getchar();
}
Прикол в том, что она работает через раз. Бывает работает, а бывает вылетает с ошибкой (ну вот с той, что хочет отправить отчет Микрософту). Вобщем ведет себя безобразно. Что это может быть?
Что в этой программе может быть неправильным?
А что по-твоему делает строчка?
Если так не правильно, то как мне объявить строку, если я заранее не знаю ее размер?
при попытке исполнения этого кода WSAGetLastError() выдаёт ошибку 10038. Подскажите как решить эту проблему, пожалуйста.
а вот и ошибочка: (думаю сами догоните?)
int s=socket(AF_INET,SOCK_STREAM,0);
...
WSAStartup(wVersionRequested, &wsaData);
...
{
return (&m_front);
}
inline const dVector& dMatrix::operator[] (int i) const
{
return (&m_front);
}
Какой смысл делать вариант с const и в каких случаях он будет использоваться?
Если так не правильно, то как мне объявить строку, если я заранее не знаю ее размер?
Ну а как ты собираешься выделить область памяти, если не знаешь размер?
Варианта как минимум три:
1) узнать размер,
2) выделить заведомо больше, чем может понадобиться,
3) выделить некоторое кол-во, например, один байт, как заполниться выделить ещё, например еще один байт и т.д.
Выбирай любой, но учти, что правильный - третий, например с помощью класса string.
И учи C++ (по книгам, а не методом тыка).
{
return (&m_front);
}
inline const dVector& dMatrix::operator[] (int i) const
{
return (&m_front);
}
Какой смысл делать вариант с const и в каких случаях он будет использоваться?
Например для того, чтобы использовать оператор для константных объектов.
P.S.Простите за оффтоп
P.S.Простите за оффтоп
Это бот. Заблокировал.