トップページ⇒tech
1001コメント402KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG?2BP(12)
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
 投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】
http://www.linux.or.jp/JM/index.html

【前スレ】
C/C++の宿題を片付けます 76代目
http://pc8.2ch.net/test/read.cgi/tech/1162771475/
【過去スレ一覧】
http://makimo.to/cgi-bin/search/search.cgi?q=C%2B%2B%82%CC%8Fh%91%E8&andor=AND&sf=2&H=&view=table&D=tech&shw=2000
05455442006/11/28(火) 15:27:46
皆さん宜しくお願いします。
0546デフォルトの名無しさん2006/11/28(火) 16:39:32
>>544
VCC++だと#define EPSILON (1e-15)が解決できなかったので
代わりにfloat.hのDBL_EPSILON使ってある
気に入らなかったら自分で直して

#include <stdio.h>
#include <math.h>
#include <float.h>
#define f(x) ((x)-cos(x))
void main(){
double x=1,xBefore=0,a=0,b=1,fa=f(a),fb=f(b);
while(f(x)!=0&&fabs(x-xBefore)>DBL_EPSILON){
xBefore=x;
x=(b*fa-a*fb)/(fa-fb);
if(fa*f(x)<0) {
b=x;
fb=f(b);
}
else {
a=x;
fa=f(a);
}
}
printf("x=%.15fの時f(x)=%.15f\n",x,f(x));
}
05475462006/11/28(火) 16:50:06
改良版
#include <stdio.h>
#include <math.h>
#include <float.h>
#define f(x) ((x)-cos(x))

void main(){
double x=1,xBefore=0,a=0,b=1,fa=f(a),fb=f(b),fx=f(x);
while(fx!=0&&fabs(x-xBefore)>DBL_EPSILON){
xBefore=x;
x=(b*fa-a*fb)/(fa-fb);
fx=f(x);
if(fa*fx<0) {
b=x;
fb=fx;
}
else {
a=x;
fa=fx;
}
}
printf("x=%.15fの時f(x)=%.15f\n",x,f(x));
}
0548デフォルトの名無しさん2006/11/28(火) 19:20:49
[1] 授業単元: データ構造とアルゴリズム
[2] 問題文(含コード&リンク): ファイルを読み込み、各行が逆順に出るようなプログラムを書きなさい。作成したプログラムに対して、空の入力と、作成したプログラム本体のソースコードを入力し、出力結果を報告しなさい。
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: mingw-jp
 [3.3] 言語: C++
[4] 期限: 明日の午後8時(2006年11月29日(水))
[5] その他の制限: 一行の文字数や、行数の制限を行わない。
         同じファイルを二回以上オープンしない。但し、メモリに異常が発生した場合は、検知し、確実に異常終了させる。

分かる方、いたらお願いします!!
0549デフォルトの名無しさん2006/11/28(火) 19:43:41
>>548
このスレを検索
0550デフォルトの名無しさん2006/11/28(火) 19:45:55
>メモリに異常が発生した場合は、検知し、確実に異常終了させる
そりゃ不可能だ。
仮にメモリ異常が単にmalloc()/new失敗と言う意味に解釈したとしても、
その状況で確実に異常終了できるかどうかは実はOS次第だからな。
0551デフォルトの名無しさん2006/11/28(火) 19:49:29
[1] 授業単元: コンピュータプログラミング
[2] 問題文:

点数をいれるとSABCDを出力するプログラムを作りなさい。ただし
100〜90点  S
89〜80 A
79〜70 B
69〜60 C
59点以下 D
とする。以下の実行結果を参考にして考えよ。
./kadai 70 80 85
1教科目はBです。
2教科目はAです。
3教科目はAです。

[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラとバージョン: gcc
 [3.3] 言語:C言語
[4] 期限:11月29日20時まで

当方プログラミング歴2ヶ月で今回の課題がさっぱりわからないので
誰か分かる方がいらっしゃいましたら助力お願いします。
0552デフォルトの名無しさん2006/11/28(火) 20:12:53
>>542
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3048.c
05535372006/11/28(火) 20:17:27
あの後もう一度必死に頭使ってみたら、なんとか理解できて課題を完成させることができました。
ありがとうございました
0554デフォルトの名無しさん2006/11/28(火) 20:19:53
>>551
#include<stdio.h>

const char *hyouka(int value){
  if(value>100)  return "unknown";
  if(value>=90)  return "S";
  if(value>=80)  return "A";
  if(value>=70)  return "B";
  if(value>=60)  return "C";
  return "D";
}

int main(int argc, char *argv[]){
  int i, value;

  for(i=1;i<argc;i++){
    sscanf(argv[i], "%d", &value);
    printf("%d教科目は%sです。\n", i, hyouka(value));
  }
  return 0;
}
0555デフォルトの名無しさん2006/11/28(火) 20:42:18
unknownカッコヨス
0556デフォルトの名無しさん2006/11/28(火) 21:11:11
>>426お願いできないでしょうか。行列に2次元配列が使われておらず、全く理解できないのです。
期限には間に合いませんがよろしくお願いします。
0557デフォルトの名無しさん2006/11/28(火) 21:50:49
>>538
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3049.txt
0558デフォルトの名無しさん2006/11/28(火) 22:10:28
>>548 ってさ。>>103と同じっぽくない?
0559デフォルトの名無しさん2006/11/28(火) 22:11:46
>>548
new()が使われてない場合はこれじゃだめかも。
#include <string>
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
void putReverse(ifstream& infile)
{
string s;
try{
while(!infile.eof()){ getline(infile, s); cout << string(s.rbegin(), s.rend()) << endl;}
}
catch(bad_alloc){
cerr << "メモリ確保失敗";
infile.close();
abort(); //エラーコード返すとかじゃなく、お望み通り異常終了。
}
}
int main(int argc, char* argv[])
{
if(argc != 2){ cerr << "読み込むファイルを一つ指定してください"; return -1;}
ifstream inFile(argv[1]);
if(inFile.fail()){ cerr << "ファイルを開けません"; return -2;}
putReverse(inFile);
return 0;
}
0560デフォルトの名無しさん2006/11/28(火) 22:14:00
1.教授が問題を作る。
2.模範解答をTAに作るように命令。
3.TAがここで問題を丸投げ。
4.生徒が問題を受け取る。
5.生徒がここで問題を丸投げ。 ← いまここ
0561デフォルトの名無しさん2006/11/28(火) 22:18:47
>>560
全米が震撼した
0562デフォルトの名無しさん2006/11/28(火) 22:26:02
(((( ;゚Д゚)))ガクガクブルブル
0563デフォルトの名無しさん2006/11/28(火) 22:29:41
[1] 授業単元: 計算機
[2] 問題文(含コード&リンク):∫ e^x/x dx(x:1→3)の値を台形およびシンプソンの公式により求めよ
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 11/30
[5] その他の制限: 等分数は2から倍々と増やしていき、積分値が変化しなくなるまで行うこと。

等分数を最初に設定して計算することは出来たのですが、
制限の>>等分数は2から倍々と増やしていき、積分値が変化しなくなるまで行うこと。
これのやり方が分かりません。
誰か分かる方がいらっしゃいましたらよろしくお願いします。
0564デフォルトの名無しさん2006/11/28(火) 22:33:59
>>563
なんでだよwww
>等分数を最初に設定して計算することは出来た
ここが一番の山じゃねーか
もう終わったようなもんだろwwwwwwwww

あとはforループで、2^iで分割して、
今の値-前の値の絶対値が十分小さかったら終了でいいじゃん
0565デフォルトの名無しさん2006/11/28(火) 22:34:38
>>558
そのふたつだけじゃなくて
>>42
も同じ課題だと思う
0566デフォルトの名無しさん2006/11/28(火) 22:53:25
>>554
質問者じゃないけど、こういうのもアリですかね?

const char* hyouka(int value)
{
switch (value / 10) {
case 10:
case 9:return "S";
case 8:return "A";
case 7:return "B";
case 6:return "C";
case 5:
case 4:
case 3:
case 2:
case 1:
case 0:return "D";
default:return "unknown";

}

}
0567デフォルトの名無しさん2006/11/28(火) 22:59:02
>>565
>>42じゃなくて>>40じゃね?
0568デフォルトの名無しさん2006/11/28(火) 23:01:09
>>567
あ、
>>40だった。スマソ
0569デフォルトの名無しさん2006/11/28(火) 23:12:07
[1] 授業単元: プログラミングII
[2] 問題文(含コード&リンク):

出版社M社で自社のライトノベル・DVD購入者に対し懸賞を行うことになった。
応募券を切り取り、ハガキに貼ってを送ってきた人に対し

10人にオリジナル図書カードを
50人にオリジナルストラップを
100人にオリジナルステッカーをプレゼントすることになった。

公平を期すためにC言語で乱数を用い当選者を決定させたい。
ここで応募してくる人は過去の傾向からみて1000人以下であると考えられる。

※なおライトノベル、DVD両方の応募券がついている客は
DVDのみの応募券、ライトノベルのみの応募券がついているユーザーの2倍の当選確率である。

※なお、同一人物(同じ名前)での2重当選はありえない。(当選は1人1回である)

※またA君、B君、C君は前回の懸賞で特賞が当たっているため、今回応募があっても当選しない。

[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Boland
 [3.3] 言語: C
[4] 期限: 2006.12.01
[5] その他の制限: なし

よろしくお願いいたします。
0570デフォルトの名無しさん2006/11/28(火) 23:14:05
>>569
問題文それだけ?
0571デフォルトの名無しさん2006/11/28(火) 23:15:17
>>570
提示された物は全てです
0572デフォルトの名無しさん2006/11/28(火) 23:15:52
>>569
入力するデータが欲しい
0573デフォルトの名無しさん2006/11/28(火) 23:15:59
[1] 授業単元:C言語入門
[2] 問題文(含コード&リンク):
y=sin(2x)×cos(x)について区間0≦x≦π/4での積分値を計算するプログラム
を作成せよ。
計算結果として、積分範囲・刻み数・積分結果を出力させること。
刻み数は
#define n 20
とする。
πはM_PIとする。

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 明日の朝10時00分までです。
[5] その他の制限: 特にないです。

よろしくお願い致します。
0574デフォルトの名無しさん2006/11/28(火) 23:16:32
>>569
問題文そのまま?
なんか色々省略してない?
0575デフォルトの名無しさん2006/11/28(火) 23:23:35
>>572
A君B君C君をはじけばいいらしいです。
D君以降は適当にDVDのみ、ノベルのみ、両方適当でいいっていってました

>>574
とくに省略はしていません
0576デフォルトの名無しさん2006/11/28(火) 23:24:02
>>571
じゃぁ先生にこんな問題文じゃ解けないって突き返せ
0577デフォルトの名無しさん2006/11/28(火) 23:24:43
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
以下は入力された整数値の大小に基づいて2分木を生成するものである。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3050.txt
すべてのノードの左の子と右の子を交換する関数void ReverseTree(struct BTREE *ptr)
を再帰呼び出しによって実現せよ。この手続き後にTraverseTreeを実行すると数値は降順に表示されるはずである。
また、指定データと同じ値のデータを持つノードの個数を出力するint CountData(struct BTREE *ptr,int searchdata)を
再帰呼び出しによって完成させよ。
Reverse Tree

[3] 環境
 [3.1] OS: Windows Xp
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 明日夜
[5] その他の制限:


お願いします!
0578デフォルトの名無しさん2006/11/28(火) 23:29:32
>>573
台形公式でよければ >>212 を少し変更すればおk
return 4/(1+x*x);
↓
return sin(2*x)*cos(x);

printf("%f\n", f_integral(0, 1, 1000));
↓
printf("%f<x<%f %d %f\n", 0., M_PI/4, n, f_integral(0., M_PI/4, n));
0579デフォルトの名無しさん2006/11/28(火) 23:48:39
>>577
void ReverseTree(struct BTREE *ptr) {
    struct BTREE *temp;
    if (ptr == NULL) return;
    ReverseTree(ptr->left);
    ReverseTree(ptr->right);
    temp = ptr->left;
    ptr->left = ptr->right;
    ptr->right = temp;
    return;
}
int CountData(struct BTREE *ptr, int searchdata) {
    if (ptr == NULL) return 0;
    return CountData(ptr->left, searchdata) + CountData(ptr->right, searchdata) + (ptr->data == searchdata);
}
0580デフォルトの名無しさん2006/11/28(火) 23:51:31
>>564
ありがとうございます。
for文の中を前の値==今の値とかやって悩んでましたw
0581デフォルトの名無しさん2006/11/29(水) 00:00:30
>>573
#include <math.h>
#include <stdio.h>
#define n 20
double f(double x) {
    return sin(2 * x) * cos(x);
}
int main(void) {
    int i;
    double a = 0., b = M_PI / 4, h = (b - a) / n, s = 0.;
    for (i = 1; i < n; ++i) s += f(a + i * h);
    s *= 2;
    s += f(0) + f(n);
    s *= h / 2;
    printf("%f", s);
    return 0;
}
0582デフォルトの名無しさん2006/11/29(水) 00:05:04
>>569
応募者が賞品の数より少ない場合、
1.A君、B君、C君でも当選する?
2.賞品の当選の優先順位は決まってる?

ちなみに全員ハズレにするのもアリ?
0583デフォルトの名無しさん2006/11/29(水) 00:09:14
>>582
お前、ふだんからいい仕事してるんだろうな
0584デフォルトの名無しさん2006/11/29(水) 00:11:56
>>548
#include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>
#include <string>
int main(int argc, char* argv[]) {
    if (argc != 2) return 1;
    std::ifstream ifs(argv[1]);
    std::string line;
    while (std::getline(ifs, line)) {
        std::copy(line.rbegin(), line.rend(), std::ostream_iterator<char>(std::cout));
        std::cout << std::endl;
    }
    return 0;
}
↑と↓を実行して、求める結果が得られた方を提出せよ。
#include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>
#include <list>
#include <string>
int main(int argc, char* argv[]) {
    if (argc != 2) return 1;
    std::ifstream ifs(argv[1]);
    std::string line;
    std::list<std::string> list;
    while (std::getline(ifs, line)) list.push_back(line);
    std::copy(list.rbegin(), list.rend(), std::ostream_iterator<std::string>(std::cout, "\n"));
    return 0;
}
05855732006/11/29(水) 00:22:07
>>578
ありがとうございます。
講義で台形公式の話をしていたので、台形が公式で十分というか台形公式の
方が良いです。
ただ、エラーが出てコンパイルできません。

>>581
ありがとうございます。
しかし、値が1つしか表示されません。
0586デフォルトの名無しさん2006/11/29(水) 00:25:04
>>585
>>1も読めないのか?わざとなのか?
0587デフォルトの名無しさん2006/11/29(水) 00:27:10
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): int型で有効長lenの配列arrに対し、要素を巡回的に後にずらす関数 arr_cycle(arr, len) を作成する。
例えば、 arr[] = {0, 1, 2, 3} のとき、この関数によって arr[] = {3, 0, 1, 2} と更新される。最後の要素を先頭に挿入すればよい。
[3] 環境
 [3.1] OS: windows XP
 [3.2] コンパイラ名とバージョン:bcc32
 [3.3] 言語: C言語
[4] 期限: 明日昼12時
[5] その他の制限: 授業で配列に入ったばかり。
05885872006/11/29(水) 00:28:40
日付変わってるのに気がつきませんでした。
11月29日昼12時まででお願い致します。
05895852006/11/29(水) 00:31:22
申し訳ないです。

double f_integral(double a, double b, long n)
の部分に構文エラーが4つあります。
')' が '定数' の前にありません。
'{' が '定数' の前にありません。
'<不明>'
')'
です。
#define n 20
を追加したからでしょうか?

>>578さんが教えて下さった
return 4/(1+x*x);
↓
return sin(2*x)*cos(x);
と
printf("%f\n", f_integral(0, 1, 1000));
↓
printf("%f<x<%f %d %f\n", 0., M_PI/4, n, f_integral(0., M_PI/4, n));
以外に何を変更して良いか解らなくて。
0590デフォルトの名無しさん2006/11/29(水) 00:42:41
>>589
課題
・nが変数として使われてるのに#define n 20なんかしたらどうなるか考えてみる
0591デフォルトの名無しさん2006/11/29(水) 00:46:59
>>582

>>応募者が賞品の数より少ない場合、
>>1.A君、B君、C君でも当選する?
当選しません

>>2.賞品の当選の優先順位は決まってる?
決まっていません

>>ちなみに全員ハズレにするのもアリ?
アリです

よろしくお願いいたします。
0592デフォルトの名無しさん2006/11/29(水) 00:51:36
>>591
#include<stdio.h>
int main(void){
printf("当選者ナシ\n");
return 0;
}
05935892006/11/29(水) 00:51:52
>>590
あ、確かに変数として使われてますね。
そのエラーは納得できたのですが、講義では数値積分法には台形公式による
方法があります、と言っていただけで、具体的にどのようなものなのか
教わってないので、>>578さんが教えて下さったプログラム(>>212のプロ
グラム)の意味が全く解らなくて…。
0594デフォルトの名無しさん2006/11/29(水) 00:55:39
時々日本の一部の地域はインターネットの使用が管理されていて
そこでは検索エンジンへの接続は禁止されているのではないか
などと思うことがある
>>593
ttp://72.14.253.104/search?q=cache:5TcXrS4nz80J:www5d.biglobe.ne.jp/~tomoya03/shtml/algorithm/Daikei.htm+%E5%8F%B0%E5%BD%A2%E5%85%AC%E5%BC%8F&hl=ja&gl=jp&ct=clnk&cd=3
0595デフォルトの名無しさん2006/11/29(水) 00:56:07
>>581 も台形公式ですよ
あと >>212 がレスつけてる先を見てみれば?
0596デフォルトの名無しさん2006/11/29(水) 00:56:44
>>593
そのエラー直して解けたんならイインジャマイカと言ってみるt。
05975812006/11/29(水) 00:57:25
>>585
すまん、色々間違ってた。
05985932006/11/29(水) 01:11:41
>>594
あ、詳しく説明されてますね。課題が完成しても、これからも使いそうなの
で、そこで少し勉強しようと思います。ありがとうございます。
>>595
>>581さんのも台形公式だったのですか。
>>596
まだ、完成してないです。
>>597
いえいえ。ありがとうございます。
#include<stdio.h>
#include <math.h>
#define M_PI 3.14
double f(double x) {
return sin(2*x)*cos(x); }
double f_integral(double a, double b, long n) {
double h, ai;
double ret=0.0;
long i=20; h=(b-a)/n;
for(i=0;i<=n;i++) {
ai=a+i*h; ret+=f(ai); }
ret-=(f(a)+f(b))/2; ret*=h;
return ret; }
int main(void) {
printf("%f<x<%f %d %f\n", 0., M_PI/4, n, f_integral(0., M_PI/4, n));
return 0; }
修正してみて、コンパイルしたらメイン関数の中でnが定義されてません、
と表示されたので、メイン関数で
int n;
を追加したら、コンパイルは通ったのですが一つしか表示されません。
これは、for文で20回表示するようにしたら完成、ということなのでしょうか?
05995812006/11/29(水) 01:22:36
>>573
やり直し。台形公式。
#include <math.h>
#include <stdio.h>
#define n 20
double f(double x) {return sin(2 * x) * cos(x);}
double trapezoidal(double a, double b, int d) {
    double s = 0., h = (b - a) / d; int i;
    for (i = 1; i < d; ++i) s += f(a + i * h);
    s *= 2; s += f(a) + f(b); s *= h / 2;
    return s;
}
int main(void) {
    printf("積分範囲:%f...%f, 刻み数:%d, 積分結果:%f\n", 0., M_PI / 4, n, trapezoidal(0, M_PI / 4, n));
    return 0;
}
0600デフォルトの名無しさん2006/11/29(水) 01:36:45
>>587
#include <stdio.h>
typedef int T;
void swap(T* x, T* y) {T temp = *x; *x = *y; *y = temp;}
void arr_cycle(T* arr, unsigned int len) {
    unsigned int n = 1;
    T *first, *last;
    n = len - n % len;
    for(first = arr, last = arr + n; ; ) if (first == last || first == --last) break; else swap(first++, last);
    for(first = arr + n, last = arr + len; ; ) if (first == last || first == --last) break; else swap(first++, last);
    for(first = arr, last = arr + len; ; ) if (first == last || first == --last) break; else swap(first++, last);
}
void print_array(int* t, unsigned int n) {
    unsigned int i;
    for(i = 0; i < n; i++) printf("%d", t[i]);
    printf("\n");
}
int main(void) {
    int arr[] = {0,1,2,3};
    arr_cycle(arr, sizeof(arr) / sizeof(arr[0]));
    print_array(arr, sizeof(arr) / sizeof(arr[0]));
    return 0;
}
06015982006/11/29(水) 01:37:08
>>599
ありがとうございました。
06025872006/11/29(水) 01:50:03
>>600
ありがとうございます。
0603デフォルトの名無しさん2006/11/29(水) 01:59:19
>>594
Sleipnir利用者なんかは本当に一部機能を制限されてるからな
知らずにGoogleフル機能だと思ってたら泣ける
0604デフォルトの名無しさん2006/11/29(水) 02:54:15
>>587
void arr_cycle(int *arr, int len)
{
int i, temp;
temp = a[len-1];
for(i=len-1;i>0;i--) arr[i] = arr[i-1];
a[0] = temp:
}
0605デフォルトの名無しさん2006/11/29(水) 03:54:26
[1] 授業単元:プログラミング
[2] 問題文:0から9999までの整数をキーボードから入力し、それが何桁であるかを
      表示するプログラムを書く。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] lcc
 [3.3] 言語:C
[4] 期限:2006年11月29日18:00まで

どうかよろしくお願いします。
0606デフォルトの名無しさん2006/11/29(水) 04:22:16
>>605
#include<stdio.h>
#include<math.h>
void main(){
int x;
scanf("%d",&x);
printf("%d桁\n",(int)log10(x)+1);
}
0607デフォルトの名無しさん2006/11/29(水) 04:38:10
>605
#include <stdio.h>
int main(void)
{
int i, n;
scanf("%d", &n);
for(i=0; n; i++, n/=10);
printf("%d桁", i);
return 0;
}
0608デフォルトの名無しさん2006/11/29(水) 08:27:55
>>607
printf("%d桁\n", n); の間違い?
あとn/=10だと一桁少なく出るのでは。
06095442006/11/29(水) 08:48:54
>>546
ありがとうございます。今日、改良したものを試して
みます。
06106072006/11/29(水) 08:56:11
>>608
理解できないなら、せめて実行してから文句つけてくれ。
0611デフォルトの名無しさん2006/11/29(水) 09:41:34
>>579
ありがとうございます
0612デフォルトの名無しさん2006/11/29(水) 10:21:34
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3051.txt
この整数値の昇順リストを作成するプログラムを、指定データ(下記deletedata)と同じデータを持つセルをすべて
消去する関数void DeleteAlist(struct LIST **ptr, int deletedata)を作成せよ。
指定データを持つセルの先頭のものを消去する関数を参考にせよ
void Deletelist(struct LIST **ptr, int deletedata){

if((*ptr)==NULL){
printf("no such data \n");
}else if((*ptr)->data == deletedata){
struct LIST *tmp;
printf("data found\n");
tmp=(*ptr)->nextptr;
free(*ptr);
*ptr=tmp;
}else DeleteList(&((*ptr)->nextptr),deletedata);
}
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 今日夜
[5] その他の制限:
お願いします。。
0613デフォルトの名無しさん2006/11/29(水) 10:47:31
これ実際にやったら、詐欺っぽいよなぁ。
>>>応募者が賞品の数より少ない場合、
>>>1.A君、B君、C君でも当選する?
>当選しません
0614605 2006/11/29(水) 11:08:49
>>606,607
助かりました、本当にありがとうございます。
0615デフォルトの名無しさん2006/11/29(水) 11:14:22
>>612 コンパイルも通してねぇけど

void DeleteAlist( struct LIST** ppList, int iDelKey )
{
LIST** ppCur;
LIST* pTmp;

ppCur = ppList;
while( *ppCur ) {
if( (*ppCur)->data == iDelKey ) {
pTmp = (*ppCur)->nextptr;
free( (void*)*ppCur );
*ppCur = pTmp;
}
else {
ppCur = &((*ppCur)->nextptr);
}
}
}
06166152006/11/29(水) 11:17:12
ごめん。やっぱこっち。

void DeleteAlist( struct LIST** ppList, int iDelKey )
{
LIST* pTmp;

while( *ppList ) {
if( (*ppList)->data == iDelKey ) {
pTmp = (*ppList)->nextptr;
free( (void*)*ppList );
*ppList = pTmp;
}
else {
ppList = &((*ppList)->nextptr);
}
}
}
06175982006/11/29(水) 13:10:53
>>599
もう提出したので良いのですが疑問に思ったので質問です。
刻み数を10とか少し変えただけで積分結果が結構変わりますが
こんなもんなんでしょうか?
0618デフォルトの名無しさん2006/11/29(水) 13:12:33
気になるならシンプソン法とかもっと精度の良い方法に変えれ
0619デフォルトの名無しさん2006/11/29(水) 13:14:08
積分なんだから刻み数を減らせば精度がさがるに決まってる。
06206172006/11/29(水) 14:30:04
でも刻み数を100000ぐらいにすると積分結果が0.00000001ぐらいになるんです。
これっておかしくないですか?
0621デフォルトの名無しさん2006/11/29(水) 14:53:08
整数値を要素にもつk 行m 列行列A とm 行n 列行列B を定義し,それらの要素をキーボー
ドから入力させ,C = A×B を計算して画面表示するプログラムを作成しなさい.ただし,k,m,
n については,k≠m,m≠n,k≠n,k≧2,m≧2,n≧2 を満たす任意の値を設定してよい

分かる方、よろしくお願いします。


0622デフォルトの名無しさん2006/11/29(水) 15:11:25
>>569
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3052.c
0623デフォルトの名無しさん2006/11/29(水) 16:02:20
>>523といい>>608といいズレた指摘する奴がいるな

同一人物かのう
0624デフォルトの名無しさん2006/11/29(水) 16:05:53
>>523はズレてないだろ
間違ってるのは>521だから
0625デフォルトの名無しさん2006/11/29(水) 16:12:41
>>624
>>610
0626デフォルトの名無しさん2006/11/29(水) 16:20:16
キーボードから1行の文章とキーワードを入力し、キーワードが文章中に含まれているかどうかを
調べるプログラムを作成せよ。1行の文章中にキーワードが含まれているときには、その位置を表示します。
例えば、キーワードが"calculus"のとき、次のように表示します。
The development of calculus is a good example.
          ^
また、キーワードが含まれていない場合には、"not found"を表示します。





これをC言語でプログラミングってどうやるんですか?
三日かけてもわかりませんでした   
0627デフォルトの名無しさん2006/11/29(水) 16:21:57
>>626
>>1
0628デフォルトの名無しさん2006/11/29(水) 16:54:50
>>626
関数の使い方の授業なら
strstr() (#include <string.h>)
を使う。
アルゴリズムの授業ならBM法でも実装しろ
0629デフォルトの名無しさん2006/11/29(水) 17:09:06
[2]キーボードから1行の文章とキーワードを入力し、キーワードが文章中に含まれているかどうかを
調べるプログラムを作成せよ。1行の文章中にキーワードが含まれているときには、その位置を表示します。
例えば、キーワードが"calculus"のとき、次のように表示します。
The development of calculus is a good example.
              ^
また、キーワードが含まれていない場合には、"not found"を表示します。

[3]C言語(emacs)
[4]2006年11月30日
[5]ポインターまで習ってます

0630デフォルトの名無しさん2006/11/29(水) 17:13:15
>>629
http://pc8.2ch.net/test/read.cgi/tech/1164079451/628
0631デフォルトの名無しさん2006/11/29(水) 17:22:42
[1]プログラミング応用 C言語クラス
[2]問題が長かったのでこちらに
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3053.txt
[3]言語はCでWinとLinux両方です
[4]11月30日午前11時
[5]配列やポインタや構造体といった基礎部分は一応一通りやってます

よろしくお願いします
06326292006/11/29(水) 17:23:45
まだif for while文 1、2次配列、文字列、ポインターしかならってないんですけどそれだけでできませんか?
0633デフォルトの名無しさん2006/11/29(水) 17:29:19
>>629
#include <stdio.h>

int __________(char *buf,char *w)
{
int i,c;
for (c=0;*buf != '\0';buf++,c++){
for (i=0;*(buf + i) == *(w + i);i++){
if (*(w + i + 1) == '\0'){
return c;
}
}
}
return -1;
}

int main(void)
{
char buf[256],word[64];
int i,j;
gets(buf);
gets(word);
if ((i = __________(buf,word)) > -1){
for (j=0;j < i;j++){
putchar(' ');
}
printf("^\n");
}else{
printf("not found.\n");
}
return 0;
}
0634デフォルトの名無しさん2006/11/29(水) 17:46:19
[1] プログラミング言語C
[2] テキストファイルに書いた英文を読み込み、単語の長さを調べてその頻度を調べるプログラム
  を作る。ただし空白、タブ、改行は文字列に含まず、ピリオド、コンマは0文字とする。
  (20文字以上は1まとめとする)
  [例] 0文字 1文字 2文字 … 20文字以上
      3   4    6      0
[3] 環境:Windows XP
  言語:C
[4] 期限: ([2006年11月30日9:00まで]
[5] if for while文 1、2次配列位しか習ってないです。それ以外も使っていいことに
  なってますがまだ初心者なのでできるだけ簡単なものにしていただけると助かります。
06356292006/11/29(水) 17:58:45
>>633
ありがとうございます
0636デフォルトの名無しさんNGNG?2BP(202)
>>634
#include<stdio.h>
#include<ctype.h>
int main(void){int c,i,j=0;int res[21];
for(i=0;i<21;i++){res[i]=0;}
while((c=getchar())!=EOF){if(c=='.'||c==','){res[0]++;j=0;}
else{if(j==0){if(isalpha(c)){j=1;}else;}else{if(isalpha(c)){j++;}
else {if (j<20){res[j]++;} else {res[20]++;}j=0;}}}}
for(i=0;i<21;i++){printf("%-2d文字:%-4d回\n",i,res[i]);}
return 0;}
0637デフォルトの名無しさん2006/11/29(水) 18:21:53
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):jinkou.txtのデータを用いる。キーボードで範囲を入力し、その範囲内の人口の都道府県名を出力するプログラムをかけ。
jinkou.txtは
北海道 5659
青森  1462
岩手  1402
:
沖縄  1349

となっています。

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: lcc
 [3.3] 言語: C
0638デフォルトの名無しさん2006/11/29(水) 18:26:36
>>637
県名と数字を区切っているものは何?
とかこういうやりとりをするのがめんどくさいからjinkou.txtどこかにうぷれカス
0639デフォルトの名無しさん2006/11/29(水) 18:52:42
[1] 授業単元: プログラミング
[2] 問題文: 一次配列(要素はint型、要素数は30)に格納されている要素を値の小さい順に並べ替える。
配列の初期値は以下のものを使う。
{636, 80, 246, 766, 881, 383, 244, 671, 503, 331,
444, 723, 916, 287, 492, 719, 476, 187, 704, 115,
774, 334, 618, 625, 582, 938, 427, 831, 899, 909}
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:(gcc 3.4 VC 6.0等)
 [3.3] 言語:C++
[4] 期限:12/1 Fri
[5] その他の制限:一応アルゴリズムは指定されていて以下の通りです。
データ構造
ソート対象の配列(要素のデータ型は整数型。要素数は定数N)
ソート済み位置(整数型)
現在位置(整数型)
最小値(整数型)
最小値の位置(整数型)

アルゴリズム
1. ソート済み位置を、配列先頭の要素番号-1から1ずつ増やしながら、 配列末尾の要素番号-1になるまで以下の処理を繰り返す。
1-1. ソート済み位置+1の位置に格納されている要素を最小値とし、その 値と位置を保存する。
1-2. 現在位置をソート済み位置+2から配列の末尾まで変えながら以下の 処理を繰り返す。
1-2-1. 現在位置の要素が最小値よりも小さいならば、その値と位置 を最小値と最小値の位置に代入する。
1-3. 最小値の要素とソート済み位置+1の要素を交換する。
2. 配列の各要素を表示する。

よろしくお願いします
0640デフォルトの名無しさん2006/11/29(水) 19:22:24
>>639
つれづれなるままに

#include <stdio.h>
#define N 30
void ssorti(int *buf,int n){int i,j,k,tmp;for(i=0;i<n-1;i++)
{k=i;for(j=i+1;j<n;j++)if(buf[k]>buf[j])k=j;if(k!=i){tmp=buf[i];buf[i]=buf[k];buf[k]=tmp;}}}
int main(){int i;int array[N]=
{636, 80, 246, 766, 881, 383, 244, 671, 503, 331,
444, 723, 916, 287, 492, 719, 476, 187, 704, 115,
774, 334, 618, 625, 582, 938, 427, 831, 899, 909};
ssorti(array,N);for(i=0;i<N;i++)printf("%d ",array[i]);return 0;}
06415992006/11/29(水) 19:59:43
>>620
おかしくはなりませんでしたよ?
積分範囲:0.000000...0.785398, 刻み数:10, 積分結果:0.429572
積分範囲:0.000000...0.785398, 刻み数:20, 積分結果:0.430616
積分範囲:0.000000...0.785398, 刻み数:100000, 積分結果:0.430964
Maximaによる結果:integrate(sin(2*x)*cos(x), x, 0, %pi/4);→2/3-sqrt(2)/6==0.43096440627115
06425462006/11/29(水) 20:00:44
改良版
#include <stdio.h>
#include <math.h>
#include <float.h>
#define f(x) ((x)-cos(x))

void main(){
double x=1,xBefore=0,a=0,b=1,fa=f(a),fb=f(b),fx=f(x);
while(fx!=0&&fabs(x-xBefore)>DBL_EPSILON){
xBefore=x;
x=b+(b-a)*fb/(fa-fb); //変更箇所
fx=f(x);
if(fa*fx<0) {
b=x;
fb=fx;
}
else {
a=x;
fa=fx;
}
}
printf("x=%.15fの時f(x)=%.15f\n",x,f(x));
}
0643デフォルトの名無しさん2006/11/29(水) 20:01:24
>>616
ありがとうございます。
動作について解説して頂けると今後のために役に立ちます。お願いできませんか?
0644デフォルトの名無しさん2006/11/29(水) 20:32:13
[1] 授業単元: プログラミング
[2] 問題文: 数字を2つ入力し、総積を計算しなさい。
  例) 2と6の場合 2*3*・・・*6
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VC++2005
 [3.3] 言語: C
[4] 期限: 出来れば今日中に・・・
宜しくお願いします。
■ このスレッドは過去ログ倉庫に格納されています