トップページ⇒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
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] 期限: 出来れば今日中に・・・
宜しくお願いします。
06456342006/11/29(水) 20:35:33
>>636さん
ありがとうございます。このプログラムなら何をやっているかがなんとか分かるので助かります。
でもこれだと読み込むテキストファイルの指定がないので動かないのですが…
0646デフォルトの名無しさん2006/11/29(水) 20:46:19
>>645
多分リダイレクトしろって事じゃない?
後、いろいろアレなコードだから(英単語に続いて.や,があると英単語がカウントされない、とか)提出するには気を付けて。
0647デフォルトの名無しさん2006/11/29(水) 20:48:08
>>644
#include <stdio.h>
void main(){
int a,b,di=1,c=1;
printf("ちんこ\n");
scanf("%d",&a);
printf("まんこ\n");
scanf("%d",&b);
if(a>b) di=-1;
for(int i=a;i*di<=b*di;i+=di) c*=i;
printf("うんこ%d\n",c);
}
06486452006/11/29(水) 20:55:42
<<646
アドバイスありがとうございます。,や.の問題も自分でも直せるようもう少し頑張ってみます。
0649デフォルトの名無しさん2006/11/29(水) 21:27:30
>>569
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3054.txt
まあ、悪い例ということで。
0650デフォルトの名無しさん2006/11/29(水) 21:29:29
>>644
#include<stdio.h>
int keisan(int a,int b);

main(){
int num1,num2;

printf("初めの数字を入力してください");
scanf("%d",&num1);
printf("終わりの数字を入力してください");
scanf("%d",&num2);

printf("総積:%d",keisan(num1,num2));
}

int keisan(int a,int b){
int i, ans=a;
for(i=a+1; i<=b; i++){
ans *= i;
}
return ans;
}
0651デフォルトの名無しさん2006/11/29(水) 21:30:50
すいません >>640 の回答はC++ではないですよね。
C++でお願いできませんか?
06521512006/11/29(水) 21:30:59
151をお願いします・・・
0653デフォルトの名無しさん2006/11/29(水) 21:39:44
三つのIPネットワーク
N0:192.168.0.0/24
N0:192.168.1.0/24
N0:192.168.3.0/24
があり、二つのルータR1、R2で接続されている。
R1はN0,N3に接続しており、それぞれネットワークインターフェースne0に
IPアドレス192.168.0.130、同gifに同192.168.3.1が与えられている。
この時、R2の経路表は例えば以下のように表示できる。
ただし、メトリック(Metric)が1である経路には、
データリンク層を用いて通信可能であることを示すものとする。

Network Destination Netmask Gateway Interface Metric
192.168.0.0 255.255.255.0 192.168.3.1 gif2  2
192.168.1.0 255.255.255.0 192.168.1.66 ep0  1
192.168.3.0 255.255.255.0 192.168.3.2 gif2  1


問1
R1とR2に距離ベクトル型経路制御を導入して動作させることを考える。
R1の経路表を示せ。
0654デフォルトの名無しさん2006/11/29(水) 21:43:02
>>653
>N0:192.168.0.0/24
>N0:192.168.1.0/24
>N0:192.168.3.0/24

三つともN0なんですか?

>R1はN0,N3に接続しており

N3が未定義です。

あとスレ違いです。
0655デフォルトの名無しさん2006/11/29(水) 21:49:26
>>651
コンパイルしてみれば分かると思うが、>>640はそのままで正しいC++プログラムだ。
俺の趣味でC++風に書き直すとこんな感じ。

#include <algorithm>
#include <iostream>
const int N = 30;
void ssorti(int *buf, int n)
{
  for(int i = 0; i < n - 1; i++)
  {
    int k = i;
    for(int j = i + 1; j < n; j++)
      if(buf[k] > buf[j])
        k = j;
    std::swap(buf[i], buf[k]);
  }
}
int main()
{
  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(int i = 0; i < N; i++)
    std::cout << array[i] << " ";
  std::cout << "\n";
}
06566202006/11/29(水) 21:52:31
>>641
実際は
for (i = 1; i < d; ++i) {
s += f(a + i * h);
}
s *= 2;
s += f(a) + f(b);
s *= h / 2;
ですよね?
でも、自分は
for (i = 1; i < d; ++i) {
s += f(a + i * h);
s *= 2;
s += f(a) + f(b);
s *= h / 2;
}
としてました。
これが原因だったようです。
自分のミスなのに、おかしい等と文句言って申し訳ありませんでした。
06576552006/11/29(水) 21:58:00
あ、ostream_iteratorを使うのを忘れた。
まあ、ループもたまには良いでしょう。
0658デフォルトの名無しさん2006/11/29(水) 22:01:11
<<634
自分も似たような宿題があるのでやってみましたがうまく動きません。一応プログラム貼りつけとくので
もし634さんがプログラムが完成してたら、どこが間違ってるか教えて下さい。
他の方でも分かる方がいらっしゃったらご指導お願いします。

#include <stdio.h>
#include <stdlib.h>
void main(void){
FILE *fp;
int c=0;
int d=0;
int freg[20];
(fp = fopen("infile.txt", "r")) == NULL;
while ((c = getc(fp)) != EOF) {
switch (c) {
case ' ': freg[d]++; d=0;
break;
case '\n':
break;
case '\t': freg[d]++; d=0;
break;
case ',' : freg[d]++; freg[0]++; d=0;
break;
case '.' : freg[d]++; freg[0]++; d=0;
break;
default: d++; }}
printf("ファイル名: infile.txt\n");
printf("%d ",freg[20]);
fclose(fp);
}
0659デフォルトの名無しさん2006/11/29(水) 22:04:18
少なくともfregは21いるのではないだろうか
0660デフォルトの名無しさん2006/11/29(水) 22:14:13
>>647
>>650
有難うございました!
06616582006/11/29(水) 22:26:42
>>659 言われてみればそうですねort
早速fregは21にして、dが20以上の時はfreg[20]が+1なるように改良してみたんですが
やはり実行すると1245112という意味不明な数字がでるだけです…
もっと根本的なところ間違ってませんかね?
0662デフォルトの名無しさん2006/11/29(水) 22:30:58
fregの内容が不定のまま操作している。
数を数えたいなら0で初期化するべし。
06635992006/11/29(水) 23:23:09
>>656
いや、分かってもらえてよかった。中身を研究して、精進してください。
06646562006/11/29(水) 23:25:57
>>663
はい、色々とありがとうございました。
06656582006/11/29(水) 23:45:30
>>662
アドバイスありがとうございます。おかげで無事できました。
何か初歩的なこと忘れまくりでしたねort
でも659さんや662さんのおかげで凄く勉強になったと思います。
ほんとにありがとうございました。
06666162006/11/29(水) 23:46:08
>>643
ちゃんと動いたかな?

解説しろって言われてもなぁ...当たり前のコードだからなぁ...
お前さんが疑問と思う点を書いてくれれば説明してやれるかも知れん。
0667デフォルトの名無しさん2006/11/30(木) 00:11:53
そうなんだよな。
回答してる側にとっては当たり前すぎてどうわからんのかわからん場合はよくある。
質問してる側もどこが分からんのか分からんくらいに全体的にわからんのかもしれんが、
今後の役に立てようという気概があるくらいならもうちょっとつっこんだ質問をしてくれないと困ると思う。
0668デフォルトの名無しさんNGNG?2BP(202)
>>646
>>610
0669デフォルトの名無しさん2006/11/30(木) 00:42:46
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3055.txt
[3] 環境
 [3.2] Visual Stdio 2003
 [3.3] C++
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3056.txt
提出期限過ぎてて現在執行猶予期間。やばいって!ほんとやばいって!!
0670デフォルトの名無しさん2006/11/30(木) 00:44:22
800+100=1600
0671デフォルトの名無しさん2006/11/30(木) 00:56:26
イチヂク
0672デフォルトの名無しさん2006/11/30(木) 00:56:28
この問題何度目だよ…
0673デフォルトの名無しさん2006/11/30(木) 01:02:50
前スレで3回ぐらい出てたっけ?
ここまで来ると釣りにしか思えないな。
0674デフォルトの名無しさん2006/11/30(木) 01:03:25
>>669
俺の記憶が正しければ君でその問題を丸投げするのは
4人目なんだ
3人目なんかちゃんともう解答済みだと教えてやったのに
「教えてくれるのか教えてくれないのかハッキリしてください」
と逆切れしていたぞ
ひでえ学校だなwww
0675デフォルトの名無しさん2006/11/30(木) 01:05:46
みんな丸投げしてたら評価さがるだろ
俺のところはクローンがあったら
点数をクローンの数で割るとか言ってたけど
偶然同じになったらどうするのかね
ここで見たことある問題あったし
0676デフォルトの名無しさん2006/11/30(木) 01:08:46
>>668
>636のコードで This is a pen. を入力した時の実行結果
0 文字:1 回
1 文字:1 回
2 文字:1 回
3 文字:0 回
4 文字:1 回

pen(3文字)がカウントされていない。
if(c=='.'||c==','){の後にif(j)res[j<21?j:20]++;が必要。
0677デフォルトの名無しさん2006/11/30(木) 01:09:23
>>669
void initialize(int account[]) {
    int i;
    for (i = 0; i < 5; i++) {
        account[i] = 0;
    }
}
void daily_input(int account[]) {
    char* hinmoku[] = {"りんご", "みかん", "イチゴ", "ナシ", "イチジク"};
    int i;
    for(i = 0; i < 5; i++) {
        printf("%s :", hinmoku[i]);
        scanf("%d", account + i);
    }
}
void daily_output(int account[]) {
    char* hinmoku[]={"りんご", "みかん", "イチゴ", "ナシ", "イチジク"};
    int i;
    for(i = 0; i < 5; i++) {
        printf("%s :%d\n", hinmoku[i], account[i]);
    }
}
0678デフォルトの名無しさん2006/11/30(木) 01:26:13
>>677
それだとinputがおかしくね?
という訳で前書いたのを手を入れてコピペ
rand()使ってるから適当に初期化してね


void initialize(int account[]){
for(int i=0;i<=4;i++) account[i]=0;
}

void daily_input(int account[]){
char* hinmoku[]={"りんご","みかん","イチゴ","ナシ","イチジク"};
int tmp;
for(int i=0;i<=4;i++){
printf("%s :",hinmoku[i]);
scanf("%d",&tmp);
account[i]+=tmp;
if(rand()%100==1) account[i]+=700
}
}

void daily_output(int account[]){
char* hinmoku[]={"りんご","みかん","イチゴ","ナシ","イチジク"};
for(int i=0;i<=4;i++){
printf("%s :%d\n",hinmoku[i],account[i]);
}
}
06796762006/11/30(木) 01:42:39
>>668
30分待ってみたけど反応が無いな。もう寝ちゃったかな。

他にも指摘すると、if(j==0){の分岐(不要)とか、そもそもリダイレクトの指定じゃ無いだろ、とか。

まだ回答するには早いんじゃないかな。挑戦も大事だけどじっくり基礎を固めて力をつけてからでも遅くないと思うよ。
0680デフォルトの名無しさん2006/11/30(木) 01:46:01
どなたか>>631もお願いします・・・
0681デフォルトの名無しさん2006/11/30(木) 02:01:07
ガウスの消去法とか、誰がやってもてきとーなの拾ってきても変わらんぜ?
0682デフォルトの名無しさん2006/11/30(木) 04:18:42
>>637です。
県名と数字はひとつの空白スペースで区切られています。
お願いします。
0683デフォルトの名無しさん2006/11/30(木) 04:21:28
>>637>>682
jinkou.txtも作ってくれって事?
君は用意しないの?
06846382006/11/30(木) 04:42:29
          .,Å、
        .r-‐i'''''''''''i''''‐-、
       o| o! .o  i o !o
      .|\__|`‐´`‐/|__/|
       |_, ─''''''''''''─ ,、 / _
     /              \
    /  ノ(  \  ____  /   i
    |   ⌒  ●  {+++}  ●   | キングブチキレス
    !           ̄        ノ
    丶_              ノ 
0685デフォルトの名無しさん2006/11/30(木) 04:50:41
一つのスペースと言いながら637の例には複数スペース使ってたり
ケンカ売ってるとしか思えない
06866292006/11/30(木) 07:45:48
[1]プログラム演習
[2]n×nの正方形状に並んだ点からなる地図があり、各店は陸か水(海、湖、川)
のどちらかを表してるとします。地図の周囲を海とみなし、海から縦方向または
横方向に水を現す点を結合してる点を海に表す点に置き換えるプログラムを作成しなさい。
例えば、陸をa、水をb、海をcで表すと左の地図は右の地図に書き換えられます。
bbaaabaaab   ccaaacaaac
aaaaabaaba   aaaaacaaba
aaaaaaabaa   aaaaaaabaa
aaabbbbaaa   aaabbbbaaa
aaababaaaa   aaababaaaa
aaabbbaaaa   aaabbbaaaa
aaaaaabbaa   aaaaaaccaa
abbbbaabba   accccaacca
abaabaaabb   acaacaaacc
aaaabaaaaa   aaaacaaaaa


[3]C言語(emacs)
[4]今日中
[5]for,while,if文 ポインター 文字列 1,2次配列
0687デフォルトの名無しさん2006/11/30(木) 08:23:41
[1] C言語演習(中級)
[2] 双方向リストを昇順で出力するため、
Sort関数の???の部分を埋めてプログラムを完成させなさい。
なお、関数以外の部分は変えない事。関数内では新たに変数をいくつ追加しても
構わない。
プログラム↓
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3057.txt
[3.1] SunOS(Solaris10)
[3.2] GCC 3.4
[3.3] C言語
[4] 期限: 2006年12月1日AM8:30
[5] Break,Continue,Goto命令の禁止
  2重ポインタの仕組みが全く分からず苦労しています。どうか宜しくお願いします。
0688デフォルトの名無しさん2006/11/30(木) 08:26:08
>>686
for(i=0;i<N;i++) {
if(map[0][i] == 'b')
map[0][i] = 'c';
if(map[N-1][i] == 'b')
map[N-1][i] = 'c';
if(map[i][0] == 'b')
map[i][0] = 'c';
if(map[i][N-1] == 'b')
map[i][N-1] = 'c';
}

while(1) {
int f = 1;
for(i=1;i<N-1;i++) {
for(j=1;j<N-1;j++) {
if(map[i][j] == 'b') {
int k;
int di[4] = {-1, 0, 0, 1};
int dj[4] = {0, -1, 1, 0};
for(k=0;k<4;k++) {
if(map[i+di[k]][j+dj[k]] == 'c') {
map[i][j] = 'c';
f = 0;
}
}
}
}
}
if(f)
break;
}
0689デフォルトの名無しさん2006/11/30(木) 08:33:33
>>687
二重ポインタさえわかればできるの?
二重ポインタ講座でも始めるか
0690デフォルトの名無しさん2006/11/30(木) 08:56:01
>>688
本当にありがとうございます
0691デフォルトの名無しさん2006/11/30(木) 08:57:34
>>686
つ 長いぜ
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3058.txt
0692デフォルトの名無しさん2006/11/30(木) 10:37:11
>>687
ひでえな。循環リストじゃないしダミーリストもないので面倒なんだよなー
0693デフォルトの名無しさん2006/11/30(木) 10:39:08
STL勉強中なんで>>686をなんとなく作ってみたけど
配列とかはvectorがやっぱり楽だなぁ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3059.txt
0694デフォルトの名無しさん2006/11/30(木) 12:05:16
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):整数値を要素にもつ k行m列行列A とm行n列行列B を定義し,それらの要素をキーボー
ドから入力させ,C = A×Bを計算して画面表示するプログラムを作成しなさい.ただし,k,m,
n については,k≠m,m≠n,k≠n,k≧2,m≧2,n≧2を満たす任意の値を設定してよい.
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:12月1日まで
[5] その他の制限: なし

授業で触れなかったのでわからなくて・・・よろしくお願いします。
0695デフォルトの名無しさん2006/11/30(木) 12:24:37
>>640の方、>>655の方、ありがとうございました。
■ このスレッドは過去ログ倉庫に格納されています