C/C++の宿題を片付けます 77代目
■ このスレッドは過去ログ倉庫に格納されています
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[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
0545544
2006/11/28(火) 15:27:460546デフォルトの名無しさん
2006/11/28(火) 16:39:32VCC++だと#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));
}
0547546
2006/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[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このスレを検索
0550デフォルトの名無しさん
2006/11/28(火) 19:45:55そりゃ不可能だ。
仮にメモリ異常が単にmalloc()/new失敗と言う意味に解釈したとしても、
その状況で確実に異常終了できるかどうかは実はOS次第だからな。
0551デフォルトの名無しさん
2006/11/28(火) 19:49:29[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:53http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3048.c
0553537
2006/11/28(火) 20:17:27ありがとうございました
0554デフォルトの名無しさん
2006/11/28(火) 20:19:53#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:180556デフォルトの名無しさん
2006/11/28(火) 21:11:11期限には間に合いませんがよろしくお願いします。
0557デフォルトの名無しさん
2006/11/28(火) 21:50:49http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3049.txt
0558デフォルトの名無しさん
2006/11/28(火) 22:10:280559デフォルトの名無しさん
2006/11/28(火) 22:11:46new()が使われてない場合はこれじゃだめかも。
#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:002.模範解答をTAに作るように命令。
3.TAがここで問題を丸投げ。
4.生徒が問題を受け取る。
5.生徒がここで問題を丸投げ。 ← いまここ
0561デフォルトの名無しさん
2006/11/28(火) 22:18:47全米が震撼した
0562デフォルトの名無しさん
2006/11/28(火) 22:26:020563デフォルトの名無しさん
2006/11/28(火) 22:29:41[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なんでだよwww
>等分数を最初に設定して計算することは出来た
ここが一番の山じゃねーか
もう終わったようなもんだろwwwwwwwww
あとはforループで、2^iで分割して、
今の値-前の値の絶対値が十分小さかったら終了でいいじゃん
0565デフォルトの名無しさん
2006/11/28(火) 22:34:38そのふたつだけじゃなくて
>>42
も同じ課題だと思う
0566デフォルトの名無しさん
2006/11/28(火) 22:53:25質問者じゃないけど、こういうのもアリですかね?
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>>42じゃなくて>>40じゃね?
0568デフォルトの名無しさん
2006/11/28(火) 23:01:09あ、
>>40だった。スマソ
0569デフォルトの名無しさん
2006/11/28(火) 23:12:07[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問題文それだけ?
0571デフォルトの名無しさん
2006/11/28(火) 23:15:17提示された物は全てです
0572デフォルトの名無しさん
2006/11/28(火) 23:15:52入力するデータが欲しい
0573デフォルトの名無しさん
2006/11/28(火) 23:15:59[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問題文そのまま?
なんか色々省略してない?
0575デフォルトの名無しさん
2006/11/28(火) 23:23:35A君B君C君をはじけばいいらしいです。
D君以降は適当にDVDのみ、ノベルのみ、両方適当でいいっていってました
>>574
とくに省略はしていません
0576デフォルトの名無しさん
2006/11/28(火) 23:24:02じゃぁ先生にこんな問題文じゃ解けないって突き返せ
0577デフォルトの名無しさん
2006/11/28(火) 23:24:43[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台形公式でよければ >>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:39void 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ありがとうございます。
for文の中を前の値==今の値とかやって悩んでましたw
0581デフォルトの名無しさん
2006/11/29(水) 00:00:30#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応募者が賞品の数より少ない場合、
1.A君、B君、C君でも当選する?
2.賞品の当選の優先順位は決まってる?
ちなみに全員ハズレにするのもアリ?
0583デフォルトの名無しさん
2006/11/29(水) 00:09:14お前、ふだんからいい仕事してるんだろうな
0584デフォルトの名無しさん
2006/11/29(水) 00:11:56#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;
}
0585573
2006/11/29(水) 00:22:07ありがとうございます。
講義で台形公式の話をしていたので、台形が公式で十分というか台形公式の
方が良いです。
ただ、エラーが出てコンパイルできません。
>>581
ありがとうございます。
しかし、値が1つしか表示されません。
0586デフォルトの名無しさん
2006/11/29(水) 00:25:04>>1も読めないのか?わざとなのか?
0587デフォルトの名無しさん
2006/11/29(水) 00:27:10[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] その他の制限: 授業で配列に入ったばかり。
0588587
2006/11/29(水) 00:28:4011月29日昼12時まででお願い致します。
0589585
2006/11/29(水) 00:31:22double 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課題
・nが変数として使われてるのに#define n 20なんかしたらどうなるか考えてみる
0591デフォルトの名無しさん
2006/11/29(水) 00:46:59>>応募者が賞品の数より少ない場合、
>>1.A君、B君、C君でも当選する?
当選しません
>>2.賞品の当選の優先順位は決まってる?
決まっていません
>>ちなみに全員ハズレにするのもアリ?
アリです
よろしくお願いいたします。
0592デフォルトの名無しさん
2006/11/29(水) 00:51:36#include<stdio.h>
int main(void){
printf("当選者ナシ\n");
return 0;
}
0593589
2006/11/29(水) 00:51:52あ、確かに変数として使われてますね。
そのエラーは納得できたのですが、講義では数値積分法には台形公式による
方法があります、と言っていただけで、具体的にどのようなものなのか
教わってないので、>>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あと >>212 がレスつけてる先を見てみれば?
0596デフォルトの名無しさん
2006/11/29(水) 00:56:44そのエラー直して解けたんならイインジャマイカと言ってみるt。
0598593
2006/11/29(水) 01:11:41あ、詳しく説明されてますね。課題が完成しても、これからも使いそうなの
で、そこで少し勉強しようと思います。ありがとうございます。
>>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回表示するようにしたら完成、ということなのでしょうか?
0599581
2006/11/29(水) 01:22:36やり直し。台形公式。
#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#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;
}
0603デフォルトの名無しさん
2006/11/29(水) 01:59:19Sleipnir利用者なんかは本当に一部機能を制限されてるからな
知らずにGoogleフル機能だと思ってたら泣ける
0604デフォルトの名無しさん
2006/11/29(水) 02:54:15void 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[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#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#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:55printf("%d桁\n", n); の間違い?
あとn/=10だと一桁少なく出るのでは。
0611デフォルトの名無しさん
2006/11/29(水) 09:41:34ありがとうございます
0612デフォルトの名無しさん
2006/11/29(水) 10:21:34[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君でも当選する?
>当選しません
0615デフォルトの名無しさん
2006/11/29(水) 11:14:22void 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);
}
}
}
0616615
2006/11/29(水) 11:17:12void 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);
}
}
}
0617598
2006/11/29(水) 13:10:53もう提出したので良いのですが疑問に思ったので質問です。
刻み数を10とか少し変えただけで積分結果が結構変わりますが
こんなもんなんでしょうか?
0618デフォルトの名無しさん
2006/11/29(水) 13:12:330619デフォルトの名無しさん
2006/11/29(水) 13:14:080620617
2006/11/29(水) 14:30:04これっておかしくないですか?
0621デフォルトの名無しさん
2006/11/29(水) 14:53:08ドから入力させ,C = A×B を計算して画面表示するプログラムを作成しなさい.ただし,k,m,
n については,k≠m,m≠n,k≠n,k≧2,m≧2,n≧2 を満たす任意の値を設定してよい
分かる方、よろしくお願いします。
0622デフォルトの名無しさん
2006/11/29(水) 15:11:25http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3052.c
0623デフォルトの名無しさん
2006/11/29(水) 16:02:20同一人物かのう
0624デフォルトの名無しさん
2006/11/29(水) 16:05:53間違ってるのは>521だから
0625デフォルトの名無しさん
2006/11/29(水) 16:12:41>>610
0626デフォルトの名無しさん
2006/11/29(水) 16:20:16調べるプログラムを作成せよ。1行の文章中にキーワードが含まれているときには、その位置を表示します。
例えば、キーワードが"calculus"のとき、次のように表示します。
The development of calculus is a good example.
^
また、キーワードが含まれていない場合には、"not found"を表示します。
これをC言語でプログラミングってどうやるんですか?
三日かけてもわかりませんでした
0627デフォルトの名無しさん
2006/11/29(水) 16:21:57>>1
0628デフォルトの名無しさん
2006/11/29(水) 16:54:50関数の使い方の授業なら
strstr() (#include <string.h>)
を使う。
アルゴリズムの授業ならBM法でも実装しろ
0629デフォルトの名無しさん
2006/11/29(水) 17:09:06調べるプログラムを作成せよ。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:15http://pc8.2ch.net/test/read.cgi/tech/1164079451/628
0631デフォルトの名無しさん
2006/11/29(水) 17:22:42[2]問題が長かったのでこちらに
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3053.txt
[3]言語はCでWinとLinux両方です
[4]11月30日午前11時
[5]配列やポインタや構造体といった基礎部分は一応一通りやってます
よろしくお願いします
0632629
2006/11/29(水) 17:23:450633デフォルトの名無しさん
2006/11/29(水) 17:29:19#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[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次配列位しか習ってないです。それ以外も使っていいことに
なってますがまだ初心者なのでできるだけ簡単なものにしていただけると助かります。
#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[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県名と数字を区切っているものは何?
とかこういうやりとりをするのがめんどくさいからjinkou.txtどこかにうぷれカス
0639デフォルトの名無しさん
2006/11/29(水) 18:52:42[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つれづれなるままに
#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;}
0641599
2006/11/29(水) 19:59:43おかしくはなりませんでしたよ?
積分範囲: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
0642546
2006/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ありがとうございます。
動作について解説して頂けると今後のために役に立ちます。お願いできませんか?
0644デフォルトの名無しさん
2006/11/29(水) 20:32:13[2] 問題文: 数字を2つ入力し、総積を計算しなさい。
例) 2と6の場合 2*3*・・・*6
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: VC++2005
[3.3] 言語: C
[4] 期限: 出来れば今日中に・・・
宜しくお願いします。
■ このスレッドは過去ログ倉庫に格納されています