C言語なら俺に聞け 144
■ このスレッドは過去ログ倉庫に格納されています
エラーが起きても仕方ないものとするとか
初心者向けでも考え方が間違ってる エラーが起きないことを想定するとどんな書き方なんですか? >>600
50メートル歩くプログラムで、こけても起き上がらず、足を動かして歩こうとするみたいな。 >>593
今すぐ見るのをやめるべき
って言うぐらいひどい
そもそも今時のコンパイラ使ってたら警告でるだろうに >>588ですけど、参考書は>>592の文になってました。ネットの方は間違ってるみたいですね。 >苦しんで覚えるC言語(苦C)は、初心者を対象としたC言語入門サイトです。
>C言語の基本機能を体系立てて解説しており、市販書籍と同等以上の完成度です。
去年サイトリニューアルするまでは、項目はあるのにページが無いのとか結構あったし、完成してないのにこれで市販書籍以上の完成度とかよく書けるなw >>607
運営者本人が初学者だから苦しんでるんだろうなw >>604
ネット上には当てにならない情報が溢れているから、ある程度自分で判断できるレベルになるまではちゃんとした書籍で勉強した方がいいよ 体で覚えるしかないな
なんて、コンパイラにバグがあって変な風に覚えちゃったりしてw よくあるのが非標準拡張機能に騙されて
それが標準と思い込んでしまうことだ 最近の書籍はあてにならない
著者も編集もレベル落ちてる void * の変数に1を足しているのを見た時は驚きました。 メモリのハード的な最小単位へのポインタは欲しかった そういえば昔1/2ビットシフトなんてテクニックがあったな 1.5ストップビットみたいな 立ってるビットの総和で1シフトする/しないとかの条件付きかと思ったけど
ふと 2で割る演算を 右へ算術シフトする話のほうっぽい ラプラス変換(からZ変換した)後に、やっとCのコーディングの話になるので
どこか余所できいたほうがいい 数学ですかね…
他に当たります。ありがとうございます。 >>623
数値微分の考え方をまず理解して、さらに三角関数の微分と、極限を理解しないといけない。大学数学だよ。 元が消えてるからよく分からんけど、>>627の内容って高校数学の内容じゃないの? https://i.imgur.com/yXsENPk.jpg
https://i.imgur.com/LhIHXaC.jpg
こちらになります。
一応これをC言語でやれというものなので、よろしくお願いします。
解き方の方針だけでも、、、
θをラプラス変換後、伝達関数と掛け合わせてから、逆ラプラス変換をするのかと思いましたが、そんなこと計算できませんでした。
よろしくお願いします。 流石にラプラス変換をC言語でやれという問題じゃないと思う(´・ω・`)
手計算で(6)式に対する出力信号(tの関数)をωcを含む形で導いてから、適当な値を変数omagacにセットして出力信号を数値計算するのでは...? 手計算で、θをラプラス変換して、10式と掛け合わせて、ラプラス逆変換までするのかな?
それができたら、できそうだけど、、、
計算できるかな >>629
積分器の部分が面倒くさいな
単純に時間刻み値一段だけ遅延させてみたけどうまくcos波形にならない
何段遅延させればうまくいくかよく分からない
とりあえず方針としては、ブロック図を単純に差分方程式に落とし込んでやれば回答には辿り着けるはず
1/sの部分が積分器だから入力を適当に遅延させて出力させてやればいい
ラプラス変換云々は理論的な理解には大切だけど、プログラム的には最終的に差分方程式(数学的には微分方程式)の形に落とし込んでしまえばいいよ
もうここまでにして途中のソースだけ挙げておく
https://ideone.com/69YxIz ごめん、俺が知ってるやり方も部分分数分解だった。
でも手順に従うだけじゃ...?
http://lab.cntl.kyutech.ac.jp/~nishida/lecture/MathOfCntl/no5.pdf >>634
伝達関数の使い方が、その方法じゃ分からないです…
勉強不足です。
>>635
θをラプラス変換したものを伝達関数と掛け合わせてから、逆ラプラス変換した結果がこうなりました。
T=ω/(ω^2+1)
P=0.1/ω^2+1000^2
と適当な文字において、
θ(t)'=T(-cos(t)+ωsin(t)+e^(-ωt))+
P(-cos(t)+ωsin(1000^(2)×t)/1000^(2)+e^(-ωt))
となりました。
これをtを0.001秒毎に、0〜10まで出していけばいいんですよね?
自分でやってみたんですけど、tが0.001秒毎に変わっていかなくて途方にくれてます。
多分簡単なことなんで、コードをお願いします。 int main()
{
int a;
a=1;
sumNum(&a);
printf("%d\n",a);//13
char str;
sumStr(&str);
printf("%c\n",str);//□
}
void sumStr(char* str){
*str ="a";
}
int sumNum(int * num){
*num=*num+12;
return 0;
}
なぜ変数strの出力が"a"と表示されないのですか? "a"は{'a', '\0'}へのポインタ
'a'は文字のa "a"はポインタじゃないぞ
printf("%u", sizeof "a"); //2
const char *p;
p = &"a"; //ill-formed
p = &"a"[0]; //well-formed
'a'はint型の0x41もしくは0xc1だ >>643
eclipseは出ない
どのIDE使えば書きやすいのかそれも教えてくれないか >>644
仮に文字列リテラルの式の値の型がポインタじゃないとして、それらが何故その根拠になるのか分かりません(>_<) >>648
文字列リテラルは定数なのでそれは分かります(>_<) char a[] = "A";
a+1 セーフ
a++ これも文法エラー ポインタならばこれは通るけど、配列では無理 ポインタ変数にリテラルを代入した場合は...?(>_<) >>646
面倒くせえやつだな
const char *p;
printf("%u", sizeof p); //4
const char (*q)[2];
q = &"a"; //well-formed
q = &a[0]; //ill-formed >>648
syntax errorじゃない
semantics errorだ >>649
定数だからエラーなのではない
char s[2]; //non-constant array
s++; //ill-formed >>654
これは分かりました(>_<)
配列の変数はポインタと同じようで違うんですね(>_<) >>640
void sumStr(char* str){
*str ="a";
}
これ、strはcherのポインタでありその指す先はchar型だ。
"a"は 'a', '\0' と並んで入っている先を指すポインタだ。
*str は char 型で、"a" は char * 型だ。型が違う。
これが例えば *str = 'a'; だったり、あるいは *str = *"a"; だったりすれば型も一致するし目的の値の代入に成功するだろう。
(まあしかし普通は *str = *"a"; なんて書き方しないけどな)。 詳説 Cポインタ、2013、オライリー・ジャパン
ポインタの仕様だけで、本が1冊書けるw
どんなに面倒くさい言語やねんw >>659
そんなにネタはないと思うが、いったいどんな本なんだろう? ポインタ・文字列を、図解して説明している
"abc" なら、"abc\0" みたいに4バイトになるとか >>645
書きやすいかどうかは分からないが、VisualStudioだとこんな感じで警告どころかエラーでビルドに失敗する(C++プログラムとしてだけど)
正確にはビルドするまでもなく、コーディング段階で赤色の波下線で警告表示されるのでそれ以前に問題に気付く
https://i.imgur.com/6MLycv2.png >>662
VisualStudioはエディタやデバッガが滅茶苦茶優秀
コンパイラがウンチだけど、それさえ許容できればVisualStudio一択 これからC言語始めます自分で色々と調べたけっかこの2つが残りました
どちらがいいでしょうか?アドバイス下さい。それやめとけなんて話もあればお聞かせ下さい
1,「C言語プログラミング」(ハーベイ・M. ダイテル/ポール・J. ダイテル 、ピアソン)
2,プログラミング言語C 第2版 ANSI規格準拠 B.W. カーニハン (著),? D.M. リッチー 巨匠の柴田望洋・林 晴比古とか、
「猫でもわかるC言語プログラミング 第3版」粂井(くめい)康孝、2013
古い本だと、例題の開発環境が古いから、動かせないだろ
「c言語 入門書 おすすめ」で検索! >>666
新しいことを学ぶときは
・バイブル的な本(K&R第2版)
・初心者向け
の組み合わせで。
片方だけではダメ。 ちょっと教えてくらさい。
最近Cを書くことが多くなったんですけど
#include <Includes/General.h>
#include "Includes/General.h"
これって、本来の動作的に厳密には何か違いがあるんですか? >>671
#include <> はコンパイル環境指定のインクルードディレクトリから探索
#include "" はインクルードしたファイルのあるローカルディレクトリを先に探索してから環境のインクルードディレクトリを探索
つまり自分で今作ってるプログラムのヘッダファイルは#include ""を使わないと他人の同名のファイルをインクルードするかも知れない。 >>672-673
そういう事ですか、なるほど。
詳しくありがとうございました。勉強になりました。 本当はコーディングルールから学ぶと良いが書ける人はとても忙しいので本がない。 >>666
1は知らんけど2は絶対に読んだほうが良い本だと思うよ。 いくら本読んでも本に頼ってるうちは初心者
書いて書いて書きまくってエラー出しまくって経験積め >>678
なんでもそうだと思うが、
悩んで解決した分 だ け が自らの糧となる。 >>168
このセリフは10年前にも言えたことだな 初心者です。参考書を読んで勉強していたのですが
「浮動小数点数の利点は、一定の有効桁数(精度)の範囲内で、小さな数から大きな数まで表現できることです」(分かりやすいC入門編:川場隆)
とあったのですが、どういう意味か分かりま出んでした。
ネットで調べても同じようなことしか書いてなくて。浮動小数点数の利点を教えてください。 >>685
123,000,000,000=123×10^9
右辺の方がコンパクトだろ? >>685
利点とは、何かよりも優れている点であることは解っているか?
浮動小数点と何を比較するのかで答えは違ってくるぞ
整数か? それとも固定小数点か? >>686
というと?
>>687
では、数字が少数になったらどうなんでしょうか?
例えば12469125478.945→1.2469125478945×10^10。これでコンパクトになっていると言えるのでしょうか?
>>688
すいません。固定小数点数と比べて、です。 間違えた
0.000000000123 = 1.23e-10 二進数32ビットで123,000,000,000は表せないけど、
32ビットを符号部、指数部、仮数部に分けると表現できる。
有効桁数は仮数部のビット数で決まる。 例えば、8ビットなら、2^8 通り、0〜255 しか表現できない
それを5ビットにして、残りの3ビットを桁をずらす機能にすると、
2^5 通り、0〜31 しか表現できないけど、
残りの3ビットで、0〜7 を表現できるので、それをずらす桁とすると、
7桁ずらせば、310,000,000 を表現できる
だから精度は減ったけど、桁をずらせるようになったから、
非常に小さな数や、大きな数を表現できる
桁をずらす部分は、指数部という。
実際には、10進数ではなく、2進数でずらしていく 初心者質問おねがいします。
二つのunsigned char型があり、
一つ目が 0b10001000 で、
二つ目が 0b01110111 です。
これを合わせて 0b10001000 となる計算式はどうすればいいですか?
よろしくおねがいします。 >>695
希望の結果が1つ目の値そのままのように見えるが ■ このスレッドは過去ログ倉庫に格納されています