Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 874
от 12.10.2007, 05:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 482, Экспертов: 69
В номере:Вопросов: 6, Ответов: 10


Вопрос № 104467: Здравствуйте! Товарищи эксперты, подскажите, как получить строку из EditBox в ListBox при нажатии на кнопку? Спасибо. ...
Вопрос № 104478: Задача 1 Вычислить средний балл учеников класса, если известны оценки ученикоа по математике, русскому языку и физики, распечатать список учеников , имеющих средний балл выше среднего в классе Задача 2 Дан файл, содержащий текст на англий...
Вопрос № 104483: Помогите написать программу на С++ для Borland 3.1 Дан файл F, компоненты которого являются целыми числами. Никакая из компонент файла не равна нулю. Файл F содержит столько же отрицательных чисел, сколько положительных. Используя вспомогате...
Вопрос № 104490: Здравствуйте! Мне необходимо написать на С поиск файлов и подкаталогов, входящих в выбранный каталог. Спасибо....
Вопрос № 104492: Здравствуйте, ув. эксперты. Подскажите, каким образом можно считать из файла каждую 50ую строчку (может есть для этого какие-нибудь стандартные функции)? Мне в голову пришла только одна мысль: считать все строчки из файла в массив и уже из не...
Вопрос № 104497: пишу простенькую прогу на си. в vs 2005.прога рабочая, компилируется без ошибок. но exeшный файл не запускается...т.е.запускается и тут же закрывается. писала ф-цию getch()не помогло. думаю, можт это из-за настроек vs5, тк в vs6 все норм(но к сожален...

Вопрос № 104.467
Здравствуйте!
Товарищи эксперты, подскажите, как получить строку из EditBox в ListBox при нажатии на кнопку?
Спасибо.
Отправлен: 06.10.2007, 12:50
Вопрос задал: Sky24dive (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Архипов Александр Леонидович
Здравствуйте, Sky24dive!
На BC++ 6 это выглядит так:

ListBox1->Items->Add(Edit1->Text)

Приложение:

Ответ отправил: Архипов Александр Леонидович (статус: 5-ый класс)
Ответ отправлен: 06.10.2007, 13:44
Оценка за ответ: 4


Вопрос № 104.478
Задача 1
Вычислить средний балл учеников класса, если известны оценки ученикоа по математике, русскому языку и физики, распечатать список учеников , имеющих средний балл выше среднего в классе
Задача 2
Дан файл, содержащий текст на английском языке и некоторая буква, подсчитать , сколько слов начинается с указанной буквы
Заранее спасибо
Отправлен: 06.10.2007, 14:35
Вопрос задала: Николаева Татьяна Ивановна (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Sov
Здравствуйте, Николаева Татьяна Ивановна!
Есть структура student, в ней 4 поля:имя ученика и массивы оценок по предметам
Пользователь вводит только имена учеников, массивы с оценками заполняются случаным образом

Приложение:

Ответ отправил: Sov (статус: 7-ой класс)
Ответ отправлен: 07.10.2007, 07:01

Отвечает: Гальцов Андрей Михаилович
Здравствуйте, Николаева Татьяна Ивановна!

1)

#include <iostream.h>
#include<string.h>
#include <conio.h>
#include <math.h>
#define N 3 //kol-vo uchenikov

class Pupil
{
char Name[25];
int math;
int phis;
int rus;
float sr;

public:

void setName(char* s)
{
strcpy(Name,s);
}

void setMath(int a)
{
math=a;
}

void setPhis(int a)
{
phis=a;
}

void setRus(int a)
{
rus=a;
}

void setSr()
{
sr=(phis+math+rus)/3;
}

char* getName()
{
return Name;
}

int getMath()
{
return math;
}

int getPhis()
{
return phis;
}

int getRus()
{
return rus;
}

float getSr()
{
return sr;
}

void vvod(int i)
{
char* s;
int a,b,c;
gotoxy(1,i+3);
cin>>s;
setName(s);
gotoxy(14,i+3);
cin>>a;
setMath(a);
gotoxy(24,i+3);
cin>>b;
setPhis(b);
gotoxy(34,i+3);
cin>>c;
setRus(c);
setSr();

}

};
void main()
{

Pupil p[N];
clrscr();

gotoxy(1,2) ;
cout<<"Name";
gotoxy(14,2);
cout<<"Math";
gotoxy(24,2);
cout<<"Phisic";
gotoxy(34,2);
cout<<"Rus";

for(int i=0;i<N;i++)
{
p[i].vvod(i);
}

float sum;
float sred_bal;

for(i=0;i<N;i++)
{
sum+=p[i].getSr();
}

sred_bal=sum/N;

cout<<" Ucheniki u kotoryh sred bal vyshe srednego po klassu: ";

for(i=0;i<N;i++)
{
if(p[i].getSr()>sred_bal)
{
cout<<" - "<<p[i].getName();
}
}
}

2)
Только введите там свой путь к файлу...

#include <iostream.h>
#include<string.h>
#include <conio.h>
#include <math.h>
#include<stdio.h>


void main()
{
FILE* f=fopen("D:\otvet.txt","r");
char* s;
fgets(s,300,f); //300 - kol-vo schityvaemyh symvolov
int cnt=0;
char a;
clrscr();

for(int i=0;i<strlen(s);i++)
{
cout<<s[i];
}

cout<<" Vvedite symvol dlya sravneniya => ";
cin>>a;

for (i=0;i<strlen(s);i++)
{
if(s[i]==a && (s[i-1]==' ' || s[i-1]=='x0'))
{
cnt++;
}
}

cout<<" Kol-vo slov = "<<cnt;
fclose(f);
getch();

}

---------
Да здравтствует С++!!!...;)
Ответ отправил: Гальцов Андрей Михаилович (статус: 6-ой класс)
Ответ отправлен: 07.10.2007, 19:51

Отвечает: Архипов Александр Леонидович
Здравствуйте, Николаева Татьяна Ивановна!
Задача 1

#include <vcl.h>
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <string.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
using namespace std;

// Заполнение массива данных и вычисление среднего балла для каждого ученика
String name[5]; // Массив учеников
float oz[5][4]; // Замеьте, для количества оценок - 4 значения. Четвёртая для среднего
char str[20], o[1];
for (int i = 0; i < 5; i++)
{
printf("Studet ");
gets(str);
name[i] = str;

printf("Mat ");
gets(o);
oz[i][0] = StrToFloat(o);

printf("Rus ");
gets(o);
oz[i][1] = StrToFloat(o);

printf("Fiz ");
gets(o);
oz[i][2] = StrToFloat(o);

oz[i][3] = (oz[i][0]+oz[i][1]+oz[i][2])/3;
printf("srednee = %s ", FloatToStr(oz[i][3]));
}
// Вычисление среднего балла по классу
float sr;
for (int i = 0; i < 5; i++) sr = sr + oz[i][3];
printf(" Srednee po klassu = %s ", FloatToStr(sr/5));
// Вывод на экран

for (int i = 0; i < 5; i++)
{
if (oz[i][3] > sr/5)
{
printf(": %s - ", name[i]);
printf(" %s ", FloatToStr(oz[i][3]));
}
}
getch();
return 0;
}
Задача 2

#include <vcl.h>
#include <stdio.h>
#include <conio.h>
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused

int main(void)
{
// Принимаем условие, что перед словом должен стоять пробел
int j = 0; // Счётчик слов
char buf[1];
String sm;
// В S текст
String S = "Activation/registration instructions, other product configuration issues, and installation instructions are included in the install.txt/install.rtf documents, located at the root of your C++Builder CD and your C++Builder installation directory. An overview of the product registration process is also provided in Chapter 1 of the Quick Start, which comes with the product.";
printf("%s ", S);

gets(buf); // Ввод искомого символа
sm = buf;
if (S.SubString(1,1) == sm) j = j + 1; // Проверка первого слова
sm = " " + sm;

for (int i = 1; i<=S.Length(); i++) // проверка последующих слов
if (S.SubString(i,2) == sm) j = j + 1;
printf("%s", IntToStr(j));
getch();
return 0;

}
//-
Ответ отправил: Архипов Александр Леонидович (статус: 5-ый класс)
Ответ отправлен: 08.10.2007, 12:57


Вопрос № 104.483
Помогите написать программу на С++ для Borland 3.1

Дан файл F, компоненты которого являются целыми числами. Никакая из компонент файла не равна нулю. Файл F содержит столько же отрицательных чисел, сколько положительных. Используя вспомогательный файл H, переписать компоненты файла F в файл G так, чтобы в файле G не было двух соседних
компонент с одним знаком.
Отправлен: 06.10.2007, 15:12
Вопрос задал: Предеин Денис Дмитроевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Sov
Здравствуйте, Предеин Денис Дмитроевич!
Каждая строка в файле-это число

Приложение:

Ответ отправил: Sov (статус: 7-ой класс)
Ответ отправлен: 07.10.2007, 06:53


Вопрос № 104.490
Здравствуйте!
Мне необходимо написать на С поиск файлов и подкаталогов, входящих в выбранный каталог.
Спасибо.
Отправлен: 06.10.2007, 15:53
Вопрос задала: Svetilka (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Verena
Здравствуйте, Svetilka!
Вы можете воспоьзоваться win api функциями FindFirstFile/FindNextFile.
HANDLE FindFirstFile(
LPCTSTR lpFileName,
LPWIN32_FIND_DATA lpFindFileData
);

Начинает поиск в директории lpFileName и отправляет результат в структуру lpFindFileData (см. описание структры в приложении).
BOOL FindNextFile(
HANDLE hFindFile,
LPWIN32_FIND_DATA lpFindFileData
);

Продолжает поиск, начатый предыдущей функцией. В качестве первого параметра передаётся handle, полученный как результат выполнения findfirstfile, в качнстве второго - вновь указатель на структуру.
Закрыть поиск необходимо функцией
BOOL FindClose(
HANDLE hFindFile
);

, где в качестве параметра передаётся handle, полученный первой функцией.
Пример использования:

WIN32_FIND_DATA fd; //структура
HANDLE hFindFile= FindFirstFile ("C:\1\*.*", &fd); //ищем все файлы в папке C:\1
BOOL bContinue=(hFindFile!= INVALID_HANDLE_VALUE); //если что-то найдено
while (bContinue)
{
//что-то делаем здесь с найденной информацией,
// например, выведем на экран:
cout << fd.cFileName
bContinue= FindNextFile(hFindFile, &fd); //ищем следующий
}//while (bContinue)
FindClose(hFindFile); //закрываем поиск


Удачи!

Приложение:

---------
Эта история - не для истории, понимаешь?

Ответ отправила: Verena (статус: Студент)
Ответ отправлен: 06.10.2007, 17:16


Вопрос № 104.492
Здравствуйте, ув. эксперты.
Подскажите, каким образом можно считать из файла каждую 50ую строчку (может есть для этого какие-нибудь стандартные функции)?
Мне в голову пришла только одна мысль: считать все строчки из файла в массив и уже из него дергать нужные строки, но мне кажется это не слишком разумно, особенно если файл большой.
Отправлен: 06.10.2007, 16:20
Вопрос задал: Никитаев Константин Александрович (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Verena
Здравствуйте, Никитаев Константин Александрович!
Считывать файлы целиком во время выполнения программы - вообще есть вещь нежелательная, поскольку файл может быть любого размера. Считать каждую 50-ю строчку можно по-разному. Например, если строки фиксированной длины или есть возможность как-то предсказать их длину в байтах, можно пользоваться функцией fseek (файл, сдвиг_в_байтах, откуда_сдвигать) - последний параметр может быть выражен одной из следующих констант:
SEEK_SET Начало файла
SEEK_CUR Текущая позиция указателя файла
SEEK_END Конец файла
Другой вариант: можно в цикле до 50 считывать строку из файла (например, функцией fgets) в одну и ту же переменную, чтобы после выхода из цикла там осталась только нужная строка. С точки зрения быстродействия, этот способ хуже, поскольку обращение к файлу занимает достаточно много времени.
Это наиболее простые способы, но, возможно, есть какие-то другие :)
Удачи!
---------
Эта история - не для истории, понимаешь?
Ответ отправила: Verena (статус: Студент)
Ответ отправлен: 06.10.2007, 16:52

Отвечает: kool
Здравствуйте, Никитаев Константин Александрович!
Каждая строка заканчивается парой знаков - перевод строки, возврать каретки.
(hex код 0x0D, 0x0A) 50 раз найдя эту пару будем находиться на 50 строке.
А файл можно отобразить на память и работать с ним как с массивом.
Удачи!

---------
I am.
Ответ отправил: kool (статус: Практикант)
Ответ отправлен: 07.10.2007, 10:31

Отвечает: Гальцов Андрей Михаилович
Здравствуйте, Никитаев Константин Александрович!

Если это файл последовательного доступа(как чаще всего бывает в таких зажаниях), то надо перебрать все 49 строк что бы добраться до 50-й...Делайте, так как написали...думаю всё получится...


---------
Да здравтствует С++!!!...;)
Ответ отправил: Гальцов Андрей Михаилович (статус: 6-ой класс)
Ответ отправлен: 07.10.2007, 20:01


Вопрос № 104.497
пишу простенькую прогу на си. в vs 2005.прога рабочая, компилируется без ошибок. но exeшный файл не запускается...т.е.запускается и тут же закрывается. писала ф-цию getch()не помогло. думаю, можт это из-за настроек vs5, тк в vs6 все норм(но к сожалению нужно в 2005-ом) помогите плз!
Отправлен: 06.10.2007, 16:32
Вопрос задал: FRJ
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Rockie
Здравствуйте, !

В VS 2005 вы можете компилировать в режиме Debug и Release. В первом случае компилятор сам добавляет аналог getch, чтобы окно колнсоли не закрывалось. Если режими Release - окошко будет закрываться. Эти пункты можно настроить в Project-> Properties-> кнопка Configuration Manager-> Active Solution Configuration-> выбираете режим, close, OK.

Если вы говорите, что добавляете функцию getch() и программа все равно закрывается - можно предположить что программа все же содержит ошибку и завершается аварийно(до getch() дело не доходит). Так что в любом случае вам стоит привести код и тогда вам намного быстрее ответят.
Ответ отправил: Rockie (статус: 5-ый класс)
Ответ отправлен: 08.10.2007, 16:58


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.60.13 от 06.10.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное