Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Case ' + ' почему не работает? у меня вопрос меньше,чем описание ) 
:(
    Опции темы
egorletov
  Дата 28.2.2006, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 9.2.2006

Репутация: нет
Всего: нет



(11.00+i*5.00) + (11.00+i*5.00) исходный файл (несколько комплексных чисел )


почему не работает такая фенька ? Case ' + ' ? хочется что бы он различал + перед числом или перед скобкой , для етого я их хочу различть .. '+' и ' + ' ..
Почему ето не рабоает, если так нельзя то подскажите как можно


ето в майне
Код

for(int bo=0; bo<(str.size()); bo++){
        
        switch(str[bo]){
            case ' + ':
                cout<<"beeeeeeeeeeeeeeeee"<<endl;
                sa.sum(y,&imm[1],&ree[1]);
                flag=1;
                break;
             default:
                temp+=str[bo];
                break;
 
        }







са.сумм
Код

double Double_Complex::sum(int &kol,double im[1],double re[1])
{

    char zna='+';
char ii='i';
char mu='*';

int r=0;
int e=0;
int g=0;
int ti=0;
int w=1;
int log=0;

double Real[50];
double Imaginer[50];
Imaginer[r]=0.0;
Real[r]=0.0;
indif(g,&re[0],&im[0]);
//cout<<"\n"<<"kolitestvo kompleksnix tisel = "<<g<<"\n"<<endl;
     
do{

        Real[ti]=Real[ti]+re[e];
        cout<<e<<")"<<Real[ti]<<zna<<ii<<mu<<Imaginer[ti]<<endl;
        Imaginer[ti]=Imaginer[ti]+im[e];
 e++;
 }
 while (e!=g-1);
 cout<<r<<"\n Symma = "<<Real[ti]<<zna<<ii<<mu<<Imaginer[ti]<<endl ;


                    return Real[ti],Imaginer[ti];

}




са.индиф

Код

double Double_Complex::indif(int &kol,double operand_1[1],double operand_2[1])
{
    ifstream f;
    f.open("file.txt");

    if(!f){
        cout<<"Error 1:open input file,imposseble"<<endl;
        exit(1);
    }
    

char    sk1,sk2,znak,i, mul;
int      g=0;
    do{
    
f>>sk1>>operand_1[g]>>znak>>i>>mul>>operand_2[g]>>sk2;

//if (znak!='+')
//cout<<("Kompleksnoe thislo izmenino pod tip: a+i*b, !")<<endl;
//if(znak=='-')
  //  znak='+';

//cout<<g<<")"<<operand_1[g]<<znak<<i<<mul<<operand_2[g]<<endl  ;
g++;
} 
    while(!( f.eof()));
kol=g;
return kol,operand_1[g],operand_2[g];
}


PM MAIL   Вверх
Daevaorn
Дата 28.2.2006, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



egorletov, если '+' это ещё символ, то ' + ' уже строка, которая в операторе case не может работать
PM MAIL WWW   Вверх
Void
Дата 28.2.2006, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



egorletov, сам посуди, ты делаешь switch по одному символу, а хочешь распознавать последовательность из нескольких.
Кроме того, ' + ' — это совсем не то, что ты думаешь. Это не строка, а целочисленная константа.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
sergejzr
Дата 28.2.2006, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Потому что switch case работают только для целых чисел. (char - одна из их разновидностей)
Происходит прямое вырешивание адреса.
В твоих обрывках кода не разберёшься кстати.
И что тебе нужно тоже непонятно. При чём там пробелы?


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Void
Дата 28.2.2006, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



+, как правильно заметил Daevaorn, строки в switch участвовать не могут.

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

Это я к предыдщему своему сообщению подклеить хотел smile

Это сообщение отредактировал(а) Void - 28.2.2006, 20:21


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
egorletov
Дата 28.2.2006, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 9.2.2006

Репутация: нет
Всего: нет



тут в чем вопрос .. насчёт пробелов , я подозревал что _+_ ето уже строка , поету спросил,правдо кривавато ))

а как мне сделать так что , когда он идёт по страке он делал что такое

...

case '+' :
//symiry (zapusk metoda classa)
break;

case'-':
//vititay
break;

case'*':
//ymnozay

ny i t.d

но проблема в том что у меня в строке урав-ие из комплексных чисел, поетому там есть т.называемые ненужные знаки + и * ... как ето обойти..?



PM MAIL   Вверх
sergejzr
Дата 28.2.2006, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Запоминать, что было до знака. и потму ориентироваться. Только напрямую действия выполнять всё равно не получится, там же ещё скобки есть и прядок умножение/сложение надо соблюдать итд.

тебе нужен стек куда будешь складывать выражения, которые не можешь сразу решить. Вообще я бы сперва сделал класс для комплексного числа и с ним бы работал. Гдето эту тему уже проходили..
Добавлено @ 20:36
http://forum.vingrad.ru/index.php?act=ST&a...=74234&st=0


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
egorletov
  Дата 1.3.2006, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 9.2.2006

Репутация: нет
Всего: нет



sergej.z, да я тот топик излазил с ног до головы , но чаго там всё раскидано .. Если тот человек который поднимал форум , выложил бы что то скомпанованое.Но он что-то утих...
..
..
..
Про СКОБки-


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



Цитата

В твоих обрывках кода не разберёшься кстати.



Код

//Main.cpp

#include <iostream>

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include "Complex.h"

#include <fstream>
using namespace std;

ifstream f;
Double_Complex sa;
main ()
{

   f.open("file.txt");
double ima[50];
double rea[50];
int h=50;
int t=1;
int y=1;
double imm[50];
double ree[50];

sa.indif(t,&ima[1],&rea[1]);

string str="";
string temp="";
f >>str;
bool flag=0;

for(int bo=0; bo<(str.size()); bo++){
        //cout<<"i hate this fucking world"<<endl;
        switch(str[bo]){
            case '+':
                cout<<str.size()<<endl;
                sa.sum(y,&imm[1],&ree[1]);
                flag=1;
                break;
                                    case '-':
                cout<<str.size()<<endl;
                sa.vit(y,&imm[1],&ree[1]);
                flag=1;
                break;
             default:
                temp+=str[bo];
                break;
 
        }

} 


cout<<"fgh "<<endl;

getch();





Код

//complex.cpp
#include <math.h>
#include "Complex.h"
#include <conio.h>
#include <string>
#include <vector>
#include <fstream>
using namespace std;


 
double Double_Complex::indif(int &kol,double operand_1[1],double operand_2[1])
{
    ifstream f;
    f.open("file.txt");

    if(!f){
        cout<<"Error 1:open input file,imposseble"<<endl;
        exit(1);
    }
    

char  znak,i, mul,sk1,sk2;
int      g=0;
    do{
    
f>>sk1>>operand_1[g]>>znak>>i>>mul>>operand_2[g]>>sk2;

//if (znak!='+')
//cout<<("Kompleksnoe thislo izmenino pod tip: a+i*b, !")<<endl;
//if(znak=='-')
  //  znak='+';

//cout<<g<<")"<<operand_1[g]<<znak<<i<<mul<<operand_2[g]<<endl  ;
g++;
} 
    while(!( f.eof()));
kol=g;
return kol,operand_1[g],operand_2[g];
}



double Double_Complex::sum(int &kol,double im[1],double re[1])
{

    char zna='+';
char ii='i';
char mu='*';

int r=0;
int e=0;
int g=0;
int ti=0;
int w=1;
int log=0;

double Real[50];
double Imaginer[50];
Imaginer[r]=0.0;
Real[r]=0.0;
indif(g,&re[0],&im[0]);
//cout<<"\n"<<"kolitestvo kompleksnix tisel = "<<g<<"\n"<<endl;
     
do{

        Real[ti]=Real[ti]+re[e];
        cout<<e<<")"<<Real[ti]<<zna<<ii<<mu<<Imaginer[ti]<<endl;
        Imaginer[ti]=Imaginer[ti]+im[e];
 e++;
 }
 while (e!=g-1);
 cout<<r<<"\n Symma = "<<Real[ti]<<zna<<ii<<mu<<Imaginer[ti]<<endl ;


                    return Real[ti],Imaginer[ti];

}


double Double_Complex::vit(int &kol,double im[1],double re[1])
{

    char zna='+';
char ii='i';
char mu='*';

int r=0;
int e=0;
int g=0;
int ti=0;
int w=1;
int log=0;

double Real[50];
double Imaginer[50];
Imaginer[r]=0.0;
Real[r]=0.0;
indif(g,&re[0],&im[0]);
//cout<<"\n"<<"kolitestvo kompleksnix tisel = "<<g<<"\n"<<endl;
     
do{

        Real[ti]=Real[ti]-re[e];
        cout<<e<<")"<<Real[ti]<<zna<<ii<<mu<<Imaginer[ti]<<endl;
        Imaginer[ti]=Imaginer[ti]-im[e];
 e++;
 }
 while (e!=g-1);
 cout<<r<<"\n Symma = "<<Real[ti]<<zna<<ii<<mu<<Imaginer[ti]<<endl ;


                    return Real[ti],Imaginer[ti];

}



Код

//complex.h
#ifndef __Complex_H
#define __Complex_H

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

#include <fstream>
using namespace std;

class Double_Complex
{
private: 
     
      double Im;
      double Re;
public:
double Double_Complex::indif(int &kol,double operand_1[50],double operand_2[50]);
double Double_Complex::sum(int &kol,double im[1],double re[1]);
double Double_Complex::vit(int &kol,double im[1],double re[1]);
   
 
};


#endif



file.txt:




(11.20+i*5.00)+(141.40+i*5.00)-(11.00+i*5.00)+(12.00+i*8.00)+(11.00+i*5.00)-(123.00+i*5.00)



ну вот, в моих снах она дложна сумировть потов вычетать . далее опеть прибавлять приба ну и т.д.

в чём Ошибка кода?

Это сообщение отредактировал(а) egorletov - 1.3.2006, 12:58
PM MAIL   Вверх
Lotrex
Дата 3.3.2006, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 9.2.2006
Где: Казань

Репутация: 2
Всего: 3



Цитата(egorletov @ 28.2.2006, 19:44 Найти цитируемый пост)
(11.00+i*5.00) + (11.00+i*5.00) исходный файл (несколько комплексных чисел )

Имхо, Вам тут выражения в скобках надо выделять, опосля то, что в скобках - преобразовывать в комплексное число (класс complex). А дальше - уж те знаки анализируйте, что между скобок.
PM MAIL ICQ   Вверх
egorletov
Дата 4.3.2006, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 9.2.2006

Репутация: нет
Всего: нет



Lotrex, smile smile

Понимаешь, у меня проблема с написание (компиляцией) реализации задумки , так что если тебе не сложно приведи пример кода , как ето реализовать , желательно что бы его можно вписать в мой класс. что бы можно было протетстировать , и понять как ето работает .


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0539 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.