C/C++の宿題を片付けます 91代目

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2007/07/03(火) 21:43:57
>>949
どうしろっつーんだよ
953デフォルトの名無しさん:2007/07/03(火) 21:49:50
二次元配列において構造体を使います。
構造体にはname1,name2,name3を用います。
struct tfr{
double name1;
double name2;
double name3;
};
struct tfr data[i][j];
変数4つa,b,c,dを用いる。
仮にi=1,j=1としたとき、
a*b の結果を data[1][1].name2
c*d の結果を data[1][1].name3に代入します。
そしてdata[1][1].name=data[1][1].name2+data[1][1].name3
とします。

a*bと c*dがあまりに小さくなることとしているのでdata[1][1].nameが
表示されなくなってきます。
そこでdata[1][1].nameのlogをとることにします。
log(a*b)とlog(c*d)には同じようにdata[1][1].name1,2にいれていくとする。
data[1][1].nameには何を代入すればよいですか?

ちなみにlog(A+B)はlogA+logBではありません。
a*b、c*dは小数の計算です。
954デフォルトの名無しさん:2007/07/03(火) 22:13:01
>>1
955デフォルトの名無しさん:2007/07/03(火) 22:34:52
[1] 授業単元:C言語
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4488.txt
[3] 環境
 [3.1] OS:Windows xp
 [3.2] コンパイラ名とバージョン:bcc32
 [3.3] 言語: C
[4] 期限: 2007/7/4 15:30
[5] その他の制限: 特になし
956デフォルトの名無しさん:2007/07/03(火) 23:11:55
>>955
3番の16進数をあらわす文字って何?
0x〜ってこと?

2番で入力文字を調べA(a)=1〜〜、って言ってるけど、
結局アルファベットを数字に直せばいいの?
957デフォルトの名無しさん:2007/07/03(火) 23:16:28
>>956
0x〜のことです。
2もアルファベットを数字すると言うことです。
958デフォルトの名無しさん:2007/07/03(火) 23:32:35
[1] 授業単元: プログラミングU
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4490.txt
[3] 環境
 [3.1] OS: (WindowsXP
 [3.2] コンパイラ名とバージョン: Visual Studio 2003
 [3.3] 言語: C
[4] 期限: 7月5日 16時
[5] その他の制限: 特になし

お願いします
959デフォルトの名無しさん:2007/07/03(火) 23:33:00
>>955の問題文、雑すぎ。
960デフォルトの名無しさん:2007/07/03(火) 23:35:05
>>958の問題見て、まったくさっぱりわかんねぇ俺、マジかこいい。
961デフォルトの名無しさん:2007/07/03(火) 23:37:13
>>957
> 2もアルファベットを数字すると言うことです。
まあなんつうか



日本語でおk
962デフォルトの名無しさん:2007/07/03(火) 23:37:23
>>955は依頼にすら手を抜きすぎなのでやらんから
963デフォルトの名無しさん:2007/07/03(火) 23:40:29
[1]授業単元:基本プログラミング
[2]問題:正の整数x(2進数)を入力すると2進数にして表示するプログラム
10->2進数にするには割り算の余りを順次配列に格納し、最後に逆順に表示すれば2進数になる
    
    <実行例>(58を入力)
整数を入力してください--> 58
111010
[3]
[3.1]OS:windows xp
[3.2]コンパイラ名とバージョン:gcc
[3.3]言語:C++(Cはよくわかりません・・・)
[4]期限:7月4日21時
[5]その他制限:特になしです。よろしくお願いします。
964デフォルトの名無しさん:2007/07/03(火) 23:41:50
[1] 授業単元: アルゴリズム
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4491.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限: 7月5日 17:00
[5] その他の制限: 特になし

お願いします
965デフォルトの名無しさん:2007/07/03(火) 23:44:41
[1] 授業単元:数値計算

[2] 問題文:
以下の公式からプログラムを作成して下さい。

i(tk+1)=i(tk)+(V0−100*i(tk)−V(tk))冲
V3(tk+1)=V3(tk)+1000*i(tk)*凾

初期値を
t=0のとき、i=0、 v3=0
t(k)の値は任意の値で例えば 0、 0.0001、0.0002、0,0003と増加させる。
この場合は冲は0.0001
なお、V0の値は
V3<5のときV0=0
V3>7のときV0=10とする。


このプラグラムを作って i とV3の値をtkの変化とともに示せ。

[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:VisualC++6.0
 [3.3] 言語: C++
[4] 期限: 2007/7/7
[5] その他の制限: 特になし

先にV3の値を計算してからIの式に代入するようなんですが自分で何回つくってもエラーがでてできないとです・・・
よろしくお願いします。
966デフォルトの名無しさん:2007/07/04(水) 00:02:16
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {
char buf[64], i, sur;
long num;

printf("input: ");
scanf("%s", buf);
num = atoi(buf);

for(i=0; i<64; i++) buf[i] = NULL;

for(i=0; num>0; i++) {
sur = (char)num%2;
num /= 2;
if(sur==1) buf[i] = '1';
else buf[i] = '0';
}

i = (char)strlen(buf)-1;
for( ; i>=0; i--) printf("%c", buf[i]);

return 0;
}
967デフォルトの名無しさん:2007/07/04(水) 00:07:10
↑のは>>963の答え。
酔っててダメだわ。寝る。
968デフォルトの名無しさん:2007/07/04(水) 00:10:43
C++やで
よっとるからまちがえよったな
969デフォルトの名無しさん:2007/07/04(水) 00:17:11
>>961
>>956に書いてあるように
アルファベットを数字に直すということです。
970デフォルトの名無しさん:2007/07/04(水) 00:20:03
>>944
迅速な返答ありがとうございます
971デフォルトの名無しさん:2007/07/04(水) 00:24:43
#include <iostream>
using namespace std;

int main(){
int x, i;
int mox[100];

cin >> x;

for(i=0; x>0; i++){
mox[i] = x % 2;
x /= 2;
}

i--;

for(; i>=0; i--){
cout << mox[i];
}

return 0;
}

c++は不慣れだから文句は言うなタコ
もしあるなら自分で改善してね☆
972デフォルトの名無しさん:2007/07/04(水) 00:31:09
for(i--; ; i>=0; i--){

i--はforの中にあるほうがスマートかな?
よくわからんけど実戦経験のある人に聞きたい
973デフォルトの名無しさん:2007/07/04(水) 00:33:20
人のプログラム勝手に持ち出してスレ違いな話題を始めるな。
i--がどこにあろうが一緒だよヴォケタコが。
974デフォルトの名無しさん:2007/07/04(水) 00:35:45
>>972
セミコロンが多すぎます><
975デフォルトの名無しさん:2007/07/04(水) 00:59:59
>>963
#include <iostream>
#include <vector>
using namespace std;

int main()
{
    int x;
    vector<int> binary;
    cout << "整数を入力してください--> ";
    cin >> x;
    for (; x > 0; x = x >> 1) {
        binary.push_back(x % 2);
    }
    for (int i = binary.size() - 1; i >= 0; i--) {
        cout << binary[i];
    }
    return 0;
}
976デフォルトの名無しさん:2007/07/04(水) 01:12:57
どなたか>>958をわかる方いらっしゃいますか?
977デフォルトの名無しさん:2007/07/04(水) 01:36:04
本気で解いてほしいなら
問題文だけじゃなくてその他の手法についても説明すりゃいいのに

回答する側には高校生もいるってこと理解してる?
978デフォルトの名無しさん:2007/07/04(水) 01:38:42
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
http://www.k.hosei.ac.jp/~wakahara/Cpro_11.htm
ここの最下部にある練習問題33

[3] 環境
 [3.1] OS:windows
 [3.2] コンパイラ名とバージョン: VS
 [3.3] 言語:C

[5] その他の制限:丸投げです、よろしくお願いします
979デフォルトの名無しさん:2007/07/04(水) 01:44:35
しかし、現場で役に立たない事ばっか教えるんだなぁ…
980デフォルトの名無しさん:2007/07/04(水) 01:59:31
>>963です。迅速な回答ありがとうございました。
981デフォルトの名無しさん:2007/07/04(水) 02:13:28
>>978
すごい例題だね
例題4−5

 “ジョセファス(Josephus)の問題”を解く。
この問題とは,いまN人が集団自殺を
しようとしているとして,まず全員が円陣に並び,
その円の中のM番目の人を順に処刑する。
1人死ぬと取り除かれ,円の大きさが1減ることになる。
問題は,最後に死ぬ人を見つけることである。一般には,
人々の処刑される順番を見つけることが問題である。
982デフォルトの名無しさん:2007/07/04(水) 02:14:45
>>964
関数の仕様書いてないから名前から推測して適当に作った。
deleteminは最小値を消せばいいのか?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4493.zip
983デフォルトの名無しさん:2007/07/04(水) 02:16:05
>>978
josephus( t, M );// line30-41と差し替え

void josephus(struct node * t, int i)
{
if( t != t->next )// 再起を抜ける条件
{
for( int j = 1; j < i; j++ ) // i番目のnodeを探す
t = t->next;
printf("%3d -->", t->next->key);
struct node* x = t->next;
t->next = t->next->next;
free(x);
j++;
if (j%10 == 0) printf("\n");
josephus( t, i );// Recursive Call!!
}
else
printf("%3d\n\n", t->key);//終端
}

暇だからやってみた('A`)
このまま使うならプロトタイプを忘れずに
984デフォルトの名無しさん:2007/07/04(水) 02:19:03
>>965
ソースアップしちゃいなよ。
正直問題文がいとおかし。
985デフォルトの名無しさん:2007/07/04(水) 02:44:42
>>982
ありがとうございます
活用させてもらいます
986デフォルトの名無しさん:2007/07/04(水) 03:12:07
[1] 授業単元:プログラミング

[2] 問題文:二つのテキストファイルを開き、
一行ずつ交互に読み出して新たな一つのファイルに書き出す。
ただし一方のファイルが尽きたら、もう一つのファイルだけを
書き出す。これをコマンドラインベースのプログラムで作成する。
プログラム名だけで実行したとき、または、コマンドラインパラメータの
数が間違っているときには、パラメータの書き方を表示して終了するようにする。

[3] 環境
 [3.1] OS: Windows xp

 [3.2] コンパイラ名とバージョン:Visual Studio 2005

 [3.3] 言語: C++
[4] 期限: 明朝10時
[5] その他の制限: 特になし

c++初めて約3ヶ月です。私自身でも色々考えたのですがこんな脳みそじゃ
無理でした。getline関数使うとか聞いたのですが使い方がいまいちわかり
ません。
簡単な問題かもしれませんがよろしくお願いします。
987デフォルトの名無しさん:2007/07/04(水) 03:44:39
残りのレス数が少ないけど間に合うかな。
よろしくお願いします。
[1] 授業単元:C言語演習
[2] 問題文(含コード&リンク):
文字型配列に文字列を読み込んだ後、文字型配列を示すポインタを用いて
文字列の小文字を大文字に、大文字を小文字に変換するプログラムを作成せよ。
(実行例)
文字列を入力せよ:Tanaka Tarou
結果:tANAKA tAROU
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: cygwin gcc ver,?
 [3.3] 言語: C言語
[4] 期限: 7/5 PM12:00までにお願いします。
[5] その他の制限:文字型配列の中身をポインタ変数を介して操作する。
988デフォルトの名無しさん:2007/07/04(水) 04:31:18
>>987
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int main(void) {
char buf[512];
unsigned i;
printf("Input > ");
fgets(buf,sizeof(buf)/sizeof(buf[0]),stdin);
for(i=0; i<strlen(buf); i++) {
if(isupper(buf[i])) buf[i]=tolower(buf[i]);
else buf[i]=toupper(buf[i]);
}
puts(buf);
return 0;
}
989デフォルトの名無しさん:2007/07/04(水) 04:44:25
>>986
#include <iostream>
#include <fstream>
using namespace std;

int main(int argc, char *argv[])
{
ifstream ifs1(argv[1]);
ifstream ifs2(argv[2]);
ofstream ofs(argv[3] ,ios::out |ios::trunc);
if(!ofs.is_open()){
cerr << "開けません";
exit(1);
}
char buff1[256],buff2[256];
while(!ifs1.eof() || !ifs2.eof())
{
if(!ifs1.eof()){
ifs1.getline(buff1, sizeof(buff1));
ofs << buff1 << endl;
}
if(!ifs2.eof()){
ifs2.getline(buff2, sizeof(buff2));
ofs << buff2 << endl;
}
};
return 0;
}
990デフォルトの名無しさん:2007/07/04(水) 04:53:53
>>988
ありがと、もう誰もいないかと思ってたよ。
おやすみなさいノシ
991デフォルトの名無しさん:2007/07/04(水) 05:04:00
>>987 っつか、ポインタ変数使ってへんかった・・・もう寝たかな?
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int main(void) {
char buf[512],*p;
unsigned i;
p=buf;
printf("Input > ");
fgets(buf,sizeof(buf)/sizeof(buf[0]),stdin);
for(i=0; i<strlen(buf)-1; i++,p++) {
if(isupper(*p)) *p=tolower(*p);
else *p=toupper(*p);
}
printf("%s",buf);
return 0;
}
992デフォルトの名無しさん:2007/07/04(水) 05:59:52
>>984
実際にでた問題文をそのまま書きます。

RLC回路においてV0=10V、R=100Ω、L=1H、C=1mFのとき、

コンデンサの両端の電位差V3が7Vになったら、V0と接続するスイッチを切る。
5Vになったらスイッチを再びもどす。
以下これを繰り返すことにする。
ただし、t=0において電荷は無し(V3=0)とする。
このとき回路の閉路方程式、条件を表し、時間tに対するi(t)、V3(t)の変化をグラフに示せ。


閉路方程式をそれぞれもとめて計算して出した公式が上で書いた公式です。
先生から求めた公式はこれでいいと確認してもらいました。
プログラムで t i V3 の値をprintf関数から出して、それをエクセルにいれて計算しようとしてるんですけれど実際のプログラムを作れないという・・
993デフォルトの名無しさん:2007/07/04(水) 06:15:54
あとtkというのはたとえば
tk=0、V3=0からスタートするから、

i(t1)=Vo*0.0001
V3(t1)=0

i(t2)=i(t1)+(V0−100*i(t2)−V(t1))
V3(t2)=V3(t1)+1000*i(t2)*0.0001

こんな感じになるそうです。
994デフォルトの名無しさん:2007/07/04(水) 07:57:56
>>938
こちらお願いできないでしょうか?
995デフォルトの名無しさん:2007/07/04(水) 08:52:40
>>993
いまいちわからんなあ。微分方程式に見えるけど。
996デフォルトの名無しさん:2007/07/04(水) 08:58:44
>>989
ありがとうございました!
これでやっとレポカケマス!
997デフォルトの名無しさん:2007/07/04(水) 09:10:07
>>993
その公式の通りに作ってみたけど出力結果がおかしいよ。
公式間違ってるんじゃない?
#include <iostream>

int main()
{
double i, i2, v3 = 0.0, v32, tk, v0 = 0.0, t1, t2, dt = 0.0001, t;
int N = 100;


i = v0* dt;
v3 = 0.0;
t = dt;

std::cout << "t(" << t << "), i = " << i << ", V3 = " << v3 << std::endl;

do {
if (v3 < 5)
v0 = 10.0;
else if (v3 > 7)
v0 = 0.0;

i2 = i + (v0 - 100.0 * i - v3);
v32 = v3 + 1000.0 * i * dt;
i = i2;
v3 = v32;
t += dt;

std::cout << "t(" << t << "), i = " << i << ", V3 = " << v3 << std::endl;
} while (--N);
}
998デフォルトの名無しさん:2007/07/04(水) 10:10:03
次スレ
C/C++の宿題を片付けます 92代目
http://pc11.2ch.net/test/read.cgi/tech/1183511364/
999デフォルトの名無しさん:2007/07/04(水) 10:20:16
[1]プログラム実習:
[2] 文字列aの中に文字列bは何個出現してるか確認するプログラムを作成せよ
[3] 環境
 [3.1] OS:Windows
 [3.2] VC 6.0
 [3.3] 言語:C++
[4] 期限:[無期限]
[5] 特にないです

#include<stdio.h>
int main(void)
{
char a[]="aiai";
char b[]="ai";
int i,count;
count=0;
if(a&&b)count++;
printf("%d",count);
}
条件分岐が一回しかないので1しかでないのはわかるのですが、そもそもこのプログラムがあってるかわからないので、どなたかアドバイスお願いします
1000デフォルトの名無しさん:2007/07/04(水) 10:54:29
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。