/* Горбаченко В.А. 29 04 2011 08 47
* Визначити клас, який реалізує поліном.
* Поліном визначається поядком та масивом коефіцієнтів.
* Передбачитит методи обчислення значення полінома у
* заданій точці, знаходження похідної та первісної
*/
#include <iostream>
#include <cstring>
#include <math.h> // УВАГА! Підключаний math.h. Впадло переписувати pow, але для даного випадку це - дуже просто
using namespace std;
class polynom{ // Клас полінома
public:
int n; // Порядок
double *p_koef; // Вказівник масив коефіцієнтів. Поки що пам'ять для нього не виділена
void EnterN(){ // функція просить користувача ввести порядок полінома
do{
cout<<" -> Vvedit poryadok [n>=2]: ";
cin>>n;
} while (n<2); // не пропускаємо n<2
n++;
}
void EnterKoef(){ // Вводимо коефіцієнти полінома
for (int i=n-1 ; i >=0 ; i--){
cout<<"Enter [ "<<i<<" ] = ";
cin>>*(p_koef+i);
}
}
void ShowPoly(){ // вивести поліном на екран
for (int i=n-1 ; i >=1 ; i--){
cout<<"("<<*(p_koef+i)<<")"<<"*x^"<<i<<" + ";
}
cout<<"("<<*(p_koef)<<")";
cout<<endl;
}
double EnterX(){// Ввести X
double x;
cout<<" -> Enter X : ";
cin>>x;
return x;
}
double CalculatePoly(double x){ // порахувати поліном
double sum=0;
for (int i=n-1 ; i >= 0 ; i--){
sum+=*(p_koef+i)*pow(x,i);
}
return sum;
}
void CalculatePoh(){ // похідна
cout<<" -> Pohidna = ";
int i=n-1;
for (i ; i > 1 ; i--){
cout<<"("<<i*(*(p_koef+i))<<")"<<"*x^"<<i-1<<" + ";
}
cout<<"("<<i*(*(p_koef+i))<<")";
cout<<endl;
return ;
}
void CalculatePer(){ // первісна
cout<<" -> Pervisna = ";
int i=n-1;
for (i ; i >= 1 ; i--){
cout<<"("<<(*(p_koef+i))/(i+1)<<")"<<"*x^"<<i+1<<" + ";
}
cout<<"("<<(*(p_koef+i))<<")*x";
cout<<endl;
return ;
}
polynom(){// конструктор
EnterN();
p_koef=new double [n];// виділяємо місце під пам'ять
EnterKoef();
}
~polynom(){
delete(p_koef); // звільнюємо виділену пам'ять
}
};
int main()
{
polynom p1; // створюємо поліном, запускається конструктор,
// який заповлює його
p1.ShowPoly(); // Показатии введений поліном
cout<<endl;
p1.CalculatePoh(); // Вивести похідну
p1.CalculatePer(); // Вивести первысну
cout<<endl;
cout<<" |-> CalculatePoly = "<<p1.CalculatePoly(p1.EnterX())<<endl;
// Функція рахує значення полінома.
// функція CalculatePoly приймає значення x і повертає рахунок
// функція EnterX повертає число, яке користувач ввів з клавіатури
system("PAUSE");
return 0;
}
#include <stdio.h>
#include <conio.h>
#include <conio.c>
#include <iostream>
using namespace std;
int cilkist(int t,char *buffer1,FILE *f1) //функція читає елементи з 1-го файлу та рахує їх кількість
{
int c1;
f1=fopen("D:\\УЧОБА\\op\\С ТА С++\\лаби\\проги\\лаб_5\\file_1.txt","r"); //відкриваємо файл для читання з нього
while((c1=fgetc(f1))!=EOF) //знаходимо кількість елементів 1-го файлу
{
buffer1 [t] = (char)c1; //робимо елементи типо char
t++;
}
cout << "kilkist elmentiv " << t << endl;
fclose(f1); //закриваємо 1-й файл
return t;
}
/*void zapus(FILE *f2,int c2,char *buffer2,int t) //функція записує єлементи в 2-й файл
{
f2=fopen("D:\\УЧОБА\\op\\С ТА С++\\лаби\\проги\\лаб_5\\file_2.txt","w+"); //відкриваємо файл для запису в нього в початок
for(int i=t-1;i>=0;i--)
{
c2=buffer2[i];
fprintf(f2,"%c",c2);
}
return;
}*/
void vuvid(char *buffer1,int t) //функція виводить перевернутий масив на екран
{
for(int i=1;i<=t;i++) //цикл виводить перевернутий масив
{
cout << buffer1[t-i]; //перекидуємо масив
}
cout << endl;
}
main(void)
{
textbackground (WHITE);
textcolor (BLACK);
FILE *f1,*f2; //декларація вказівників на 1-й та 2-й файли
int c2; //змінна 2-го файла
int t=0; //визначимо розмір 1-го файла
int d=1;
if ((f1!=NULL)&&(f2!=NULL)) //якщо файли дійсно відкриті то виконуємо операції над ними
{
char buffer1[t]; //створюмо буферний масив
char buffer2[t]; //створюємо масив в який скопіюємо даний
t = 0;
t=cilkist(t,buffer1,f1); //виклик функції котра читає і виводить кількість елементів 1-го файлу
vuvid(buffer1,t); //виклик функції виводу перевернутого масиву в методі main
//zapus(f2,c2,buffer2,t); //виклик функції запису в методі main
//fclose(f2); //закриваємо 2-й файл
}
fflush(f1); //очищуємо вміст внутрішнього буфера звязаного
system("PAUSE");
return 0;
}
Cherokee написав:Умова задачі: з 1 го в 2й файл потрібно записати текст, але в перевернутому вигляді. Єфіма сказала все реалізувати через функції. Зробив з виводом перевернутого тексту на екран. Програма компілюється, проте тільки виводить на екран перевернутий текст, не записує його в 2-й файл.
Вась зроби будь ласка!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#include <stdio.h>
#include <conio.h>
//#include <conio.c>
#include <iostream>
using namespace std;
int cilkist(int t,char *buffer1,FILE *f1) //функція читає елементи з 1-го файлу та рахує їх кількість
{
int c1;
f1=fopen("pfile_1.txt","r"); //відкриваємо файл для читання з нього
while((c1=fgetc(f1))!=EOF) //знаходимо кількість елементів 1-го файлу
{
buffer1 [t] = (char)c1; //робимо елементи типо char
t++;
}
cout << "kilkist elmentiv " << t << endl;
fclose(f1); //закриваємо 1-й файл
return t;
}
void zapus(FILE *f2,int c2,char *buffer2,int t) //функція записує єлементи в 2-й файл
{
// нам надо переписать файл а не дописать ставим модификатор 'w'
f2=fopen("file_2.txt","w"); //відкриваємо файл для запису в нього в початок
for(int i=t-1;i>=0;i--)
{
//-> зачем интить? Будь по проще c2 - уже нафиг не надо
//-> c2=buffer2[i];
//-> ну ты гонишь... а где тут указатели?????
//-> у тебя такая же ошибка как и ЕФИМЫ. ЗАПОМНИ: Ефима паливный пример на лекциях показала
//-> ЗАПОМНИ: НЕЛЬЗЯ ШУТИТЬ С ФУНКЦИЯМИ *PRINT* и *SCAN* - ЭТО ТАКАЯ ЖОПА, ЧТО В КОМПЬЮЕТРНОМ АНДЕГРАУНДЕ
//-> ЭТИ ФУНКЦИИ ХУЖЕ ЧЕМ РБМК — 1000.
//-> Если ты пишешь что передаешь CHAR значит передавай CHAR а не INT - это грубейшая ошибка
//-> А глюконутый DevCPP из за такого тебе ТАКИЕ сказочные результаты покажет, что и во сне такого не приснитца
//-> fprintf(f2,"%c",c2); сделаем замену
fprintf(f2,"%c",*(buffer2+i));
}
fclose(f2); //закриваємо 2-й файл
return;
}
void vuvid(char *buffer1,int t) //функція виводить перевернутий масив на екран
{
for(int i=1;i<=t;i++) //цикл виводить перевернутий масив
{
cout << buffer1[t-i]; //перекидуємо масив
}
cout << endl;
}
main(void)
{
// textbackground (WHITE);
// textcolor (BLACK);
FILE *f1,*f2; //декларація вказівників на 1-й та 2-й файли
int c2; //змінна 2-го файла
int t=0; //визначимо розмір 1-го файла
int d=1;
//-> ТЫ Ж ФАЙЛЫ НЕ ОТКРЫЛ!!!! ЕТО НЕ КОРРЕКТНО, потому что они итак не открыты.... т.е. будут возвращать true всегда
if ((f1!=NULL)&&(f2!=NULL)) //якщо файли дійсно відкриті то виконуємо операції над ними
{
//-> char buffer1[t]; //створюмо буферний масив
char buffer1[1000];
//-> Мать родная... шо ты тут натворил??? Ты создаешь масив на ноль елементов?! Просто железная логика.... проснись и пой!
//-> Достаточно обойтись одним буфером
//-> char buffer2[t]; //створюємо масив в який скопіюємо даний
//-> нафиг не надо второй буфер!
//-> Ты ж уже t обнулял....
t = 0;
//-> А нафига его обнулять если в него возвратишь результат???
t=cilkist(t,buffer1,f1); //виклик функції котра читає і виводить кількість елементів 1-го файлу
vuvid(buffer1,t); //виклик функції виводу перевернутого масиву в методі main
//-> zapus(f2,c2,buffer2,t); собственно, а что ща храниться в buffer2?? по моему - там ничего нету....
zapus(f2,c2,buffer1,t); //виклик функції запису в методі main
}
//-> А нафига??? это не в ту сторону ты же файл закрыл же... в cilkist() ))
//-> fflush(f1); //очищуємо вміст внутрішнього буфера звязаного
system("PAUSE");
return 0;
}
//-> ВЫВОДЫ: програма написана через хитро закрученую жопу, работает еще хуже. Результаты выводит правильные.
//-> когда начал читать - я чесно перепугался, думал не пойму твоей идеи...
//-> Если чесно, тут много лишнего и не совсем правильного - можно было бы по проще....
//-> "За бутылкой пива, что пишу и сам не понимаю..."
//-> Тут в этой проге три метода должно быть кроме main
//-> 1) Узнать сколько символов в IN файле
//-> 2) выделить память в масиве под файл и считать в него IN файл
//-> 3) Записать на оборот в OUT файл
//-> З.Ы. Возможно сущевствование других критических ошибок которые может заметить Ефименко...
//-> Затраченое время 30 мин.
//-> 011711052011 Горбаченко В.А.
//->
[b] лаб 4 Для заданої послідовності символів латинськими літерами визначити нову послідовність в якій будуть виведені слова з великої букви до крапки. [/b]
#include <stdio.h> //бібліотека високоорівневого потокоорієнтованого буферизованого введення/виведення даних
#include <conio.c> //бібліотека опрацьовує інтерфейс екрану
#include <string.h> //бібліотека для роботи з ділянками оперативної пам’яті і символьними рядками
void MASUV(char *masuv, int t) //функція виводить елементи масиву
{
char c; //символьна змінна яка буде виводитись на екран
for(int k=0;k<t;k++) //цикл проходить по масиву arr
{
if(((*(masuv+k)==' ')&&(*(masuv+k+1)>='a')&&(*(masuv+k+1)<='z'))) //якщо к=й символ "_" а к+1-й сивол мала буква то робимо її великою буквою
{
c=*(masuv+k+1)+'A'-'a'; //міняємо малу букву на велику букву
printf("%c",c); //виводимо на екран
}
else //інакше якщо буква в середині слова то залишаємо її
{
c=*(masuv+k+1);
printf("%c",c);
}
}
}
int ved(char *masuv, int p) //метод вводить з клавіатури елементи масиву і перевіряє правиьність латинських літер
{
char sum;
while ((sum = getchar()) != '.') //введення з клавіатури
{
*(masuv+p)=sum; ////вказівник на масив
p++; //втсановлюю розмірність масиву arr
}
*(masuv+p)='\0'; //останній елемент рядка =\0
for(int k=0;k<p;k++) //цикл перевірки правильності символів
{
if (((*(masuv+k)>='a')&&(*(masuv+k)<='z'))||((*(masuv+k)>='A')&&(*(masuv+k)<='Z'))||(*(masuv+k)==' '))//перевіряю правильність латинських символів
{
printf("\n%s",masuv); //виводжу всі символи до "."
}
else
{
p=0;
printf("vvedit rechenna");
}
break; //умова виходу з циклу
}
return p;
}
int main (void)
{
textbackground (WHITE);
textcolor (BLACK);
system("CLS");
int klava;
printf("vvedit latunski slova\n");
char arr[80]; //встановлюмо будь яку розмірність масиву
do
{
strcpy(arr," ");
char sum; //символ чарівського типу
int p=0; //перший елемент = 0
p=ved(arr,p);
if (p!=0) //ознака заповненості масиву
{
printf("\n");
char c; //змінна с визначає символи до крапки
if (*arr>='a' && *arr <='z') //якщо перший символ мала латинська літера
{
c=*arr+'A'-'a'; //то робимо його великою латинською літерою
printf("%c",c); // і виводимо його
}
else //інакше
{
c=*arr; //виводомо власне великий символ
printf("%c",c);
}
MASUV (arr,p);
}
fflush(stdin); //очищує буфер клавіатури
printf("\n Dla vuhody natusnit ESK\n");
printf("vvedit latunski slova\n");
klava = getch ();
}
while (klava !=27); //умова виходу з програми
system ("PAUSE");//ВИКОНУЄ ЗАТРИМКУ ДЛЯ ВІКНА
return 0;//ПОВЕРТАЄ ЗНАЧЕННЯ
:D :D :D :D :D :D :D :D :D :D :D :D :D :D
}
Повернутись до Питання по домашці
Зараз переглядають цей форум: Немає зареєстрованих користувачів і 1 гість