Vídeo recomendado
https://youtu.be/diWPPPhW-9E

tentando aprende C para fazer DLL's para o excel

Fórum para dúvidas gerais sobre programação Web
Edcronos
Manda bem
Manda bem
Mensagens: 122
Registrado em: Qua Abr 02, 2014 2:23 am

Re: tentando aprende C para fazer DLL's para o excel

Mensagem por Edcronos »

hum,
sobre o goto, ele não vai para qualquer lugar e nem em qualquer momento
o primeiro goto pula o primerio loop "sai" e tambem pula o segundo goto e a definição que vem após conclusão do loop
o segundo goto sai dos loops internos mas tbm pula a definição que tem no termino dos loops

é possivel fazer a mesma coisa sem o goto?
sim é,
mas em que isso me facilitaria ou deixaria o codigo mais simples ?
o goto por si só vai causar problemas ?
ou a forma que eu escrever a macro é que pode causar os problemas ?

eu já peguntei em outros foruns, a respeito da substituição do goto nesse aspecto
posiveis soluções :
encadear if´s para saber se atende ao requisito e colocar saidas dos if´s de loop em sequencia, não vejo como isso iria tornar a sequencia mais facil de entender ou menos propensa a erros

usar Do loop no lugar do for next, nunca lembro qual usar ou como funciona :?
claro que com o uso constante eu ia assimilar
mas eu tenho macro que tenho que pular varios loops em cascata e varios if´s , mas, não pular todos e sim vai para um em especifico
em um caso desse, não usar o goto vai me "facilitar" em que?

se vc visse uma macro que tenho que o fluxo é controlado por Gosub´s vc ia ficar maluco e me xingar muito
a verdade é que oq eu faço é escrever de acordo com minha logica que por si só já é confusa.

para falar a verdade essa é uma discussão infrutífera


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Edcronos
Manda bem
Manda bem
Mensagens: 122
Registrado em: Qua Abr 02, 2014 2:23 am

Re: tentando aprende C para fazer DLL's para o excel

Mensagem por Edcronos »

estava aqui tentando entender sobre as ferramentas de programação
me deparei com o WXDEV C++ que com alguns plugins que podem ser automaticamente instalados deixa tudo mais facil
até mesmo a criação de interfaces como combobox, chekbox, grid, entre outras coisas tão facil de criar quanto os form do VBA
e ainda tem vastos exemplos de como usar e dicas em BR´,
sem falar que os exemplos são fáceis de entender e reproduzir

mas infelizmente parece que o projeto foi abandonado a alguns anos e as bibliotecas estão desatualizadas e muitas entram em conflito fazendo a ide dar pane do nada e ter que reinstalar
o codeblokcs tem uma interface parecida, mas não achei nada facil

procurando algo tão facil quanto o wxdev eu me deparei com paginar de plugins gratuitos e até com projetos bem sofisticados

mas a falta de saber inglês realmente prejudica, e nem consegui saber se é algo gratuito ou não, li algo sobre licença de codigo aberto mas nem tenho certeza
e e nem descobri como usar nas ide


Edcronos
Manda bem
Manda bem
Mensagens: 122
Registrado em: Qua Abr 02, 2014 2:23 am

Re: tentando aprende C para fazer DLL's para o excel

Mensagem por Edcronos »

Realmente a linguagem é um desafio
até para declarar variáveis string e comparar duas letras é uma luta

tem muitas bibliotecas para usar,
mas cara, a tipagem da liguagem mata

dentro de um "if" que já é um comando de comparação, é obrigado a colocar == que compara
if(a==b){b=c;}
basicamente o if está de enfeite (a==b){b=c;}

tem que se preocupar se escreveu c ou C como variavel
poderia ter um mecanismo para escolher palavras unicas e ficar igual ao vba que

o pessoal reclama que goto dificulta entender o codigo
mas codigo cheio de
if( a==b && c<g || h !=j){for(A=10;B<=G||C!=b;A++){...} }
dá um nó

a ide não grava oq é função e oq é matriz
para função é () e matriz[]

existe muitas bibliotecas para o mesmo uso oq acaba confundindo
e e para usar tem que colocar :: em tudo sem falar que não são nada simbolicas, é Atoi, atol ... para transformar variaveis string de numeros em variaveis numericas
como não entendi nada eu fui fazer minha propria função de conversão para aproveitar e aprender,
tentando escrever meu primeiro codigo em C ou sei la C++ acho que é C++, ainda não peguei a diferença

Código: Selecionar todos

const char Arnut[]="0123456789-.,";


double convertNUM(unsigned  char StrNum[])
  {
     double valorX = 0;
     int n = 0, L2 = 0, L,C;
     for ( L=0; StrNum[L] !='\0' ; L++)
        {
            for (C=0;C <= 12; C++)
                {
                    if (StrNum[L] == Arnut[C])
                    {
                        n = n + 1;
                        if (n == 1){ L2 = L;}
                        if (C < 10) {valorX = valorX * 10 + C;}
                        goto prxL;
                    }
                        if (n > 0)
                        {
                            if (L2>0){if(StrNum[L2-1] == Arnut[10]) {valorX = -valorX;}}
                            return valorX;
                        }
                }
                        prxL:;
        }
                            return 0;
  }
dei de cara em outro muro
declaração e uso de strings
mas uma ide acusa diretorio inexistente e outra acusa erro já no cabeçalho de bibliotecas
sinceramente, depois que aprender vai ser pior que o vba que eu crio minhas proprias funçõe, sendo que vou ter que ter função até para left(xxx,n) e rigth(xxx,n) e muitos mais que uso muito
por enquanto estou na luta livre contra as IDE, e o pior PERDENDO :(

pronto, desabafei


sabe oq é interessante nisso
quanto postei o codigo para saber oq estava errado, somente me falaram, tira o Goto, e me explica oq isso faz
Em um monte de (==){X[]=;} uma pessoa experiente só enxergou o GOTO
com vba aconteceu a mesma coisa, eu postei uma macro totalmente funcional e que uso até hoje que inverte arrays

Código: Selecionar todos

Sub Espelhar(ByRef ArrayNome As Variant, ByVal C_ou1__L_ou2 As Variant, Optional ByVal Nun_C_L As Long)
    Dim L As Long, C As Long, x As Long, Pia As Long, Pfa As Long
    Dim Ar2() As Variant
    Pia = LBound(ArrayNome, 2) + 2: Pfa = UBound(ArrayNome, 2)
    lia = LBound(ArrayNome, 1): lfa = UBound(ArrayNome, 1)
    x = 0
    Ar2 = ArrayNome
    If C_ou1__L_ou2 = "c" Then C_ou1__L_ou2 = 1
    If C_ou1__L_ou2 = "l" Then C_ou1__L_ou2 = 2
    If Nun_C_L = 0 Then

        If C_ou1__L_ou2 = 1 Then    '-------( ColunaS )
            For L = lia To lfa    'Step 3
                x = 0
                For C = Pia To Pfa
                    ArrayNome(L, C) = Ar2(L, Pfa - x)
                    x = x + 1: Next: Next
        End If

        If C_ou1__L_ou2 = 2 Then    '--( LinhaS )
            For L = lia To lfa
                For C = Pia To Pfa
                    ArrayNome(L, C) = Ar2(lfa - x, C)
                Next: x = x + 1: Next
        End If

    Else    '------------(   Linha ou coluna especifica    )
        If C_ou1__L_ou2 = 1 Then
            For L = lia To lfa
                ArrayNome(L, Nun_C_L) = Ar2(lfa - x, Nun_C_L)
                x = x + 1: Next
        End If
        If C_ou1__L_ou2 = 2 Then
            For C = Pia To Pfa
                ArrayNome(Nun_C_L, C) = Ar2(Nun_C_L, Pfa - x)
                x = x + 1: Next
        End If
    End If
End Sub
nessa não tem goto, para mim era mais facil de entender com o goto


Edcronos
Manda bem
Manda bem
Mensagens: 122
Registrado em: Qua Abr 02, 2014 2:23 am

Re: tentando aprende C para fazer DLL's para o excel

Mensagem por Edcronos »

isso é um troço de maluco mesmo

as ide tetam abraçar o mundo, é c, c++, java, e sei la mais oq
vc ecolhe C++ na hora de criar um projeto e e imagina que a ide vai gravar com a extensão correta
mas aí vc lunta para sabe o pq oq vc faz não funciona
só que em vez da ide salvar como .CPP salva como .C, só que para um leigo e olhando tantas possibilidades de salvamento pensa que está correto

na hora de escrever o codigo é prestar atenção se colocou Cb ou cb, não pode faltar um ";"
quando "olha" os montes de { } () [ ],
para saber se fechou as chaves do primeiro ou segundo if ou de um for, tem que ficar colocando o cursor em cima de cada chave,

eu não tenho olho bionico para olhar e sabe em que fechadura está a chave com tantas juntas

"conclusão se passa mais tempo corrigindo os erros do que programando "

é biblioteca disso e daquilo, mas para comparar duas letras não é uma simples luta, é uma guerra sangrenta

agora imagina a situação
vc declara um ponteiro *aponte=variavel "mesma coisa que Byref , ou setar Set aa=bb"

mas a logica seria que
se vc está apontando uma variavel para outra variavel, oq vc quer é o valor que está dentro da outra variavel ou manipular o valor
então seria
A=1
int *B=a
B=2
portanto A agora tem 2
mas não,
para usar o valor de " A" usando B tem que colocar a porcaria do * em cada B
por que a ide não pode lembrar que a porcaria do B vai para o "A" e quando fizesse isso *B=C é pq estou associando B a C?

AÍ ,um trexo desse meu codigo quesem o gosub seria tudo por referencia

Código: Selecionar todos

 If Oquadante_L = True Then GoSub OCoL: If t = 1 Then OLf = OLf + OqL: OLi = OLi + OqL: t = 0: Loi = Loi + OqL
                Lig = Lig *-1 : Loi = Loi + Lig
teria que ficar assim

Código: Selecionar todos

 If( *Oquadante_L == True) {
********;
    If (*t = 1)
    {  
       *OLf = *OLf + *OqL; *OLi = *OLi + *OqL; *t = 0; *Loi = *Loi + *OqL;
    }
}
                *Lig = *Lig * -1; *Loi = *Loi + *Lig;
para esse gosub seria um punhado de ********, pq como uma função chama outra e passa as variaveis que tbm pegou por referencia para a outra, imagina a sopa de estrelinhas

e o pessoal fala de vícios de programação
mas cara, oq é pior, 2 goto ,2 gosub ou um monte de ******** ???

se existe um portal que me leva para outra galaxia e me traz de volta,
pq afinal eu vou ficar navegando no meio das estrelinhas, e pior, contando para saber se não faltou nenhuma ou sobrou?

mudar meus programa? mudar a forma como eu raciocino ? pagar para outros fazer ?

acho que quando se está desenvolvendo uma aplicação vc imagina a estrutura e a logica de funcionamento
mas os programadores profissionais acham que vc tem que imaginar quantos ";" ( ) {} [] ******** vai ter tbm

é uma tradição de décadas que o pessoal tem medo de mudar
mas eu afirmo, a interface de programação é BURRA

Código: Selecionar todos

if a=b and c=f then
       c=a
       b=f
end if
If por sí só é um fator de comparação, então tudo entre iF e Then está sendo comparado

no C/C**

Código: Selecionar todos

if(a== && c==f) { 
    c=a;
    b=f;
}
o interpretador precisa do == para saber que é uma comparação e não uma inclusão
e se deu "Enter" por que precisa de ";" para saber que são 2 comando separados ????

fora que é visualmente dificil de analisar

quem planejou a tipagem da liguagem se preocupou mais na facilidade de fazer o interpretador do que na facilidade de uso,
parece até meu interpretador de formulas

mesmo por que, seres humanos não são maquinas "podem ser consideradas maquinas biologicas, mas com muitas limitações, umas mais, outras menos"

e nisso tudo, o pessoal fica preocupado se existe um goto :shock: como se as porcarias dos loop não fossem gotos "jump"


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder