気に入らない質問やその他や発言はスルーの方向で。
前スレ987 (32^816077) mod (1009*1013) 電卓片手に計算してみた 答え 2 自分で計算しといてなんだが、なんか信じられん
そんなのって、あんま(余)りだぁ〜〜
あれ?剰余を求めるだけ?なら似たような問題が過去にもあったし、 それを流用すれば良くね?
>>5 いや宿題自体はちがうけど、
答えだけでも教えてほしいって書いてあったから。
なんとなくやってみた
37335
> 32 ^ 816077 mod 1022117 指数を2進展開すると 11000111001111001101 元の計算を二乗と基数倍だけで書くと(逆ポーランド) 1 32 * 2 ^ 32 * 2 ^ 2 ^ ... 2 ^ 32 * 2 ^ 2 ^ 32 * int modpow(int x, int n, int p) { int i; long long int y = 1; for(i = 1 << 30; i > 0; i >>= 1) { y = (y * y) % p; if(n & i) y = (y * x) % p; } return (int)y; }
10 :
デフォルトの名無しさん :2009/01/15(木) 17:09:10
void Point_k(int j,double Point[k][4]); void Point_k(int j,double Point[k][4]){ /*ただ今1辺6Mの正方形*/ int c=NX-1; //X軸の要素数-1 int d=NX-1; int m=c+NY; //i+Y軸の要素数=5 int n=d+NY; //double Point[k][4]; for(j=0;j<k;j++){ if(j<=d){ Point[j][0]=X_memori*j; Point[j][1]=X_memori*j+X_memori; Point[j][2]=0; Point[j][3]=0; このプログラムの意味分かりますか??
long long int y = 1;
10問の一桁同士の四則演算(問題はランダム)の計算ドリルを作り 正解数、正解率、かかった時間を表示させたい。 また、1問10秒という制限をつけ、その制限時間をリアルタイムに表示せよ というものがどうしてもできません。 出題、正解数やかかった時間の表示はできるのですが その先でつまづいています。
ミスって問題文だけ投稿してしてしまいました。
[2] 問題文(含コード&リンク):
>>13 [3] 環境
[3.1] OS: DOS
[3.2]lcc
[3.3] 言語: C言語
[4] 期限: 今日まで
[1]C [2] (1) 12の2乗数は144となり、各桁の数字の総和は1+4+4=9である。 10000以下の正整数で、2乗数の各桁の数字の総和が最大の数字はいくつか? (2) 3乗すると丁度8桁になる正整数はいくつあるか? [3]LINUX C [4]24時まででお願いします。 よろしくお願いします。
>>15 dosでlccとか、死ね
LSI-Cのことだろ
ルールに従わない奴を陰湿に罵倒して自治厨を気取るくせに、 自分が違反しているのを指摘されるとファビョる、引きこもり基地外ニートって 明らかに社会のクズだよね。
>>20 お前だよ、
>>1 も読めないバカは
日本語を習ってから出直せよ、いい年したおっさんが。
お前の人生終わってんぞw
23 :
デフォルトの名無しさん :2009/01/15(木) 18:01:58
19 名前:デフォルトの名無しさん 投稿日:2009/01/15(木) 17:57:04
>>15 dosでlccとか、死ね
LSI-Cのことだろ
↑詰らない揚げ足をとって、自分は知識がありますといった
自己主張が激しい反面、下らないことしか指摘しないため、
社会から干されているバカ
あっ、社会の外れの基地外がまたファビョってますよw
やだね、こういうのって。何でこのスレに来ているんだろう。
別にお前が頼られているわけじゃないんだが?w
まぁ、お前みたいに社会でまともに相手にされない奴が、
ここを生き甲斐にしちゃったんだろうけど、所詮ここは
不特定多数の人が来る2ちゃんねるの一部ですからw
狭い世界で必死になってなさい。お前見たな奴は、出世せずに
この世を去るんでしょうけど、見ず知らずの誰かなんてこっちは
知ったこっちゃないんで、あしからず。さぁ、
>>1 も読めないバカは以後放置よろ。
26 :
デフォルトの名無しさん :2009/01/15(木) 18:18:44
っつか、何かすぐに 死ね って書くけど、人間性の悪さが露呈してますよ? 言われた側が気分を悪くしていると思っているんだろうけど、別の人間から見ると さもしい 人間に見えるよ。
すみません、LSICでした。 なにぶん3ヶ月前にはじめたばかりでもうしわけない
>>17 (1)
#include <stdio.h>
int main( void )
{
int i,j,k,l=0,m=0;
for (i=1;i<=10000;i++) {
k=0;j=i*i;
while(j>0){k+=j%10;j/=10;}
if(k>m){m=k;l=i;}
}
printf("%d:%d\n",l,m);
return 0;
}
lcc.exeだから間違いではない
厳密な数値解及び解析的な近似解ってこれ逆じゃないの? なんで解析解が近似なのさ
>>33 いえ、確かに問題文には
>厳密な数値解及び解析的な近似解
と書いてあります
>>33 使う式のことじゃないのか?
正しい式を数値解析で解くのと
近似式を解析的に解くのとで
>>31 最低でも、3枚目の一番上の式を確認しないとな・・・
>>39 > [1] 授業単元:C言語
> [3.3] 言語: C++
どっちだよ。
C++ならそれで動く。
Cなら
- std:: をすべて消す
- #include <c*****> を #include <*****.h> に直す
- for ループ部の i を for ループの外であらかじめ宣言しておく
- static_cast<int> を (int) に直す
くらいか。
それと、「上手くいきません」じゃなくて具体的に書いとけ。
コンパイルエラーが出たんならエラーメッセージを貼るとか、実行結果がおかしいならどこがどうおかしいのかとか。
>>40 上手くいきました。ありがとございました。
44 :
デフォルトの名無しさん :2009/01/15(木) 23:26:02
[1] 授業単元: プログラミング基礎実習 [2] 問題文(含コード&リンク): s2 の文字列を s1 へ,最大で n 文字未満コピーするstrncpy関数の作成 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: cc [3.3] 言語: C言語 [4] 期限:あさって [5] その他の制限: 関数宣言は char *strncpy(char *s1, char *s2, int n);
>>44 最大で n 文字未満ってことはn-1文字コピーしてNULL文字入れろってことか?
何返せばいいのかもわからん。とりあえずs1そのまま返しておいた
char *strncpy(char *s1, char *s2, int n){
int i;
for(i = 0; i < n-1 && s1[i]; i++)
s1[i] = s2[i];
s1[i] = '\0';
return s1;
}
46 :
デフォルトの名無しさん :2009/01/15(木) 23:46:27
手羽詰ってます、安いよ安いよーよろしくご購入して下さい ><
>>46 元のコードがタイポってるってどういうことよ
49 :
45 :2009/01/16(金) 00:56:45
>>45 ミスってるw
char *strncpy(char *s1, char *s2, int n){
int i;
for(i = 0; i < n-1 && s2[i]; i++)
s1[i] = s2[i];
s1[i] = '\0';
return s1;
}
こうだな
50 :
デフォルトの名無しさん :2009/01/16(金) 01:17:13
皆様のおかげで無事単位を取得できました 本当にありがとうございます これからは人に頼らずできるかぎり自分の力で頑張っていきたいです
ここで回答する側になって人に頼られるようになるともっといいね がんばれ
久々に和んだ
このスレの本質は自分に解ける課題を楽しむというエゴであって 相手のためを考えることなんかじゃない 頼られていると感じたいというエゴでもいいけどさ [1] 授業単元:暇つぶし が好きだ
プログラミングをしたって、商用で使わなきゃ金なんて入ってこないし。 まぁ、趣味でも良いが、カンパウェアとして、任意で気に入ったら 金を払ってくれるソフトでも作ってな。
55 :
デフォルトの名無しさん :2009/01/16(金) 01:56:35
そんなおまいを、KOしてやりたいぜ・・・
ちょっと前にも多倍長演算でヘンテコな質問繰り返してるヤツがいたっけ。
いやね、言語にC++と指定しておきながら、C言語なのは なんでだろ〜なんでだろ〜なんでだなんでだろ〜 って思ってね リングに沈めてやろか?って
Cの課題をC++で解いて提出するのが流行ってるのかね
>>55 んで、どうすれば良いの?int型の上限を超える2つの値の加算のコードを
各自で最初から記述しろと?俺流ので良ければやるが、朝の9時までか・・・もう眠い。
っつか、それ、確かに長いな・・・もっとスマートにしてちょっ
>>61 TermEndRport.docに
>超基本機能版(mcalc0.c)に対して、次の手順に従って、機能を拡張しなさい。
って書いてあるよ
64 :
デフォルトの名無しさん :2009/01/16(金) 02:16:22
同じリンク先のmalc0.cをいじってやるのですが全然わからなくて・・・
>>62 見落としてた。まぁ、出来ないことはないが、
コードの解析が面倒だから、あとはあんたに任せたw
やらないんなら出来ないのと同じw
あんだよぉ、俺を試そうってかぁ?朝の9時までってタイムリミットがあるから 今はやらないんだよぉ。起きたら自主でやるから、許してw
ゴネたけど、見たら仕組みが分かったんで、ステージ2まですぐに終わったから このままステージ4までやるわw
あれ?ステージ2の答えが合ってねーぞ・・・
70 :
デフォルトの名無しさん :2009/01/16(金) 03:03:37
あと、出題者も分かっているとは思うけど、入力する値に マイナスを入れても正常に機能しないので、あしからず。 さっ、寝よっと。
75 :
デフォルトの名無しさん :2009/01/16(金) 03:37:37
ありがとうございます! これで単位が来ます。 ちょっと質問なのですがステージ2の putchar(0x20) は何を意味しているのですか?
76 :
デフォルトの名無しさん :2009/01/16(金) 03:39:27
あ、起きてからでも教えてくださいw
>>76 あっ、いや、 ' ' 空白と同じ。嫌なら変えておいて。
putchar(' '); ね。あと、add(a,b,MAXDIGIT+1); の+1は要らんかったかも・・・
落ち着け
スイマセン、どなたか
>>43 を解いて頂けないでしょうか?
>>43 #include <stdio.h>
#include <string.h>
int main()
{
char str[20] = {0};
int len;
int i;
printf("文字列を入力:");
scanf("%s", str);
len = strlen(str);
for (i=len-1; i>=0; i--)
printf("%c", str[i]);
putchar('\n');
for (i=0; i<len; i++)
printf("%d,", str[i]);
putchar('\n');
for (i=0; i<len; i++)
printf("0x%x,", str[i]);
putchar('\n');
return 0;
}
1.10個の2桁で正の10進データをstaticデータとしてプログラム中にいれ、11個目の数をー999とする。ポインターを使って、この10個の数の合計と平均を求めるプログラムをつくる。 2.Sachiko, Emiko, Setuko, Rie, Mariko, Sara の6人の名前をポインター配列にし、頭文字がSで次の文字がaの名前を表示するプログラムを書け。 3.3つの数字をmain文でscanfで与える。そして、関数maxで3つの数の最大値を求めて、mainに帰り次のように出力する。(p102参照) 3つの数を入力してください? 55 86 32 最大値は86です。 4.do while文をつかって、1から100までの和を求めよ。 5. 練習問題29のメニューの中にそれぞれの金額を設定し、つまり kingaku[ ] という配列をもう一つつくり、2つ以上の品を注文したとき 品名と合計金額をもとめるプログラムをつくる。 メニュー表:1サーロインステーキ 2ビーフストロガノフ 3ヒレカツ定食 4すき焼き定食
85 :
84 :2009/01/16(金) 08:25:19
6. page 137 のソートのプログラムを参考にして、8人の名前をアルファベットでプログラム中に配列で入力しておき(参考p94−ポインタ配列)、ABC順に名前を並べ替える。 p137のソートプログラム参考 #include<stdio.h> #define N 8 Void main (void) /*基本選択法によるソート*/ { Static int a[]={100,55,65,33,211,66,31,90}; Int j,k,min,s,dumy; For (k=0;k<N−1;k++) { Min=a[k]; S=k; For (j=k+1;j<N;j++) { If (a[j]<min) { Min=a[j]; S=j; } } Dumy=a[k]; a[k]=a[s]; a[s]=dumy; } For (k=0;k<N;k++) Printf(“%5d”,a[k]); } 以上です。徹夜してもわからなかったのでお助けください。 よろしくお願いします。
89 :
46 :2009/01/16(金) 11:54:16
訂正します [1] 授業単元:ディジタル信号処理 [2] 問題文(含コード&リンク): 入力値は{1,1,1,1,0,0,0,0}で、出力が 0 4.000 0.000 4.000 1 1.000 -2.414 3.414 2 -0.000 -0.000 0.000 3 1.000 -0.414 1.082 4 0.000 -0.000 0.000 5 1.000 0.414 1.082 6 0.000 -0.000 0.000 7 0.999 2.414 2.613 になる8点FFTプログラムを作成せよ [3] 環境 [3.1] OS:windows vista [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限:16日の17時 [5] その他の制限:なるべく簡単な記述で
>>89 何を訂正したのか知らないけど、
オマエが張ったBASICと思しきコードは一度も実行してないだろ
91 :
46 :2009/01/16(金) 12:10:07
>>90 元のコードはテキストにあったものを打ち込んだだけなんです。。
講師にこのプログラムを参考にC言語で8点FFTを作成しろとだけ言われたもので実行はしてないです。すみません
. ./ \ / \ \ '''''' '''''':::::::::::::/ . |(●), 、(●)、.:| + | ,,ノ(、_, )ヽ、,, .::::| まピョーン☆ . | `-=ニ=- ' .:::::::| + \ `ニニ;‘ .:::::/ + ,,.....イ.ヽヽ、ニ__ ーーノ゙-、. : | '; \_____ ノ.| ヽ i | \/゙(__)\,| i | > ヽ. ハ | ||
93 :
デフォルトの名無しさん :2009/01/16(金) 19:28:50
[1] 授業単元:Computer Prigramming II 第14回:木(ツリー)構造,再帰的関数と再帰的呼び出し
[2] 問題文(含コード&リンク):
下の入出力例のように,適当な数字を入れると,1からその数までの和が計算過程とともに
表示されるプログラムを作りなさい。ループ(for)文を使うものと再帰的関数を使用するも
のの2種類の解答を作ること。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8662.txt [3] 環境
[3.1] OS:Windows Vista / Linux
[3.2] コンパイラ名とバージョン:Visual C++ 2008 Express Edition / gcc
[3.3] 言語:C
[4] 期限:2008年1月25日00:00まで
[5] その他の制限:
94 :
デフォルトの名無しさん :2009/01/16(金) 19:33:54
>>93 ヒント載せ忘れ:
@ループ文とは例えば以下のようなものである。
int i, s=0;
for(i=1;i<=n;i++) s += i;
A再帰的関数の漸化式で表現したものとは例えば以下のようなものである。
int sum(int n){
if(n==1) return( 1 );
else return( n + sum( n-1 ) );
}
int main(void){
scanf( "%d", &n);
printf( "%d\n", sum( n ) );
return 0;
}
95 :
84 :2009/01/16(金) 19:51:24
>>96 使用が固まらない限り、誰にも、どうにも出来ない。
98 :
デフォルトの名無しさん :2009/01/16(金) 21:31:46
[1] 授業単元:C言語 [2] 問題文:2人の人の名前と年齢を入力し、同じ年なら「○○と××は同じ年」、 そうでなければ「○○は××より□歳年上」と表示するプログラムを作成せよ [3] 環境 [3.1] OS: Windows [3.2] [3.3] 言語: C言語 [4] 期限: 1月18日まで 誰か教えてください!!お願いします!!
>>97 仕様とは具体的にどういうことでしょうか?
>>100 そこらへん先生がはっきり言ってくれなかったんですよね…
3枚目は無視してもらって
>>42 のリンク先でやってもらうということはできないでしょうか?
[1] 授業単元:C言語 [2] 問題文:ファイル中の文字数,単語数,行数をカウントするプログラムを作成せよ。 単語の切れ目はアルファベット以外の文字、行の終わりは改行文字またはファイルの終端とします。 この課題のソースファイルで動作確認をしてください。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Visual C++ 2008 Express Edition [3.3] 言語:C言語 [4] 期限:1/18まで [5] その他の制限:特にありません。 よろしくお願いします。
>>103 たぶんですが、
>>42 のリンク先の一番下で
>数値解析してシミュレーションしたのが〜
でいいと思うんですけど…
1.10個の2桁で正の10進データをstaticデータとしてプログラム中にいれ、11個目の数をー999とする。ポインターを使って、この10個の数の合計と平均を求めるプログラムをつくる。 2.Sachiko, Emiko, Setuko, Rie, Mariko, Sara の6人の名前をポインター配列にし、頭文字がSで次の文字がaの名前を表示するプログラムを書け。 3.3つの数字をmain文でscanfで与える。そして、関数maxで3つの数の最大値を求めて、mainに帰り次のように出力する。(p102参照) 3つの数を入力してください? 55 86 32 最大値は86です。 4.do while文をつかって、1から100までの和を求めよ。 よろしくお願いします><
>>98 #include <stdio.h>
int main(void)
{
char name1[32],name2[32];
int age1,age2;
scanf("%s",&name1);
scanf("%d",&age1);
scanf("%s",&name2);
scanf("%d",&age2);
if(age1>age2)
printf("%sは%sより%d歳年上",name1,name2,age1-age2);
else if(age1<age2)
printf("%sは%sより%d歳年上",name2,name1,age2-age1);
else
printf("%sと%sは同じ歳",name1,name2);
return 0;
}
107 :
デフォルトの名無しさん :2009/01/16(金) 22:17:54
>>106 わざわざありがとうございます!助かりました!ありがとうございました!
>>108 だとすると先生側のミスって事ですかね?
らちが明かないので諦めますね ありがとうございました
校名晒されて怖くなったんじゃねぇの
>>113 公開されてる問題文を書き込んでおいて今更なあ・・・
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): <学籍番号(7カラム)><氏名(10カラム)><成績1(2カラム)><成績2(2カラム)> こういう行が100行あるファイルを読み込んで、 点数の平均・標準偏差・偏差値を求め、 その後点数順に表示・順位の項目を加えて表示する。 [3] 環境 [3.1] OS: ウィンドウズ [3.2] Visual C++ [3.3] 言語: C [4] 期限: 1月20日まで [5] その他の制限: 標準偏差と偏差値に関しては構造体を利用する。 よろしくお願いします
116 :
デフォルトの名無しさん :2009/01/17(土) 00:31:00
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):
http://www.k-php.com/lib/uploda/src/file132.jpg この問題をR=0、R=0.2のそれぞれの場合について求めろという課題です
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:Visual C++ 2008 Express Edition
[3.3] 言語:C言語
[4] 期限: 1月19日まで
[5] その他の制限:
特にないです
どなたかよろしくお願いします
専門的な知識が必要な課題が増えてきたなあ。 そういう時期なんだろうなあ。 俺には無理。
118 :
デフォルトの名無しさん :2009/01/17(土) 01:40:43
[1] プログラミング [2] 問題文(含コード&リンク): 画面に任意の次数の単位行列を表示するプログラムを作れ。 [3] 環境 [3.1] OS:Windows XP [3.2] g++ [3.3] C++ [4] 期限:1月19日まで [5] 特に制限はないです。 お願いします;;
>>115 成績1、成績2ってなんだ?
点数とはどう関係する?
>>116 まずは、
v(t) = ...
i(t) = ...
まで手計算で解け
>>118 表示の仕方が良く分からんけど
#include<stdio.h>
int main()
{
int i,j,k;
printf("次数を入れてね:");
if((1!=scanf("%d",&k))||(k<2)) {
printf("入力ミス");
return 0;
}
for(i=0;i<k;i++) {
for(j=0;j<k;j++) {
if(i==j)
printf("1 ");
else
printf("0 ");
}
printf("\n");
}
return 0;
}
>>118 #include <iostream>
using namespace std;
int main(){
int N;
cout << "Input N:";
cin >> N;
for(int i=0;i<N;++i){
for(int j=0;j<N;++j)
cout << ((i==j)?1:0) << " ";
cout << endl;
}
}
>>109 大抵は生徒のミス。
先生がミスってると思うのであれば、解答しなくても点くれるよ。
>>116 以下はR=0.2Ωの場合。RESISTANCE_RがRなので、適当に変えてね。
#include<stdio.h>
#define INDUCTANCE_L 0.5 // インダクタンスL [H]
#define CAPACITANCE_C 0.5 // 容量C [F]
#define VOLTAGE_E 100 // 電圧E [V]
#define RESISTANCE_R 0.2 // 抵抗R [Ω]
#define TIME_STEP 0.001 // 時間刻み [s]
int main() {
double current_i; // 電流i [A]
double charge_c; // Cの電荷 [C]
double voltage_r; // Rの電圧 [V]
double voltage_l; // Lの電圧 [V]
double voltage_c; // Cの電圧 [V] (=v)
int i;
current_i = 0;
charge_c = 0;
for (i = 0; i <= 30000; i ++) {
voltage_c = charge_c / CAPACITANCE_C;
voltage_r = current_i * RESISTANCE_R;
voltage_l = VOLTAGE_E - voltage_r - voltage_c;
if (i % 100 == 0) {
printf("t=%3.3f[s], i=%3.2f[A], Q_C=%3.2f[C], V_R=%3.2f[V], V_L=%3.2f[V], V_C=%3.2f[V]\n",
i*TIME_STEP, current_i, charge_c, voltage_r, voltage_l, voltage_c);
}
charge_c += current_i * TIME_STEP;
current_i += voltage_l / INDUCTANCE_L * TIME_STEP;
}
return 0;
}
125 :
デフォルトの名無しさん :2009/01/17(土) 04:02:42
丸投げでなくてすみません。あと一歩で完成だと思うのですが、実行するとコンソールの途中で処理が止まってしまいます。
(MPI_SendとMPI_Recvのデッドロック?)どこかを少しいじれば完成なのですが、ご指摘頂けませんか?
[1] 並列プログラミング
[2] 問題文(含コード&リンク):
整数を昇順にソートするプログラムを並列プログラミングで作成せよ。
mpirun -np 3 ./a.out 9
のように実行すると、3つのプロセスがそれぞれ3要素の乱数配列を作成し、
プロセス内でバブルソートした後にマージ処理を行って全体での昇順に格納します。
例)
proc0: array[0]=13, array[1]=7, array[2]=5
proc1: array[0]=9, array[1]=4, array[2]=2
proc2: array[0]=20, array[1]=12, array[2]=10
という乱数配列を生成した場合、まずプロセサ内でバブルソートして
proc0: array[0]=5, array[1]=7, array[2]=13
proc1: array[0]=2, array[1]=4, array[2]=9
proc2: array[0]=10, array[1]=12, array[2]=20
とする。最後にマージする。このとき、各プロセス内にarrayと同一個数の
メモリを使用してよいが、それ以上のメモリを使ってはならない。
(この例の場合各プロセスはそれぞれtemp_array[3]を使って良い。)
proc0: array[0]=2, array[1]=4, array[2]=5
proc1: array[0]=7, array[1]=9, array[2]=10
proc2: array[0]=12, array[1]=13, array[2]=20
僕のプログラムの、74行目から102行目までのどこかがおかしいのだと思います。
http://www.dotup.org/uploda/www.dotup.org14059.c.html [3] 環境
[3.1] OS:MacOSX
[3.2] gcc
[3.3] C
[4] 期限:1月17日まで
mpi.h
128 :
126 :2009/01/17(土) 09:14:13
ソースをもう少し整理してください。 57から59の時点でおかしい気がする。 同じアドレスに複数のCPUで同時にアクセスしたらやばいんじゃない? 並列化するなら分割統治法のソートを用いるべき。
130 :
126 :2009/01/17(土) 10:27:06
>>129 レス有り難うございます。同じ配列名ですが、CPU個別で別の配列なのでそれぞれソートしてくれるような気がするのですが。。
(最初の乱数配列作成も同じ手順でやっています)とりあえず、57〜59行目を以下のように変更しましたが、ソートはされませんでした。
for(i=0; i<nprocs; i++) {
if(mype==i) {
bubblesort(array, nlocal);
}
MPI_Barrier(MPI_COMM_WORLD);
}
131 :
129 :2009/01/17(土) 10:36:36
なにー!?
>>130 これってどういう挙動のソート?
for(p=0; p<nlocal; p++) {
for(q=0; q<nlocal; q++) {
if(array[p]>temp_array[q]) {
array[p]=array[p]^array[q];
array[q]=array[p]^array[q];
array[p]=array[p]^array[q];
}
}
}
全体見てないからわからないけど、まさか p == q のときにif文内実行したりはしないよな?
134 :
126 :2009/01/17(土) 10:58:03
>>132 ごめんなさい。一部誤りがありました。以下のように修正させて下さい。(修正しても結果はソートされませんでしたが。。)
for(p=0; p<nlocal; p++) {
for(q=0; q<nlocal; q++) {
if(array[p]>temp_array[q]) {
array[p]=array[p]^temp_array[q]; //array[q]をtemp_array[q]に変更
array[q]=array[p]^temp_array[q]; //array[q]をtemp_array[q]に変更
array[p]=array[p]^temp_array[q]; //array[q]をtemp_array[q]に変更
}
}
}
この意味するところは、
int dummy;
for(p=0; p<nlocal; p++) {
for(q=0; q<nlocal; q++) {
if(array[p]>temp_array[q]) {
dummy=array[p];
array[p]=temp_array[q];
temp_array[q]=dummy;
}
}
}
と同一のつもりです。使って良いメモリはプロセスあたりnlocal*2ですので。。
つまり、arrayとtemp_arrayの配列を比較し、arrayに小さい半分の(nlocal個の)整数を格納し、temp_arrayに大きい半分の(nlocal個の)整数を格納したつもりです。
同一じゃなあああああああああああーい array[q]=array[p]^temp_array[q]; -> temp_array[q]=array[p]^temp_array[q];] ってことかな int dummy; for(p=0; p<nlocal; p++) { for(q=0; q<nlocal; q++) { if(array[p]>temp_array[q]) { dummy=array[p]; array[p]=temp_array[q]; temp_array[q]=dummy; } } } の結果はランダムになると考えてよいのか? それとも、ソート処理の一環と考えるべき?
136 :
126 :2009/01/17(土) 11:19:02
>>133 p==qのときもif処理は実行するようにしています。
例えば、以下のようなケースの場合、
array[0]=2, array[1]=9, array[2]=17
temp_array[0]=1, temp_array[1]=3, temp_array[2]=20
まずarray[0]とtemp_array[0]を比較し、array[0]の方が大きいので交換。
array[0]=1, array[1]=9, array[2]=17
temp_array[0]=2, temp_array[1]=3, temp_array[2]=20
次にarray[0]とtemp_array[1]を比較し、array[0]の方が小さいので何もしない。
次にarray[0]とtemp_array[2]を比較し、array[0]の方が小さいので何もしない。
次にarray[1]とtemp_array[0]を比較し、array[0]の方が大きいので交換。
と続けて行くと、最終的に
array[0]=1, array[1]=2, array[2]=3
temp_array[0]=17, temp_array[1]=9, temp_array[2]=20
となるようにするのが意図です。
>>136 いや
array[p]=array[p]^array[q];
みたいにどっちもarrayだったらの話だから気にするな
138 :
126 :2009/01/17(土) 11:35:23
あっ。。。出来たかもしれません。 最終確認して、正常動作したらアップ致します。
139 :
デフォルトの名無しさん :2009/01/17(土) 11:56:52
140 :
デフォルトの名無しさん :2009/01/17(土) 12:07:09
1] プログラミング [2] 問題文(含コード&リンク): キーボードから入力された0から1までの数字各々の個数をカウントし、表示するプログラムを作れ (例19003と打ち込めば、1・9・3は1、0が2、他は0) [3] 環境 [3.1] Windows xp [3.2] gcc [3.3] C++ [4] 1月20日 [5] 制限なし お願いします。
0から1まで?
142 :
デフォルトの名無しさん :2009/01/17(土) 12:31:26
あッ、間違えました 0から9までです。
>>140 #include <stdio.h>
#include <string.h>
int main()
{
char buf[256], *ptr;
int cnt[10], i;
fgets(buf, sizeof(buf), stdin);
for(i = 0; i < 10; i++){
cnt[i] = 0;
}
for(ptr = buf; *ptr != '\0'; ptr++){
if('0' <= *ptr && *ptr <= '9'){
cnt[*ptr - '0']++;
}
}
for(i = 0; i < 10; i++){
printf("%d: %d\n", i, cnt[i]);
}
return 0;
}
144 :
143 :2009/01/17(土) 12:41:00
#include <string.h> は余計だった。その行は消してくれ。
145 :
デフォルトの名無しさん :2009/01/17(土) 13:11:56
助かりました!
146 :
126 :2009/01/17(土) 13:20:29
147 :
デフォルトの名無しさん :2009/01/17(土) 13:36:13
ASCIIコードのうち印字可能(空白含む)な文字を表示しなさい。 なお、その際、英数字以外の文字は [ ] で囲みなさい。 お願いします
#include <stdio.h> #include <ctype.h> int main(void) { int i; for(i=0; i<256; i++) { if(isprint(i)) { if(isalnum(i)) putchar(i); else printf("[%c]", i); } } return 0; }
>>147 #include <stdio.h>
#include <ctype.h>
int main()
{
int i;
for(i = 0; i <= 0xFF; i++){
if(isprint(i)){
if(isalnum(i)){
printf("%c", i);
} else {
printf("[%c]", i);
}
}
}
return 0;
}
151 :
デフォルトの名無しさん :2009/01/17(土) 15:02:48
[1] 授業単元:プログラミング1 [2] 問題文(含コード&リンク): int型配列“idata[]”に正の整数値が入っているときに、この配列を渡されて、 戻り値として整数値のうちの最大値を返す関数“idmax”および最小値を返す関数“idmin” を作りなさい。 最大値を返す関数:int idmax(int idata[]) 最小値を返す関数:int idmin(int idata[]) ただし、データの最後を識別するために、最終データの次の配列要素には、 「-1」(マイナス1)が入っているものとする。 また、動作を確認するためのmain関数として、キーボードから正の整数値を 1つずつ読み込み、-1を読み込んだのち、関数idmaxおよびidminを呼び出し、 下記のように、読み込んだ整数値、最大値および最小値をディスプレイに 表示するプログラムをつくりなさい。 読み込んだ整数値の個数は、最大でも10個までとして、main関数を作っても構わない。 _____ディスプレイ______ 読み込んだ整数値:○ △ ◇ □ 最大値:△ 最小値:○ _______________ [3] 環境 [3.1] OS: WindowsXP[3.2] Visual studio[3.3] C言語 [4] 期限: 2009年1月19日まで どなたか、分かる方どうぞよろしくお願いします!!!!
>>151 #include <stdio.h>
int idmax(int idata[]) {
int max = *idata;
while(*++idata > 0) if(max < *idata) max = *idata;
return max; }
int idmin(int idata[]) {
int min = *idata;
while(*++idata > 0) if(min > *idata) min = *idata;
return min; }
int main(void)
{
int i, a[11];
for(i=0; i<10; i++) {
scanf("%d", a + i);
if(a[i] == -1) break;}
if(i==10) a[10] = -1;
printf("読み込んだ整数値:");
for(i=0; a[i]!=-1; i++) printf("%d ", a[i]);
putchar('\n');
printf("最大値:%d\n", idmax(a));
printf("最小値:%d\n", idmin(a));
return 0;
}
153 :
デフォルトの名無しさん :2009/01/17(土) 16:32:55
文字処理関数の使用例において、文字の入力に、「scanf("%c", &c);」を使うと is○○関数で上手く判定が出来ないのはなぜですか?
>>153 どうせ改行文字がバッファに残ってるせいなんだんだろうな
>153 標準入力からはいったん文字列で読み込むようにして sscanf(文字列, "%c", &c); ではどうだろうか?
>>153 scanf() で %c を指定すると、1バイトのデータしか入力しません。
'A' を入力すれば、0x41 です。
int型変数 c は、例えば宣言時に不定値が設定されていて 0xffff だったとすると、
それに 0x41 だけを入力するので、0xff41 になってしまいます。
これでは is○○関数では正しい判断は行えません。
回避策ですが、scanf を使わずに、getchar を使う(getchar関数は int型の文字を返却します)。
もしくは、宣言時に int c = 0; とし、0 で変数を初期化するかです。
cがintってどっから出てきた?
>int型変数 c は、例えば宣言時に不定値が設定されていて 0xffff だったとすると、 >それに 0x41 だけを入力するので、0xff41 になってしまいます。 >153 のどこにそんなことが書いてあるんだろう? >154 の推理もすごいけどw
159 :
115 :2009/01/17(土) 17:07:19
>>115 に関して説明不足ですみません。
科目Aの成績と科目Bの成績があって、
それぞれの成績について平均、標準偏差、偏差値を求めるということです。
順位は科目A+Bの成績で出します。
ちなみに実際のファイルの中身はこんな感じ↓
1234567●●●● 1042
ファイルアップしたほうがはやくね?
161 :
デフォルトの名無しさん :2009/01/17(土) 17:33:57
[1] 授業単元:Computer Prigramming II 第14回:木(ツリー)構造,再帰的関数と再帰的呼び出し
[2] 問題文(含コード&リンク):
下の入出力例のように,適当な数字を入れると,1からその数までの和が計算過程とともに
表示されるプログラムを作りなさい。ループ(for)文を使うものと再帰的関数を使用するも
のの2種類の解答を作ること。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8662.txt [3] 環境
[3.1] OS:Windows Vista / Linux
[3.2] コンパイラ名とバージョン:Visual C++ 2008 Express Edition / gcc
[3.3] 言語:C
[4] 期限:2008年1月25日00:00まで
[5] その他の制限:
【質問テンプレ】 [1] 授業単元:プログラミング言語 [2] 問題文(含コード&リンク): 問題3(戻り値がない場合の引数あり) 平行四辺形の底辺tと逆さhを入力して、平行四辺形の面積を求めるプログラムを作りなさい。 ただし、main関数で平行四辺形の底辺tと高さhの入力を行い、 平行四辺形の面積の計算と表示はmensekiという関数で行うこと。 問題4(戻り値がある場合の引数あり) 平行四辺形の底辺tと高さhを入力して、平行四辺形の面積を求めるプログラムを作りなさい。 ただしmain関数で平行四辺形の底辺tと高さhの入力と計算された円の面積の表示を行い、 平行四辺形の面積はmensekiという関数で計算するようにする。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5 [3.3] 言語:C言語 [4] 期限:2009年01月19日まで [5] その他の制限:習い始めて半年です、数学関数まで進みました。 よろしくお願いします。
163 :
デフォルトの名無しさん :2009/01/17(土) 17:54:02
文字処理関数の演習問題 16進数に変換可能な文字列(例えば "AB45")をキーボードから入力し、 10進数の数値に変換しなさい。 わかる方教えてください。。
>>162 問題3
#include <stdio.h>
void menseki(double t, double h)
{
printf("平行四辺形の面積は%lfです\n", t * h);
return;
}
int main()
{
double t, h;
printf("底辺: ");
scanf("%lf", &t);
printf("高さ: ");
scanf("%lf", &h);
menseki(t, h);
return 0;
}
>>162 問題4
円の面積って何だ
#include <stdio.h>
double menseki(double t, double h)
{
return t*h;
}
int main()
{
double t, h;
printf("底辺: ");
scanf("%lf", &t);
printf("高さ: ");
scanf("%lf", &h);
menseki(t, h);
printf("平行四辺形の面積は%lfです\n", menseki(t, h));
return 0;
}
>>161 入出力例を見ると和を入力しているが、入力するのは和なのか?
3を入力→1+2+3を求めるではなく、
3を入力→1+2=3まで計算、なのか?
>>163 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int do_hex(char *str)
{
static const char hex[] = "0123456789abcdef";
static const int digit = sizeof(hex) - 1;
int ch, ret = 0;
char *p;
while(*str != '\0'){
ch = tolower(*str);
p = strchr(hex, ch);
if(p == NULL){
fprintf(stderr, "卑猥な文字:%c\n", *str);
exit(1);
}
ret = digit * ret + (int)(p - hex);
str++;
}
return ret;
}
int main(void)
{
char buf[256];
scanf("%255s", buf);
printf("%s(16) -> %d(10)\n", buf, do_hex(buf));
return 0;
}
168 :
デフォルトの名無しさん :2009/01/17(土) 18:25:34
>>168 こうか?
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int ret, hex;
ret = scanf("%x", &hex);
if(ret != 1){
fprintf(stderr, "俺にも彼女ができる\n");
exit(1);
}
printf("%x(16) -> %d\n", hex, hex);
return 0;
}
みなさんcのコンパイラは 何をお使いでしょうか? おすすめや これは使えないというものはありますか??
174 :
162 :2009/01/17(土) 18:45:48
>>164-165 ありがとうございます!助かりました。
円の面積・・・意味不明ですね、気付きませんでした。
プリント見返してみましたけど円って書いてありますw
先生のミスかな。
gccかclでいいんじゃないかとおもうけど bccってどうなの?
>>176 Windowsでgccって微妙じゃね?
悲しいかな、C関連で一番勢いの大きいスレッドなので、ウザイ自演も沸く・・・
179 :
115 :2009/01/17(土) 22:08:32
>>170 そのとおりです、ありがとうございます。助かりました・・・。
180 :
115 :2009/01/17(土) 22:53:18
何度もすみませんorz
>>170 のを実行してみたらエラーが出て実行できないんですがどこがおかしいんでしょうか・・・
>>180 >>1 ・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
115.txtを探す旅
183 :
115 :2009/01/17(土) 23:29:59
>>183 手直ししたなら、そのプログラムも上げてくれ
多分 grade_t のどっかがおかしいんだと思う
>>180 >
>>170 のを実行してみたらエラーが出て実行できないんですがどこがおかしいんでしょうか・・・
先生!
>>183 が実行時エラーじゃありません!!!
186 :
170 :2009/01/18(日) 00:15:38
あー、VC++だと変数宣言を全部ブロックの先頭に書かないといけないんだっけ?
>>180 >>170 の
const grade_t *x = a;
const grade_t *y = b;
を
const grade_t *x = (const grade_t *)a;
const grade_t *y = (const grade_t *)b;
に書き換えてもダメか?
(*.cppとしてコンパイルしていると想定)
const grade_t *x = (grade_t*)a; const grade_t *y = (grade_t*)b; に変えればとりあえず動くけどフォーマット指定したファイルも出してくれないと ファイル作るの面倒です^;^
&grades[i].numberという書き方はキライだな(個人的には) &(grades[i].number)と書きたい
191 :
デフォルトの名無しさん :2009/01/18(日) 00:59:54
宿題で関数strcpyを自分で作らなければいけません。 自分で作ってみたのですが、うまくいきませんでした。 char *my_strcpy(char *s1, char *s2){ int i = 0; while(s2[i] != '\0'){ s1[i] = *s2; i++; } *s1 = '\0'; return s1; } どこをどう直せばいいのか教えてください。 お願いします。
>>191 s1[i] = s2[i];
s1[i] = '\0';
194 :
デフォルトの名無しさん :2009/01/18(日) 01:10:39
>>192 そんなの貼ると、代入式だってファビョられるぞw
>>195 言われるのはサイトの管理人だから、放っとけよ
JIS X 3010:2003の定義に従えば、条件式⊂代入式
>>102 #include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#define N 256
int main(void)
{
char b[N];
int c = 0, w = 0, l = 0;
FILE *fp;
fgets(b, N, stdin); *strchr(b, '\n') = '\0';
if (!(fp = fopen(b, "r"))) return 1;
while (fgets(b, N, fp)) {
int i = 0;
while(b[i]) { c++; if (!isalpha(b[i++])) w++; }
l++;
}
printf("%d character(s)\n%d word(s)\n%d line(s)\n", c, w, l);
fclose(fp);
return 0;
}
199 :
デフォルトの名無しさん :2009/01/18(日) 13:37:08
まったくできない。 こんな学部入らなければよかった・・
200 :
デフォルトの名無しさん :2009/01/18(日) 13:45:29
大学じゃ、Cの授業なんてなかったなぁ・・・ 独学で覚えて仕事にしてるが。
201 :
デフォルトの名無しさん :2009/01/18(日) 15:50:18
>>93 >1からその数までの和
それなら、45を入力すると
1081 = 1 + 2 + ... + 45
になるはずなのだが。
問題が間違っているのか、出力例が間違っているのかを教えてくれ
202 :
デフォルトの名無しさん :2009/01/18(日) 15:53:32
>>93 >1からその数までの和
それなら、45を入力すると
1081 = 1 + 2 + ... + 45
になるはずなのだが。
問題が間違っているのか、出力例が間違っているのかを教えてくれ
203 :
201 :2009/01/18(日) 15:54:28
連続スマソ
>>201 自分も、何か変だなとは思ったが、例えば36から45の間の数を入力したら
どうするのかと考えたが、問題文を見ると、やはり1〜nまでの和なのかと・・・
205 :
201 :2009/01/18(日) 16:33:34
206 :
201 :2009/01/18(日) 16:48:21
>>93 forでやった場合、問題に合わせたやつ。
出力例にあわせるのはめんどいからパス。
#include <stdio.h>
int sum_n(int);
int main()
{
int i, j, n;
printf("Input any integer >");
scanf("%d", &n);
for (i = 1; i <= n; i++) {
printf("%d = ", sum_n(i));
for (j = 1; j <= i; j++) {
printf(" %d %c", j, (j==i ? '\n': '+'));
}
}
printf("Total: %d\n", sum_n(n));
return 0;
}
int sum_n(int n)
{
return n * (n + 1) / 2;
}
209 :
208 :2009/01/18(日) 17:20:35
もしかすると、sum_nの中身こっちのほうがいいかも。 int sum_n(int n) { int i; int sum = 0; for(i = 1; i <= n; i++) { sum += i; } return sum; }
もしかすると、うpロダ使って書き直すのも良いかも
212 :
デフォルトの名無しさん :2009/01/18(日) 18:53:11
一般ユーティリティ関数の演習問題 * をランダムな個数ずつ、10行画面に出力しなさい。 ただし、最大でも 1行(80個)を越えないこと。 お願いします。
#include <stdio.h> #include <stdlib.h> int main(void) { int i,j; for(i=0;i<10;i++){ for(j=0;j<rand()%80+1;j++)printf("*"); printf("\n"); } return 0; }
>>213 助かりました。ありがとうございます!!
215 :
デフォルトの名無しさん :2009/01/18(日) 19:04:08
>>213 >j<rand()%80+1
これは思いつかんかったわww
ちなみに俺は212ではない
>>213 j<rand()%80+1
これってループするたびに右辺の値が変わったりしないか?
それでも要求仕様は満足するだろうけど
この場合、*の個数の分布はなんだろう?
指数分布だろ近いのは
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 32以下の自然数nを入力し、nビットのグレイコードを出力せよ。 [3] 環境 [3.1] OS: Vista [3.2] コンパイラ名とバージョン: VC2008EE [3.3] 言語: C [4] 期限: 本日中 [5] その他の制限: 標準ライブラリの範囲内で。 よろしくお願いします。
>>219 #include <stdio.h>
int main(void)
{
int i,j,g[6],flg;
unsigned int a;
do {
printf("input number(<=32): ");
scanf("%d",&a);
} while (a>32);
for (i=0;i<6;i++) {
g[5-i]=a%2;
a>>=1;
}
for (i=0;i<6;i++) {
if (g[i]) {
for (j=i+1;j<6;j++) g[j]=(g[j]+1)%2;
}
}
for (i=0,flg=0;i<6;i++) {
if (g[i]) flg=1;
if (flg) printf("%d",g[i]);
}
printf("\n");
return 0;
}
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 天秤の左皿にだけ重さNの物体が載っている。(Nは自然数) 左右の皿に分銅を追加して、天秤が釣り合うようにする。 使える分銅は、重さが1, 3, 9, 27, ...というように 3のべき乗のものがそれぞれ1つずつである。 Nを入力し、分銅の載せ方を表示するプログラムを作成しなさい。 [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン: Visual C++ 2005 [3.3] 言語:C言語 [4] 期限:1/19 午前7時 [5] その他の制限:できるだけスマートな解法でお願いします。
組み合わせが存在しない場合は?
>>223 左の皿に分銅を載せるのも考慮すればいかなる場合でもおk
[1] 授業単元:計算機プログラム [2] 問題文(含コード&リンク): 3つの数を引数としてとり、大きいほうの2つの数の和を繰り返す手続きを作成しなさい。 (例えば、最初に最小値を見つける。次に3つの数の和から最小値を引く) [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:不明 [3.3] 言語: C [4] 期限: 1月19日 [5] その他の制限:特にありません よろしくお願いします
>>225 すみません訂正します
[2] 問題文(含コード&リンク):
3つの数を引数としてとり、大きいほうの2つの数の和を返す手続きを作成しなさい。
でした。繰り返すではなく返すでした。
>>221 それはn番目のグレイコードであって、nビットのグレイコードではないな。
228 :
デフォルトの名無しさん :2009/01/18(日) 21:35:56
230 :
デフォルトの名無しさん :2009/01/18(日) 21:41:29
>>225 int addition(int a,int b,int c) {
if(a<b){
if(a<c) return b+c;
return a+b;
} else {
if(b<c) return a+c;
return a+b;
}
return 0;
}
232 :
115 :2009/01/18(日) 21:43:29
234 :
デフォルトの名無しさん :2009/01/18(日) 21:49:02
>>219 これで良いだろう
#include <stdio.h>
int main(void)
{
int i,j,g[6],flg;
unsigned int a;
do {
printf("input number(<=32): ");
scanf("%d",&a);
} while (a>32);
for (i=0;i<6;i++) {
g[5-i]=a%2;
a>>=1;
}
for (i=0;i<6;i++) {
if (g[i]) {
for (j=i+1;j<6;j++) g[j]=(g[j]+1)%2;
}
}
for (i=0,flg=0;i<6;i++) printf("%d",g[i]);
printf("\n");
return 0;
}
>>213 っていうか、srandしてないから不味くね?
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): (1) キーボードから入力された0から9までの数字各々の個数をカウントし表示するプログラムを作れ (2) 画面に任意の次数の単位行列を表示するプログラムを作れ (3) 学生の数をまず入力した後、各自の試験成績(1課目)を順次入力した後、 最高点・最低点・平均点をそれぞれ求めて表示するプログラムを作れ [3] 環境 [3.1] OS:WindowsVista [3.2] コンパイラ名とバージョン:不明 [3.3] 言語:C++ [4] 期限:1月21日 [5]その他の制限:特にありません よろしくお願いします
>>237 (3)
#include<iostream>
#include<algorithm>
#include<numeric>
#include<vector>
int main() {
int num, score;
std::cout << "Number of students = ";
std::cin >> num;
std::vector<int> scores;
for (int i = 0; i < num; i ++) {
std::cout << "Student" << 1+i << "'s score = ";
std::cin >> score;
scores.push_back(score);
}
std::cout << "-----\n";
std::cout << "The highest score is " << *std::max_element(scores.begin(), scores.end()) << ".\n";
std::cout << "The lowest score is " << *std::min_element(scores.begin(), scores.end()) << ".\n";
std::cout << "Average score is " << std::accumulate(scores.begin(), scores.end(), 0) / scores.size() << "." << std::endl;
return 0;
}
241 :
201 :2009/01/18(日) 22:11:34
>>237 (1)
出力は勝手に考えた
#include <stdio.h>
int main(void)
{
int num[10] = {0,0,0,0,0,0,0,0,0,0};
int n = 0;
int i = 0;
while(1){
printf("input:");
scanf("%d",&n);
if(n <= 10) num[n]++;
for(i = 0;i < 10;i++)printf("%d:%d\n",i,num[i]);
printf("\n");
}
return 0;
}
C++と聞くととたんにがんばる奴がいるなw
> int num[10] = {0,0,0,0,0,0,0,0,0,0}; フイタw
244 :
デフォルトの名無しさん :2009/01/18(日) 22:13:21
[1] 授業単元:プログラミング [2] 問題文: あるゼミの各学生の名前、読み仮名、点数を入力し、最高点を取った学生の名前と 点数を表示せよ。今まで入力した中で何番目の学生が最高点かを記録するための 変数max_iを用意し、最高点が更新されるごとにmax_iを更新する。但し、max_iの 初期値は0とする。 [3] 環境 [3.1] OS:Windows [3.2] [3.3] 言語:C言語 [4] 期限:1月19日 [5] その他の制限: 全くわからないので誰か教えてください!!よろしくお願いします!!
>>243 int num[10] = {0};
でいいことぐらい分かってるよ
247 :
222 :2009/01/18(日) 22:16:31
ちょっと細工しておくと検索しやすくなるんだよ 誰が検索するのかは秘密♥
250 :
201 :2009/01/18(日) 22:24:24
一応言っておくが、
>>245 は俺ではない(汗)
あと、
int num[10] = {0};
は知らんかった。
>>201 は中坊だというわけで許してくれw
なにがなんだか分からない・・・・・・・
252 :
225 :2009/01/18(日) 22:25:28
254 :
201 :2009/01/18(日) 22:26:15
>>249 ん?俺の環境(bcc)では動作するぜよ
>>254 動作する、コンパイルできたからといって、問題通りの
実行結果が出る、機能しているとは限らない。
>>254 if(n <= 10) num[n]++;
↓
if(n>=0 && n<10) num[n]++;
>>241 int num[10]
if(n <= 10) num[n]++;
フイタw
>>232 だから、宣言文をブロックの先頭にしろって
VCとか関係なくC89の仕様
261 :
201 :2009/01/18(日) 23:42:37
262 :
デフォルトの名無しさん :2009/01/19(月) 00:12:27
昨日も書き込んで、アドバイスをもらったのですが、 ちょっとしたトラブルが発生したので、もう一度書き込みます。 #include<stdio.h> char *my_strcpy(char *s1, char *s2){ int i = 0; while(s2[i] != '\0'){ s1[i] = s2[i]; i++; } s1[i] = '\0'; return s1; } int main(){ char *s1 = "abc"; char *s2 = "wxyz"; my_strcpy(s1, s2); printf("s1:%s s2:%s \n", s1, s2); return 0; } s2の文字数がs1の文字数より大きいとき、 s2が表示されないのはなぜでしょう。 教えてください。 よろしくお願いします。
>>262 a←s1
b
c
\0
w←s2
x
y
z
w
my_strcpy後
w←s1
x
y
z
\0←s2
x
y
z
w
あとは分かるな(ちなみにこの上書きは必ず起こるとは限らん)
あと char *s2 = "wxyz";
という風に宣言した文字列リテラルを書き換えるのはNGだ
うまく動かしたい場合は取り合えず
char s1[10] = "abc";
char s2[10] = "wxyz";
とでもするがいい
おっと訂正 a←s1 b c \0 w←s2 x y z w \0 my_strcpy後 w←s1 x y z \0←s2 x y z
また間違えた、死のう a←s1 b c \0 w←s2 x y z \0 my_strcpy後 w←s1 x y z \0←s2 x y z \0
gcc4.1.2だとs1[i] = s2[i]を実行した瞬間に死ぬぜ。 vcはどうなってる?
267 :
262 :2009/01/19(月) 01:11:21
どうすればよいのでしょうか。
>>267 取り敢えず、リテラルを書き換えないことと、
配列に確保した領域を超えて書き込まないことじゃね?
269 :
102 :2009/01/19(月) 01:16:14
>>267 #include <stdio.h>
char *my_strcpy(char *s1, char *s2)
{
int i = 0;
while (s1[i] != '\0' && s2[i] != '\0'){
s1[i] = s2[i];
i++;
}
s1[i] = '\0';
return s1;
}
int main()
{
char s1[] = "abc";
char s2[] = "wxyz";
my_strcpy(s1, s2);
printf("s1:%s s2:%s \n", s1, s2);
return 0;
}
while ( s1[i] && s2[i] )
272 :
262 :2009/01/19(月) 01:22:14
while (s1[i] & s2[i])
>>267 char *s1 = "abc";
char *s2 = "wxyz";
my_strcpy(s1, s2);
を
char *s2 = "wxyz";
char *s1 = "abc";
my_strcpy(s1, s2);
でどう?
ちなみにmy_strcpyには返り値が有る筈なんだが……
>>275 wwwwwwwwwwwwwwwwwwwwwwww
>>275 s1とs2の中身を換えたいの?それとも、引数の順番を換えたいの?
何がしたいの?死体としたいの?
ロシアではwxyzをabcにする、ガハハ!
>>280 お前が他人の素性を探りたがっていることはよくわかった
>>1 > 気に入らない質問やその他や発言はスルーの方向で。
答えたくなければ、こんなスレに来ないか、スルーすれば良いだろ
282 :
201 :2009/01/19(月) 02:25:07
>>275 GJ!!ww
>>278 メモリ上でs1、s2と並んでいるのをs2、s1の順番にするってこと。
s2の方がサイズが大きいから、s1をコピーしてもs1への影響がなくなる。
なんの冗談だよw
実際の環境でどういう挙動になるかも大事だが、 そもそも文字列リテラルの書き換え自体が未定義だろ。やっちゃいけない。
>>282 意味がわかってねーだろ、お前?wwwwwwwww
もう一度コードをよく見ろ。
287 :
201 :2009/01/19(月) 03:13:02
>>275 >>275 >>275 >>275 >>275 >>275 >>275 s1とs2が何か?それでいて、my_strcpy(s1, s2); の順番が同じだが
その中身のコードを書き換えたわけでもなく・・・201は同じ人物?
だとしたら、かなり頭が悪いか、池沼レベルだな・・・口出ししない方が身の為だぞ。
墓穴を掘って、逆にバカにされるぞ、お前・・・もう学校ではアホ扱いされているだろうけどw
>>287 何を説明しろって言うんだよ・・・違うとかって話じゃないだろ。
お前が分かっているのか?って聞かれているんだが?
>>282 は勝手に解釈したのか、
>>275 のコードが理解できないのか、
視覚に問題のある障害者なのか・・・
>>275 char *s1 = "abc";
char *s2 = "wxyz";
char *s2 = "wxyz";
char *s1 = "abc";
↑記述する順番を逆にしても、s1とs2の中身はどうよ?w
my_strcpy(s1, s2);
my_strcpy(s1, s2);
↑これも逆にしたわけでもないし・・・
291 :
201 :2009/01/19(月) 03:31:07
>>280 >>290 一応アホと言っておく
ちなみに俺は
>>275 とは無関係
C(C++)では書いた順番によってメモリ配置が変わるんだよ。
これくらい知っとけ。
お前(達)は中坊以下か?
こんな時間に書き込み出来るのは無職・ニートだけ! 中学生以下は寝てますよ。
自分が大学生の時にもいたけど、こっちが間違っていないのに 何か指摘すると、必死に言い返すバカって、本当に始末が悪くて 迷惑した。態度も悪いし。まさに201みたいな、自分が知能が低いくせに 食い下がる基地外みたいにな。少し黙ってろ、ド素人は。 あのコードを見て、何が違うかも説明できないお前が、勝手に 思い込んだだけだろ。
201が必死必死必死必死w
>>258 とか、
>>275 らしき、もう一匹バカがいるようだが、日本語が読めないアホだろ?w
295 :
201 :2009/01/19(月) 03:39:53
>>292 すまん。一応俺も無職ww
>>293 お前の環境で実行してみたか?
分かってると思うけど、最適化施したら正常に機能しない可能性がある
俺の環境(Windows(bcc))だったらちゃんと機能した
296 :
201 :2009/01/19(月) 03:42:17
ttp://www.bohyoh.com/CandCPP/C/Library/strcpy.html 答えは出てんだよw いつまで分かりきったことで、必死に
意味も無い、間違った持論を展開するんだね、君は?w
まぁ、こんな場所に来ている人なんてごく一部だし。
そんな一部の人間にさえ、理解されない視野の狭い井の中の蛙w
とりあえず、こんな時間に起きていて、不規則な生活が習慣になっているなら
それを正した方が良いよ。早死にの原因だから。俺?不規則というのは
規則性がないことであって、この時間から明け方までが俺が起きている時間さ。
だって、俺は今、ジャポンのオーバーシーにいるから、時差でこっちは昼間なんだよw
日本語でおk
299 :
201 :2009/01/19(月) 03:47:58
>>297 人の話聞いてる?
>>All
スレ汚してスマンorz
300 :
201 :2009/01/19(月) 03:53:41
>>296 ごめん。訂正。
こりゃ厳密には自演って言わないね。
頭が鈍ってきたw
寝るわ。
301 :
デフォルトの名無しさん :2009/01/19(月) 03:55:01
201は本当にバカだ。あれほどレスするなと言われても、必死になっていることを わざわざ露呈するなんて。今年一の、このスレの恥さらしだ!通報しますた!
302 :
201 :2009/01/19(月) 03:56:36
そもそも話題のmy_strcpyがstrcpyの要件を満たしていない件
304 :
デフォルトの名無しさん :2009/01/19(月) 04:01:29
んでさ、その大学生時代の、食い下がり野郎がさ、まともに使えもしない英語を使うんだわ。 I go to a bus とか言っちゃってさ。何?って聞いたら、風呂に入ってくるってさ、ぎゃははは(バンバン マジ受けるんですけどぉ〜?理系に進んだとは言え、英語の成績は良かった俺が take a bath って言ってやったんだけどさ、妙に食い下がる正確のせいか、辞書で調べたらしく have a bath とも言うんだよぉ〜とか言ってやんの。別にそう言わないとは、こっちは言ってないのに。 だったら最初から辞書を引けよってかーんじ。まぁ、それでも take a bath が一般的なんだけどね。 英語圏で生活してみろっちゅーのっw 俺?だからさ、さっきっから言っているだろ?ジャポンのオーバーシーだから、昼間だって。 まだ風呂に入る時間じゃないが、シャワーを浴びるしw
>>237 > キーボードから入力された0から9までの数字各々の個数をカウントし表示するプログラムを作れ
”各々の個数をカウント”
日本語が読めないのか、出題者が19003だったら1,3,9が1つ、0が2つといった書き方をすれば良かったのか
にしても、201が書いたコードは、whileループを抜けないまま強制終了でもさせなきゃ駄目だし。
コンパイラに通って、実行できたからといっても、題意の通りに機能したわけでもないというのに・・・
307 :
デフォルトの名無しさん :2009/01/19(月) 05:37:03
誰かお願いします。 int型の変数numに初期値99を、char型の変数chに初期値'Z'を設定し、それを 表示するプログラムex6_2を作成せよ。 プログラムの作成にあたり、以下に従うこと。 ・int型の変数numとchar型の変数chはmain()関数内で宣言すること ・numとchへの初期値設定はinit_var()関数にて行うこと。 ------------------------------------------------------ void init_var(int *pnum, char *pch); 返り値:なし 引数 :pnum:数値格納変数へのポインタ pch :文字格納変数へのポインタ 処理 :数値格納変数に数値99を、文字格納変数に文字'Z' を格納する ------------------------------------------------------ ※main()関数内の変数に対して別関数init_var()にて値を書き込むため、 引数としてポインタを用いる 《実行例》 >ex6_2 num = 99, ch = Z ←変数の値を表示するだけ
308 :
デフォルトの名無しさん :2009/01/19(月) 05:38:10
これも int型の変数3個(※配列で宣言する)に数値を入力し、その合計を求めて表示する プログラムex6_3を作成せよ。 プログラムの作成にあたり、以下に従うこと。 ・入力数値を格納するint型の配列はmain()関数内で宣言すること ・指定された個数の数値の合計を求める関数getsum()を自作して使うこと。 getsum()関数の仕様は以下の通り。 ----- getsum() ---------------------------------------------------- int getsum(int *pnum, int numcnt); 引数 :pnum :数値を格納している配列の先頭アドレス numcnt :和を求める変数の個数 返却値:算出した和 処理 :指定された個数の変数の和を求める ------------------------------------------------------------------- ※getsum()は、「int getsum(int *, const int);」としてもよい 《実行例》 >ex6_3 Enter number(1) : 10 Enter number(2) : 23 Enter number(3) : 41 Sum = 74
309 :
デフォルトの名無しさん :2009/01/19(月) 07:18:52
なんだかなぁ・・・
最近テンプレを読む能力もないお馬鹿さんが増えてるよね
>>307 #include <stdio.h>
void init_var(int *pnum, char *pch) { *pnum = 99; *pch = 'Z'; }
int main(void) { int num; char ch; init_var(&num, &ch); printf("num = %d, ch = %c\n", num, ch); return 0; }
>>308 #include <stdio.h>
int getsum(int *pnum, int numcnt)
{
int sum, i;
for (i = sum = 0; i < numcnt; ++i) sum += pnum[i];
return sum;
}
int main(void)
{
int pnum[3], i;
for (i = 0; i < 3; ++i) { printf("Enter number(%d) : ", i + 1); scanf("%d", &pnum[i]); }
printf("Sum = %d\n", getsum(pnum, 3));
return 0;
}
312 :
デフォルトの名無しさん :2009/01/19(月) 14:53:05
ねむい
>>313 課題は原文を貼ってくれないと
素人の考えた文言は意味不明で読み解けない。
315 :
313 :2009/01/19(月) 18:03:57
>>314 一応これが原文なのです・・・。
丁寧すぎるというか、確かに読み解きにくいですね・・・。
うーん困った・・・。
>>315 >3つのchar型のメンバー変数(ポインタ)
とか、専門家が考えた文言とは思えない。
317 :
デフォルトの名無しさん :2009/01/19(月) 18:58:42
厨房に負けてるお前らワロスwwww
>>318 今問題部読んでみたけど、表示の際に分岐させる指示がない気がする
『data12 には〜』の部分は誤植で、実はこうさせたかったのではなかろうか?
引数1→ n,n,n-n
引数2 → n,m,n-m
【質問テンプレ】 [1] 授業単元: 情報処理 [2] 問題文(含コード&リンク): テキストファイル(test.txt等)を開いてabcという文字列があったらその部分だけを削除するプログラムを作成せよ。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VC++ 2008 [3.3] 言語: C++ [4] 期限: 1月20日 [5] その他の制限: 特にないです よろしくお願いします
321 :
デフォルトの名無しさん :2009/01/19(月) 19:47:43
323 :
201 :2009/01/19(月) 21:22:55
324 :
115 :2009/01/19(月) 21:30:58
>>238 >>170 はファイル名以外だと、変数の宣言をブロックの最初に持って来たくらいです
他は触ってません。
ビルドしてから実行しようとしても、「このプロジェクトは変更されています ビルドしますか」というメッセージが出て、
実行すると「.exeを開始できません」とエラーが出ます。
[1] 授業単元:情報計算処理 [2] 問題:y=x * tan(x) と、y = (a^2 - x^2)^(1/2) の連立方程式をxについて解け。ただしaは定数である。 二分法を用いること。余裕があればニュートン法も試してみよ。 [3] 環境 [3.1] OS: Windows [3.2] gcc 3.4 [3.3] 言語: C [4] 期限: 特になし [5] その他の制限: 二分法だけでもよいので、よろしくお願いします。
326 :
デフォルトの名無しさん :2009/01/19(月) 21:44:28
329 :
デフォルトの名無しさん :2009/01/19(月) 22:53:41
>>322 わざわざ本当にありがとうございます!!
これが一部のプログラムなんですが、これからでも作成できますか?
よろしくお願いします。
#include <stdio.h>
int main(){
Seito zemi[10];
printf("全部で何人?"); scanf("%d", &n);
for (i = 0; i < n; i++) {
printf("%d 人目の名前は?", i + 1);
scanf("%s", zemi[i].namae);
printf("読み仮名は?");
scanf("%s", zemi[i].kana);
printf("点数は?");
scanf("%d", &zemi[i].ten);
}
printf("%s さんが%d 点で最高です\n",
zemi[max_i].namae, zemi[max_i].ten);
return 0;
}
なぜ階乗を求める問題として出題しないノカー!?
pi = 3.141592; 引数nは{-100,-99,-98, ... -2,-1,0,1,2, ... 99,100}として cos(2*pi*n/100)の値のうち、大きな値から順に29個を選択し、 大きい順に並べた配列にするプログラムって、どう書けばいいんですか?
テンプレまもらないとC++/CLIで答えちゃうぞ?
>>334 ちょっとまてそれは…と思ったが別にスレチじゃないのか
いいぞもっとやれー
普段使わないから見てみたい
>>331 #include <stdio.h>
int main(int argc, char *argv[]){
int i, factorial;
i = 1;
factorial = 1;
while(i <= 10)
factorial *= i++;
printf("%d\n", factorial);
for(i = 1, factorial = 1; i <= 10; i++)
factorial *= i;
printf("%d\n", factorial);
return 0;
}
338 :
デフォルトの名無しさん :2009/01/20(火) 00:31:34
>>166 さんの指摘していただいた通り、
>>161 は1から入力した数値までの和を表示するプログラムでした。お願いします。(ちなみに無期限でした
339 :
デフォルトの名無しさん :2009/01/20(火) 00:43:44
[1] 授業単元:プログラミング [2] 問題文:HDD上の英文のテキストファイルを読んで、使用されている単語を抽出し、アルファベット順に整理して書き出すプログラム [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Visual C++ 2008 Express Edition [3.3] 言語:C [4] 期限:1/21まで [5] その他の制限:特にないです。 よろしくお願いします。
>>340 単語に区切る基準がわからん。
スペースだけでいいのか?
342 :
デフォルトの名無しさん :2009/01/20(火) 01:23:35
>>342 式のまんま
#include<stdio.h>
#include<math.h>
double C(int x) { return x == 0 ? (1 / sqrt(2)) : 1; }
int main() {
double f[8][8] = {
{205,163,155,139,144,137,153,151,},
{212,183,171,148,134,138,162,154,},
{205,188,180,173,156,153,183,162,},
{183,163,166,187,183,174,193,146,},
{195,158,149,150,158,139,134,144,},
{193,163,154,161,181,183,169,163,},
{140,132,135,140,153,168,165,165,},
{107,108,122,122,122,134,153,166,},
};
double F[8][8], PI = atan(1)*4;
int u, v, x, y;
for (u = 0; u < 8; u ++) { for (v = 0; v < 8; v ++) {
F[u][v] = 0;
for (x = 0; x < 8; x ++) for (y = 0; y < 8; y ++)
F[u][v] += f[x][y] * cos((2*x+1)*u*PI/16) * cos((2*y+1)*v*PI/16);
F[u][v] *= C(u) * C(v) / 4; printf("%10.4f ", F[u][v]);
} printf("\n"); } printf("\n");
for (x = 0; x < 8; x ++) { for (y = 0; y < 8; y ++) {
f[x][y] = 0;
for (u = 0; u < 8; u ++) for (v = 0; v < 8; v ++)
f[x][y] += C(u) * C(v) * F[u][v] * cos((2*x+1)*u*PI/16) * cos((2*y+1)*v*PI/16);
f[x][y] /= 4; printf("%10.4f ", f[x][y]);
} printf("\n"); } return 0;
}
[1] 授業単元:数値解析 [2] 問題文: 次の微分方程式をルンゲ・クッタ法を用いて解くプログラムを作成せよ。(指定区間の数値解を求めよ。) @ dy/dx = 4y/(x+1), 初期条件 x0 = y0 = 1, 区間 [1:10] A dy/dx = x^2 - y, 初期条件 x0 = y0 = 1, 区間 [1:10] 考察事項 - 数値解のプロット - 微小区間 Δx の幅を変化させたときの振る舞い - 解析解との比較 [3] 環境 [3.1] OS:WindowsVista [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5 [3.3] 言語:C言語 [4] 期限:2009年1月21日00:00まで [5] その他の制限:なるべく簡単な関数でお願いします
どなたか私の預金口座に1000万円をお恵みで振り込んで下さい、宜しくお願いします
じゃあ今から携帯持ってATMへ行ってください 操作を指示しますから
立場が逆やんw
いいえ、受け取り手続きのために必要なことです
自己解決しました
>>352 #include <stdio.h>
int main(void)
{
char c;
scanf("%c", &c);
if ('A' <= c && c <= 'Z') printf("%d\n", c - 'A' + 1);
if ('a' <= c && c <= 'z') printf("%d\n", c - 'a' + 1);
return 0;
}
>>345 とりあえずプログラムだけ。
#include <stdio.h>
double f(double x, double y)
{
// return 4 * y / (x + 1);
return x * x - y;
}
double Runge_Kutta(double x0, double y0, double x1, double delta)
{
double k1, k2, k3, k4;
double y = y0;
double x = x0;
while (x - x1 < 0)
{
k1 = f(x, y);
k2 = f(x + delta / 2.0, y + delta * k1 / 2.0);
k3 = f(x + delta / 2.0, y + delta * k2 / 2.0);
k4 = f(x + delta, y + delta * k3);
y += delta * (k1 + k2 * 2 + k3 * 2 + k4) / 6.0;
x += delta;
}
return y;
}
int main(void)
{
double delta = 1e-4;
printf("delta=%f, y=%f\n", delta, Runge_Kutta(1, 1, 10, delta));
return 0;
}
>>347 一応食指は動くんだが、時間がね。
あんま期待しないでね。
>>352 お前、たったそれだけの文ぐらいレスに書けよ。w
357 :
デフォルトの名無しさん :2009/01/20(火) 11:36:13
[1] 授業単元:コンピュータプログラミング [2] 問題文: チーム数nを指定し、総当たり戦での一組の対戦カードの試合数mを指定する。 各々のチームの名前(全角の漢字またはカタカナやアルファベット)と、 勝ち数および引き分け数をA−B、A−C、・・・、B−C、B−D、・・・の対戦カード順でキーボードから入力し、 勝率を計算して、勝率の高い順に並び替えてチーム名、全試合数、全勝ち数、全負け数、全引き分け数、 勝率を表示しするプログラムを作成しなさい。 また、勝ち数+引き分け数<=試合数となるような安全装置をつけなさい。 [3] 環境 [3.1] OS:Windows [3.2] [3.3] 言語:C言語 [4] 期限:1月24日 [5] その他の制限:最初の部分で引っかかってしまい、手詰まりの状況です。よろしくお願いします。
359 :
デフォルトの名無しさん :2009/01/20(火) 12:56:34
>344さんありがとうございます {205,163,155,139,144,137,153,151,}, {212,183,171,148,134,138,162,154,}, {205,188,180,173,156,153,183,162,}, {183,163,166,187,183,174,193,146,}, {195,158,149,150,158,139,134,144,}, {193,163,154,161,181,183,169,163,}, {140,132,135,140,153,168,165,165,}, {107,108,122,122,122,134,153,166,}, }; の値を自由に変えるために自分で入力する形に変える場合は、ここからどのように変更すればいいのでしょうか。
362 :
313 :2009/01/20(火) 17:00:35
363 :
340 :2009/01/20(火) 18:49:27
>>341 よくわからないのですが、
任意でお願いします。
364 :
デフォルトの名無しさん :2009/01/20(火) 19:39:40
自分はC言語を習いたてです. C言語のリスト構造でお聞きしたいのですが ”リスト構造に記憶された整数が小さい順になる場所を探して挿入できる プログラムを作成せよ"の日本語がよくわかりません ランダムに整数を打ち込んで,それが小さい順に表示されるようにするという ことですか?
>>366 ありがとうございます
なんとか頑張ってみます
369 :
201 :2009/01/20(火) 22:07:13
>>368 deleteの実装だけ・・・insertの形式に無理やり近づけたバージョン。
void delete(struct record ** listPointer, int score)
{
if (*listPointer == NULL)
{
printf("no data (score=%d)\n", score);
}
else
{
if ((*listPointer)->score == score)
{
struct record * temp = *listPointer;
*listPointer = (*listPointer)->next;
free(temp);
}
else
{
delete(&((*listPointer)->next), score);
}
}
}
371 :
368 :2009/01/20(火) 22:48:16
10進数を2進数に変換するプログラムで int b; for(b=31; b>=0; b--){ printf("%d",(x>>b)&1); } "整数xをbビット右にシフトしその結果を1のANDを取ることでxのbビット目が 1か0かがわかる"と本で書かれているのですがこれの意味がいまいちよくわかりません. なぜこのプログラムで10進数を2進数に変換できるのですか?
>>372 (1) 例えばxの2進表記が
11111111000000001111111100000000
のとき、b=15ビット目(右端が0ビット目と数える)、すなわち
1111111100000000[1]111111100000000
括弧で囲ったビットを判定したいとする。
(2) x>>bは、次のようになる。
00000000000000011111111000000001
(3) (x>>b)&1は、次のようになる。
00000000000000011111111000000001 ← x>>b
00000000000000000000000000000001 ← 1
--------------------------------- &
00000000000000000000000000000001 ← (x>>b)&1
(4) 従って、15ビット目は1であると判る。
さあ、どこがわからない?
>>372 あるnビット目が1か0かをチェキしているからさ
375 :
デフォルトの名無しさん :2009/01/21(水) 00:09:36
関数strcatを自分で作ったんですが、ちょっとおかしな点があります。 include<stdio.h> char *my_strcat(char *s1, char *s2){ int i = 0; int n = 0; while(s1[i] != '\0'){ i++; } while(s2[n] != '\0'){ s1[i] = s2[n]; i++; n++; } s1[i] = '\0'; return s1; } int main(){ char *s1 = "abc"; char *s2 = "vwxyz"; my_strcat(s1, s2); printf("s1:%s s2:%s\n", s1, s2); return 0; } s1はちゃんと表示されるのですが、s2が一文字少なく表示されてしまいます。 このプログラムのどこをどう直せばよいでしょうか。 お願いします。
テンプレに沿ってなくてすみません。 至急お願いします。 C言語です。 1から8192の間の数字を512個重複しないように乱数発生させ、配列に格納したいのですが、以下のプログラムだと重複してしまいます。 どこを直せばよいのでしょうか? 教えて下さい。よろしくお願いします。 a = 0; n = (int)(rand() / (RAND_MAX+1.0) * 8192.0); ransu[0] = n; printf("ransu[0]=%d\n", ransu[0]); a = 1; for (i=1; i<=511; i++) { for (j=0; j<a; j++) { n1 = (int)(rand() / (RAND_MAX+1.0) * 8192.0); printf("n1=%d ", n1); if (ransu[j] != n1) { ransu[a] = n1; printf("a=%d ransu[a]=%d\n", a, ransu[a]); break; } else { continue; } } a++; }
>>1 を読んだら、質問内容がスレ違いだと気づいてくれ
言っても分からん奴は分からんのだよ。だから、大学にしろ ランク というものが存在するんだが。しかし、それも怪しい時代だな。 所詮、言葉ではどうにでもなる。自分が理解していなくても、上のお墨付きなら その範囲内で発言すれば、間違いとは言えないからな。 ただ、捻られると通用しない、政治も時代が変わると通用しなくなるものさ。 そこで、本質を理解している人が、最後は生き残る。諸行無常の響きあり。
>>376 至急だからテンプレに沿わなかったってこと?
親しき仲にも礼儀ありをふまえて、親しくなければ礼儀いらず、ということか
スレ違いを誘導するのもめんどくさいし、 今度からテンプレに誘導先表示しとこうぜ。
>>376 #include <stdio.h>
#include <stdlib.h>
int main(void)
{
int ransu[512], b, n, i, j;
for (i = 0; i < 512; ++i) ransu[i] = 0;
for (i = 0; i < 512; ++i) {
do {
b = 1;
n = (int)(rand() / (RAND_MAX + 1.0) * 8192);
for (j = 0; j < 512 && b; ++j) if (ransu[j] == n) b = 0;
if (b) ransu[i] = n;
} while (!b);
}
for (i = 0; i < 512; ++i) {
if ((i + 1) % 16) printf("%5d", ransu[i]); else puts("");
}
return 0;
}
おっとすでに回答者がいたのか。失礼。
悪くはいないだろうけど、いくつか試してみると気づくが、乱数を発生させて それより前に出たものと重複するなら、そうならないものを発生させるまで 繰り返すやり方は、場合によっては時間が掛かる。
389 :
デフォルトの名無しさん :2009/01/21(水) 01:07:32
大学や専門学校の宿題を自称中学生が片付けてる流れに吹いてしまったw
>>388 言いたいことがあるなら反論しろ。バカが
ただ、前に出たものと重複するかを調べるやり方は、
明らかに効率が悪いし、そんなものを採用したら、バカにされるよ
391 :
デフォルトの名無しさん :2009/01/21(水) 01:40:44
いや、範囲を広めてその中から選ぶ数を減らしたとしても、前に出たものと重複したら やり直すやり方はお勧めできない。数が増えれば増える程、処理時間が掛かることは 実行してみれば分かる。というか、もとから効率が悪いことは、分かりきっている。
>>361 すみません、本当にありがとうございます
ただ実行できなかったんですがどうすればできるようになるでしょうか
CPad for Borland C++Compiler 使ってます
UIもよくわからないので・・・どれでも大丈夫です
本当に申し訳ございません
いや、いやいやいや、そのアルゴリズムはありえない。 バブルソートよりもあり得ないくらい、普通じゃ使わない。
>>384 swp = rand() % MAX だと偏りが生じる。
NMEMB個取り出すのにMAX回スワップする必要はない。
具体的には
>for(i=0; i<MAX; i++) {
> swp = rand() % MAX;
>
> tmp = a[swp];
> a[swp] = a[i];
> a[i] = tmp;
> }
>
> for(i=0; i<NMEMB; i++) randa[i]=a[i];
の部分を
for(i=0; i<NMEMB; i++) {
swp = rand() % (MAX - i);
randa[i] = a[swp];
a[swp] = a[MAX-1-i];
}
とすればいい。
399 :
201 :2009/01/21(水) 02:10:11
>>396 えっと、
>>361 はC言語とC++を混同してるみたい(最近のコンパイラはこれで通るのかな?)
main関数内に散らばっている変数宣言を全部、関数内先頭に持ってくればいい
>>396 >[3.2] コンパイラ名とバージョン:任意
>CPad for Borland C++Compiler 使ってます
ちゃんと正しく書かないからだよ。
たしかBCCはC89だから、変数の宣言位置が問題になってるんだと思う
8689.c の45行目に {、81行目に } を追加すればたぶんおk
>>399 本当にありがとうございます、実行は確認できました
えっと、このプログラムはC++の知識も入っているということでしょうか
読解も専門書見ながらにしかできない頭でして・・・
>>402 本当こちらの知識と説明不足でした、すみません
追加してみてこちらも実行確認できました
ありがとうございます
405 :
201 :2009/01/21(水) 02:35:47
>>402 なんと!?BCCってC99に対応してなかったんかorz
今俺の頭の中にあったモヤモヤが全部消えたw
>>403 ごめん。言い方が悪かった
C++の知識は(一応)入ってないです
でも、BCCとかみたいにC99に対応してないコンパイラだと、コンパイルできないときがあるから注意
201(笑)
407 :
400 :2009/01/21(水) 02:42:12
すみません、どなたかおねがいします… もうちょっとわかりやすい変数名だったらいいのに…
>>405 入ってないですか、わかりました
大変親切に教えていただきありがとうございました
>>401 そういう、個人の主観で勝手な言い分を述べる奴は、一部が正しくても信用ならん。
少なくとも、何が言いたいか、あんたが簡潔に述べるべき。
>>400 > [3.3] 言語: windows
> 文型脳なのでこの授業にもついていけません。問題の回答だけ教えていただけないでしょうか?
まあ、このスレらしいよな
412 :
デフォルトの名無しさん :2009/01/21(水) 02:56:36
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):
以前
>>116 で質問し
>>124 さんに回答をいただいたものです
http://www.k-php.com/lib/uploda/src/file132.jpg 追加の課題で
1.R=0の場合におけるiとvを出力するプログラム
計算はオイラー法を用い、刻み幅hをT/10として10周期分計算する.TはLとCから求められる理論周期である.
2.R=0.2の場合におけるiとvを出力するプログラム
計算はルンゲ・クッタ法を用い、刻み幅hをT/10として10周期分計算する.TはLとCから求められる理論周期である.
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:Visual C++ 2008 Express Edition
[3.3] 言語:C言語
[4] 期限: 1月23日まで
[5] その他の制限:
特にないです
オイラー法とかルンゲ・クッタ法とか正直C言語の課題という感じではないんで無理かもしれませんが
もしどなたかやってくださる方いたらお願いします
>>409 バカな僕にもわかるように説明してくださいって言えよw
>>411 ああ〜間違えてますね、すいません。
コンパイラで実際に組むプログラムではないので省略したらおかしなことに…
OSが
415 :
400 :2009/01/21(水) 03:00:13
とちゅうで送信してしまったしもうだめだ〜 OSがWindowsです
>>416 ああありがとうございます!!アキまで自分で考えたのと同じでした!
ほかは全滅です。画像でかくてすみません^o^
あとは読解がんばってきます!ありがとうございました!
2週間考えていましたが先が見えません。よろしくお願いします。 [1] 授業単元:計算機プログラミング [2] 問題文(含コード&リンク): 出発点を打ち込むと、隣接する交差点名と交差点番号および距離を表示させます。表示された交差点の中から次に進む交差点を選択できるようにし、順々に道案内するプログラムを作成しなさい。また、プログラムを途中で終了させる工夫もしなさい。 交差点のデータ(map.dat)は次の通り。 1, 0.0, 0.0, Eki, 2, 2, 4 2, -0.6, 0.15, Dikancho, 3, 1, 3, 11 3, -0.83, 0.0, Kamidaikancho, 4, 2, 4, 9, 10 4, -0.6, -0.38, Omachi, 3, 1, 3, 5 5, -0.38, -0.68, Matsumori, 3, 4, 6, 7 6, 6.0, -0.3, Takada, 1, 5 7, -0.18, -1.02, Toriage, 2, 5, 8 8, -0.84, -1.58, Nakano, 3, 7, 9, 18 9, -0.9, -0.98, Daigaku, 2, 3, 8 10, -0.98, 0.15, Runesugai, 3, 3, 11, 13 11, -0.78, 0.3, Yubinkyoku, 3, 2, 10, 12 12, -1.28, 0.68, Mototeramachi, 2, 11, 13 13, -1.32, 0.53, Ichibancho, 4, 10, 12, 14, 15 14, -1.8, 0.98, Siro, 2, 13, 20 15, -1.43, -0.15, Doyacho, 2, 13, 16 16, -1.73, -0.26, Shintera, 3, 15, 17, 20 17, -1.8, -1.43, Asahigaoka, 3, 16, 18, 19 18, -1.2, -1.73, Nishi, 2, 8, 17 19, -2.48, -1.2, Shimizu, 2, 17, 20 20, -2.33, -0.51, Jyumoku, 3, 14, 16, 19 左から、「交差点番号,Eki基点のx座標,y座標,地名,交差点から出る道路の本数,隣接する交差点番号」を示す。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2009年1月22日17:00まで [5] その他の制限:サーチング、ソーティングを使わなければならない指定です。
>>415 それは大抵分かるw
[3] 環境
[3.1] OS: (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
残りの項目を書かなかったのはなんで?分からないなら先生に聞いてください。
>>413 意味不明。何を言っているかは分かっているが、だから何?ってレベルなんだよ。
池沼は黙ってろよ、むしろバカなお前に理解できるように説明する方が難しいw
421 :
デフォルトの名無しさん :2009/01/21(水) 04:01:58
>>409 ってどっかの誤爆なんじゃないかな。。
意味が分からなさすぎるw
>>422 別のスレを見れば分かる。乱数発生について。
ごめwww向こうに沸いてるの気づいてなかったw なら誤爆じゃなくていつものことだね><
どう足掻いても、擬似乱数発生のライブラリを使ってしまっている以上、 それに依存するのは言うまでも無い。何を今さら、当たり前なことを。 だったら、それに応じてコードを書き換えれば良かろう? しかし、前に出たものと重複しないかを調べてやり直すやり方は、 要素の数が増えれば増える程、重複する確率が高くなり、しかも 既に発生させた乱数と比較しなければならないという、無駄が多くなるんだが? それで時間が掛かるわけだが、そんなの誰でも気づくだろ、JK
経路探索じゃあなさそうなので、今いる地点につながる隣接情報を持つ交差点一覧を出すんじゃないかな。 アドベンチャーゲームっぽい感じというか。 こことここにいけます。どこにいきますか? どこそこにつきました。 こことここにいけます。どこに(ry みたいなんじゃないかなぁ。 ソートをする場面が思いつかないけど…
>>427 重複したら再抽選にするとまるで一様な乱数になるかのような言い回しはやめてくださいよw
↑Yes,you can! Change!
なんでアメリカはつり銭を要求するようになったんだ つり銭はとっといてよと言える経済状態じゃなくなったからか
>>429 一様ランダムあるいは一様乱数とは
>>376 のどこにも書かれていませんよ
情報の開示漏れさえ無ければ(実は一様でしたなど)、
偏りがあろうと何ら問題ないと言えます
>>401 > 風邪で寝てるあいだ、頭痛な頭でなぜか配列のシャッフルするアルゴリズムのことを思い出し、
この時点で、正常な判断力を失っていると言える。それを持ち出すあんたは
そのサイトの管理人?ものすごく恥ずかしいぞ、それw
434 :
361 :2009/01/21(水) 06:45:03
435 :
361 :2009/01/21(水) 06:47:37
あ、それと、文字列を関数にわたすだけなんで、 入力処理は適当につけてちょうだい。 scanf とか使ったことないのよ。w
>>436 良く分からんけど、こんな感じ?
#include<stdio.h>
int main()
{
char c;
int i=0;
while(EOF!=(c=getc(stdin))) {
if((0==i)&&('.'==c))
break;
putc(c,stdout);
i = ('\n'==c) ? 0 : 1;
}
return 0;
}
題意としては
>>428 さんの仰る通りです。
ソーティングは、そこまでは習ったという意味で、わかり辛くて申し訳ないです。
以前(
>>115 )質問したんですけど、期限過ぎちゃったんで改めて
以前とは問題文を多少変更しています。
自力では結局分からなかったのですが(特に必須の課題でもないんでいいんですけど)
分からないままにしておくのも気分が悪くて・・・
すみません。
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8675.txt [3] 環境
[3.1] OS: windows
[3.2] コンパイラ名とバージョン: Visual C++2008
[3.3] 言語: C言語
[4] 期限: 1月末ごろまで
[5] その他の制限: 特になし できるだけポインタは使わない方向だとありがたいです。
ポインタの扱いが苦手だ・・・構造体までは何とかついていけたのになぁorz
すみません、よろしくお願いいたします。
440 :
デフォルトの名無しさん :2009/01/21(水) 12:36:04
[1] 授業単元:CによるプログラミングII
[2] 問題文(含コード&リンク):
次のプログラム(数値を入力していくと小さい順に並べてくれるプログラム)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8701.txt について,2分木の生成後(Ctrl-Dを入力した後)に,指定した整数値がツリーの
中にあるかどうかを判定する機能を有する下記の関数を作成し,プログラムに追加せよ.
int ExistTest(BTREE *ptr, int searchdata);
ただし,この関数は入力した整数値が存在すれば1を返し,存在しなければ0を返すものとする.
上記の関数を含むプログラムを完成し,いくつかの例
(1) 指定した整数値が1個または複数個存在する場合
(2) 指定した整数値が存在しない場合
について実行することでプログラムが正しく動作することを確認せよ.
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2008年1月22日09:30まで
[5] その他の制限:
441 :
デフォルトの名無しさん :2009/01/21(水) 14:25:01
442 :
デフォルトの名無しさん :2009/01/21(水) 14:29:10
>>440 int ExistTest(BTREE *ptr, int searchdata)
{
BTREE *sp = ptr;
while(sp != NULL){
if(searchdata == sp->data)
return 1;
if( searchdata < sp->data )
sp = sp->left;
else
sp = sp->right;
}
return 0;
}
>>441 (1)
#include <stdio.h>
#include <stdlib.h>
int cmp(const void *a, const void *b) { return *((int *)a) - *((int *)b); }
int main(void)
{
int *a, n, i;
scanf("%d", &n);
if (n > 100) n = 100;
a = malloc(n * sizeof(int));
for (i = 0; i < n; ++i) scanf("%d", a + i);
qsort(a, n, sizeof(int), cmp);
for (i = 0; i < n; ++i) printf("%d ", a[i]);
printf("\n");
free(a);
return 0;
}
>>441 (2)
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *a, n, i, m, c;
scanf("%d", &n); if (n > 10) n = 10;
a = malloc(sizeof(int) * n);
for (i = 0; i < n; ++i) { a[i] = rand() % 101; printf("%d ", a[i]); }
printf("\n");
scanf("%d", &m);
for (i = c = 0; i < n; ++i) { if (a[i] >= 60) ++c; }
if (m == c) printf("1\n"); else printf("0\n");
free(a);
return 0;
}
448 :
デフォルトの名無しさん :2009/01/21(水) 18:46:47
[1] プログラミング言語1 [2] ファイル data.dat には,カンマで区切って国語,数学, 理科のテスト結果(100点満点)がこの順に一行に一人分づつ格納されている(生徒数は100人以下). 次の基準に従って合格者を決め,合格者のみの席次を合計点でつける. そして,最下位のものから最下位から3番のものまでをカンマで区切ってその合計点を順に出力するプログラムを作成せよ. [判定基準] 国語が 66 点以上でかつ、数学と理科のどちらか一方でも 66 点以上なら合格. 画面には、結果以外の出力をしないこと. 合計点数が等しい者は同順とする.m番の順位の者がn人いる場合,次の順位はm+n番となる. フローチャートを書いてからプログラムを作成すること. ファイルは FILE *in_file; in_file = fopen("data.dat","r"); としてopenし,このファイルからデータを読み出す時は, fscanf(in_file,"%d,%d,%d",&a,&b,&c); として読み出せばよい.(a,b,cは整数型変数で,aに国語,bに数学,cに理科の点数が入る) また,読み出しが終わったら, fclose(in_file); としてクローズすること. [3] 環境 [3.1] OS:WindowsVista [3.2] コンパイラ名とバージョン: TeraPad [3.3] 言語:C [4] 期限: 今月中に [5] その他の制限: 特にありません よろしくお願いします
>[3.2] コンパイラ名とバージョン: TeraPad
>>448 #include <stdio.h>
#include <stdlib.h>
int compare(const void *a, const void *b) { return *((int *)a) - *((int *)b); }
int main(void)
{
int point[100], i = 0;
int a, b, c;
FILE *in_file;
in_file = fopen("data.dat", "r");
while (fscanf(in_file, "%d,%d,%d", &a, &b, &c) != EOF) {
if ((a >= 66) && ((b >= 66) || (c >= 66))) point[i++] = a + b + c;
}
fclose(in_file);
qsort(point, i, sizeof(int), compare);
printf("%d,%d,%d\n", point[0], point[1], point[2]);
return 0;
}
[1] 授業単元:コンピュータプログラミング [2] 問題文:チーム数nで試合数mを指定し、各々のチーム名(漢字かカタカナかアルファベット)と勝ち数と 引き分け数をA対B,A対C,…,B対C,B対D…の順でキーボードから入力し、勝率を計算して勝率 の高い順に並び替えて、チーム名・全試合数・勝ち数・負け数・引き分け数・勝率を表示する プログラムを作成せよ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:Visual C++ Express Edition [3.3] 言語:C [4] 期限:2009年1月22日 [5] その他の制限:構造体を使用する。試合数が3回だとするとA対Bで3回、A対Cで3回…となります。 よろしくお願いします。
>>434 ありがとうございます
一応奮闘しておりますが手ごたえなく・・・
申し訳ありませんがお手数でなければ教えていただけると本当助かります
>>453 よく読んでいなかったようです。
ありがとうございました。
hairetu[num]++ すみません、これはどういうことでしょうか? また、 hairetu[2] | = これもどういう風に足しているのでしょうか? = 1たすとは配列の要素番号を1たすということでしょうか? 下の方は、配列2の要素の値のビット数+ 右辺にあるビット数を足したものを 配列2に格納するというこでしょうか? 基本的に& や | があったら、ビットの演算子であるとおもえばよろしいのでしょうか?
>>455 原文を読んでないが、
前者は配列の中身を++
後者はhairetu[2]と右辺の論理和をhairetu[2]に代入
&や|が単体である場合はそれでいい
この広範囲爆撃っぷりは、騙りだろ スルースルー
461 :
357 :2009/01/21(水) 22:52:05
462 :
デフォルトの名無しさん :2009/01/21(水) 23:32:52
463 :
201 :2009/01/22(木) 00:32:15
464 :
201 :2009/01/22(木) 00:33:49
>>462 StackPrintでiが使われていない件について。
あと、メモリの確保にミスを見つけたので修正しといた。
465 :
デフォルトの名無しさん :2009/01/22(木) 00:54:01
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):下記 [3] 環境 [3.1] OS: WindowsVistaSP1 [3.2] コンパイラ名とバージョン: Visual C++2008 [3.3] 言語: C言語 [4] 期限: 1月22日11時まで [5] その他の制限: 特になし できるだけ基本的な構造で ポインタまではOK 入力された2つの文字列を比較するプログラムを作成せよ。ただし、大文字小文字の違いは無視、 単語間にスペースが複数入っていても単独のスペースと区別しない。 入力に関して キーボードから、1つ目の文字列を1行で入力し、改行する。次に2つ目の文字列を1行で入力し、改行する。 このとき、入力を促す文字はいっさい表示しないこと。入力の文字列はそれぞれ128文字以下とする。 出力に関して 一致すれば何も表示しない。不一致の場合は最初に不一致となる入力1の文字(1文字だけ+改行)を表示する。
>>464 助かりました。ありがとうございました。
>>465 #include<stdio.h>
#include<ctype.h>
int main() {
char str1[130], str2[130], *p1 = str1, *p2 = str2;
fgets(str1, sizeof str1, stdin);
fgets(str2, sizeof str2, stdin);
while (*p1) {
if (tolower(*p1) != tolower(*p2)) {
putchar(*p1);
break;
}
while (*p1++ == ' ');
while (*p2++ == ' ');
}
return 0;
}
自分じゃもうお手上げ状態です・・・
>>285 お願いします
>>468 ちょw後輩じゃねえかww
鮎川ストアとか思い出した。
おおたきおたっきーとかのぐちさんとか超やさしいよ。聞いたらぽんぽん教えてくれるはずだが?
高校時代の友人が、茨城大学に・・・俺は西日本だったが。 おかげで、関西弁が染み付いちまったぜ。
472 :
361 :2009/01/22(木) 05:32:20
>>452 あら、まだやってたの。
もう期限来たからタイムアップだと思ってたよ。
んじゃ削除もやってみるか。
前にも言ったけど、入力処理は友達に聞くなりして自分で作ってね。
基本は単方向だから別に間違っちゃいないだろ。
>>472 最悪今日の12時までに提出でたぶん大丈夫かもという状態です・・・
よろしくお願いします
476 :
446 :2009/01/22(木) 12:45:03
>>447 ありがとうございます
しかし下のようにエラーが出るのですが……
(57): error C2664: 'sprintf' : 2 番目の引数を 'size_t' から 'const char *' に変換できません。
(257): warning C4018: '<' : signed と unsigned の数値を比較しようとしました。
(484): error C2440: '初期化中' : 'const void *' から 'const KAMOKU *' に変換できません。
'void*' から非 'void' 型への変換には明示的なキャストが必要です。
(484): error C2440: '初期化中' : 'const void *' から 'const KAMOKU *' に変換できません。
'void*' から非 'void' 型への変換には明示的なキャストが必要です。
(490): error C2440: '初期化中' : 'const void *' から 'const KAMOKU *' に変換できません。
'void*' から非 'void' 型への変換には明示的なキャストが必要です。
(490): error C2440: '初期化中' : 'const void *' から 'const KAMOKU *' に変換できません。
'void*' から非 'void' 型への変換には明示的なキャストが必要です。
(496): error C2440: '初期化中' : 'const void *' から 'const KAMOKU *' に変換できません。
'void*' から非 'void' 型への変換には明示的なキャストが必要です。
(496): error C2440: '初期化中' : 'const void *' から 'const KAMOKU *' に変換できません。
'void*' から非 'void' 型への変換には明示的なキャストが必要です。
できれば訂正していただけるとありがたいです
あと、もう少し短く、簡単にならないでしょうか?
const KAMOKU *x = (const KAMOKU *)a, *y = (const KAMOKU *)b; とか、機械的にやればいいよ
57はsnprintfなのに、エラーはsprintfなんだな。
479 :
デフォルトの名無しさん :2009/01/22(木) 13:07:27
480 :
361 :2009/01/22(木) 13:15:59
>>475 スマヌ、朝っぱらから打ち合わせは入るわ新しい仕事がくるわで
できんかった(もうしばらくヒマだと思ったのになあ)。
期限延びたならまた言ってくれ。
482 :
446 :2009/01/22(木) 13:44:43
>>478 すいません少し書き直したときに間違えたようです
正しくは
(57): error C3861: 'snprintf': 識別子は、引数依存の照合を使用しても見つかりません。
です
snprintfがあるかどうかは環境によるから、sprintfで代用すればいいと思う。 長さ指定を外せばいいんじゃないかな。
capacity = N * (RAND_MAX/6); とかナップザック問題生成部分で狂ってるんだけど適当に直していい?
[1] 授業単元: C [2] 問題文(含コード&リンク): 複数の式が書かれたtxtから式を読み出し全ての式を計算し別txtに出力せよ。 例:siki.txt:10+2*3 → kotae.txt 16 :(2+3)+(1つめの式の答え)/3 → 7 [3] 環境 [3.2] コンパイラ名とバージョン: LSIC [3.3] 言語:C [4] 期限: 25日まで ひとつの式をstackさせることはできるのですが複数の式を同時というのが・・・
1 プログラムからテキストファイルdate.txt(メモ帳)の数値データ10個(7.8 3.2 4. 0 5.8 6.9 1.5 2.8 6.1 3.8 0.7)を読み込む 最大値、最小値、平均値を求め、ディスプレイおよび、ファイルout.txtに出力 小数点以下2桁まで表示すること 2 1つの整数を引数とし、引数が素数であれば1、そうでなければ0を返り値とす るサブルーチンをつくる これを用いて自然数n以下の素数のうち最大のものを表示するプログラムをつく る。 この2つをといてください。。。 まったくわかりません Visual C++ 2008 Express Editionです
>>489 すみません、ありがとうございます。
実行するとファイルの中身の表示で中断してしまいます。
(ソート後の出力に移る前にエラーorz)
ビルドは特に問題なく通るんですが。
テキストファイルの式を逆ポーランド記法で計算してその結果を別のテキストに出力しろってことじゃないの?
そうです。伝わりにくくてすみません。
例の二行目がよくわからないですぅ
逆ポーランド記法への変換をしてるってことか 例2は((2+3)+(1つめの式の答え))/3 → 7じゃないかと思うんだが nつめの式の答え、というテンプレに従うの?
式のtxtに(2+3)+(1つめの式の答え)/3 → 答えのtxtに7と出力
「nつ目の答え」という数字が好きなときに使えるようにしないといけないみたいです。
すみません中置記法でした・・・
500 :
デフォルトの名無しさん :2009/01/22(木) 18:01:07
[1] プログラミング言語1 [2] 次の関数を作成せよ. int judgment(int x, int y) [関数の意味] 入力パラメータであるx,yを組み合わせた平面上の点(x,y)を考え,この点が y = -1 * ( x + (-2) ) * ( x + (-2) ) + 10 y = 5 の2つの線に囲まれた領域内(線上は除く)に含まれるなら戻り値は1,含まれないなら戻り値は0. この関数の正しさを調べるために,xとyをそれぞれ0から10まで1きざみで変え、そのすべてを組み合わせた平面上の11x11個の点(x,y)のうちで、 上記の領域に含まれる点の数を出力するmainプログラムとプロトタイプ宣言を下記のように与える. [SUBMIT]された関数は,このプログラムの後ろに追加されて評価される. [3] 環境 [3.1] OS:WindowsVista [3.2] コンパイラ名とバージョン: TeraPad [3.3] 言語:C [4] 期限: 今月中に [5] その他の制限:はじめに #include <stdio.h> int judgment(int x, int y); int main(void) { int x,y,count; count=0; for(x=0; x<=10; x++) for(y=0; y<=10; y++) if(judgment(x,y)==1) count++; printf("%d\n",count); } というのが与えられています。 よろしくお願いします
>>486 入力ファイルの完全な仕様をだせ
不定あるいは実装の都合で変更可能な箇所があればそれも
とりあえず、現時点で判明してるのは
1. 1行に1つの式
2. 式は中置記法で、四則演算括弧に対応
3. 式の中で別の行の解を参照可能
(「nつ目の答え」という表記でn行目の解を参照)
疑問点は
4. 数値は整数のみか?
5. トークンの区切り(空白など)の省略の可否は?
(区切りなしでも可だと分割が面倒)
6. 解の参照は前方のみでおk?
(自己参照や循環参照のチェックは面倒)
>>500 試してないけど
int judgment(int x, int y)
{
int y1, y2;
y1 = -1 * ( x + (-2) ) * ( x + (-2) ) + 10;
y2 = 5;
return y < y1 && y > y2;
}
503 :
デフォルトの名無しさん :2009/01/22(木) 18:22:26
[1] 授業単元: プログラミング基礎実習 [2] 問題文(含コード&リンク): (1)ファイル名をソート(辞書順に並べ替え)して表示できるようにする。 ただし,問題は @プログラムを作る時点で,一つ一つのファイル名の長さがわからない, Aプログラムを作る時点で,存在するファイルの個数がわからない, ことだ。下記の小問の順番でプログラム作成しなさい。 一旦すべてのファイルの名前を読み込んで文字列の配列に格納してから,それをソートして表示するプログラムを作成することにします。 指定されたディレクトリに存在するファイルの個数を 128 未満と仮定してプログラムを作成してください。 ディレクトリに 128個以上のファイルが存在した場合には,その旨表示し,正しくエラー処理するようにすること。 次の順に,プログラムを作成してください。 (1-1) readdir で取り出した情報は,次回の readdir の呼び出しで上書きされてしま います。それでは困るので, 得られたファイル名を my_strncpy を使って, 皆さんのプログラムで用意した文字列の配列にコピーしてください。 この際に必要になる領域は malloc を使って必要な分だけ確保すること。 (1-2) 1-1 で取得し終えたファイル名の配列を辞書式順序に並べ替えしなさい。 (1-3) 並べ替えした文字列配列を順に表示しなさい。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:cc [3.3] 言語: C [4] 期限:あさって ↓続く
504 :
デフォルトの名無しさん :2009/01/22(木) 18:24:18
↓続き [5] その他の制限: ・文字列の長さを数える関数 int strlen(char *s); ・文字列の大小比較(辞書式順序での順番比較)を行なう関数 int strcmp(char *s1, char *s2); (return value は s1 < s2 なら -1, s1 = s2 なら 0, s1 > s2 なら 1) ・文字列をコピーする関数 char *strncpy(char *s1, char *s2, int n); (s2 の文字列を s1 へ,最大で n 文字未満コピーし、return value はs1) は作成済みで、以下を参考にして作成する。 #include <sys/types.h> #include <dirent.h> #include <stdio.h> int main(int argc, char *argv[]) { DIR *dir; /* ディレクトリ情報を示すためのポインタ */ struct dirent *entry; /* 各エントリの情報を示すための構造体ポインタ */ char *dirname = "."; /* ディレクトリが指定されなかった場合のデフォルト */ ↓続き
505 :
デフォルトの名無しさん :2009/01/22(木) 18:24:51
if (argc > 1) dirname = argv[1]; if ((dir = opendir(dirname)) == NULL) { /* ディレクトリをオープン */ perror(argv[0]); return -1; } while ((entry = readdir(dir)) != NULL) { /* ファイルの情報を取り出す */ printf("%s ", entry->d_name); /* ファイル名を表示 */ } putchar('\n'); closedir(dir); /* ディレクトリをクローズ */ return 0; } さっぱりわかりません・・・
>>503 ファイル名って長さの上限あるんだっけ?
>>506 そういう場合はエラーでましただけじゃなくて、どんなエラーだったかも書くんだ
つっても、うpした人なんか消しちゃったみたいだからどうにもならないだろうけど
>>503 ピキーーンッ・・・麻呂のクソースの予感
>>361 いえいえ、お忙しいのなら仕方ないです。
っていうか本当に期限一週間延びました
ただ条件に
>>285 の応用課題をひとつやることと言われまして・・・
もしお暇があれば教えてください
詳しい期限は1月29日13時です
511 :
デフォルトの名無しさん :2009/01/22(木) 20:26:22
>>510 ファイルを1行ずつ読み込みながら探すのではなく、
一度メモリに読み込んでから(一度二分木に読み込んでから)、検索をすれば良いのね?
>>503 #include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
int my_strlen(char *s){
int i = 0;
while (*(s++)) i++; return i;}
int my_strcmp(char *s1, char *s2){
for (;*s1 || *s2; s1++, s2++) {
if (*s1 != *s2) {
return *s1 - *s2; } } return 0;}
int cmp(const void *a, const void *b){ return my_strcmp(*(char **)a, *(char **)b);}
char *my_strncpy(char *s1, char *s2, int n){
int i; char *p = s1;
for (i = 0; i < n && (*(s1++) = *(s2++)); i++); return p;}
int main( int argc, char *argv[] ){
char *dir; DIR *dp; struct dirent *entry; char *s[127]; int i, j;
if (argc < 2) { dir = getenv("PWD"); /* カレントデイレクトリのパスを取得 */
} else { dir = argv[1]; }
if (( dp = opendir(dir) ) == NULL ) { /* デイレクトリを開く */
perror("opendir"); /* システムエラーメッセージを出力する */
exit( EXIT_FAILURE ); }
for (i = 0; (entry = readdir(dp)) != NULL && i < 127; ++i) {
s[i] = malloc(my_strlen(entry->d_name) + 1);
my_strncpy(s[i], entry->d_name, my_strlen(entry->d_name) + 1); }
if (entry) {
fprintf(stderr, "128個以上あるよ。ファイルが\n");
exit( EXIT_FAILURE ); }
closedir(dp);
qsort(s, i, sizeof(char *), cmp);
for (j = 0; j < i; ++j) { printf("%s\n", s[j]); free(s[j]); }
return 0;}
>>503 気になる点が二つあった
1.辞書順にしろとあるがstrcmpは辞書順じゃないからどっちに沿えばいいんだよ
2.strncpyの解説が間違ってるんだけど問題文の仕様にあわせるのか、標準ライブラリにあわせたほうが良いのか
strcmp仕様にして、標準ライブラリ風にしておいた・・・・・・と思う
>>510 だからのぐちさんに質問しなって。笑顔で話しやすいでしょ?
>>516 その間ネトゲできねーじゃん
ネトゲの合間にここに書き込んでおけば
勝手にできあがるスレでしょ
>>513 (・∀・) (・∀・) (・∀・) (・∀・) (・∀・) (・∀・)
PAD図とかどうやって書くの?
1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): a X^2 + b X + c =0 の2次方程式の解を求めるプログラムを作成しなさい. キーボードから a,b,cの値を入力し(マイナスでも可能なように) 結果を表示. 1) 2つの実数解を持つとき 2) 重解を持つとき 3) 虚数解を持つとき (実数部と虚数部に分けて表示でも可 ルートが残る場合はルートの中身を表記しても可) 表記は各自でわかりやすいように工夫すること 全てのパターンを例として示しなさい. [3] 環境 [3.1] OS: Windows Vista [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C言語 [4] 期限: 2009年2月4日 13:00まで [5] その他の制限: 特になし よろしくお願いします。
526 :
デフォルトの名無しさん :2009/01/22(木) 23:26:57
大至急聞きたいんだが プログラムで点数ごとに積み上げグラフを作るプログラムを 作りたいんだがうまくいかなし期限波明日。。 作りたいプログラム テストを5回実施して 5回分の点数を配列に入れる ten[5]={64,53,36,23,36}←これはあらかじめ格納されてるとする。 んで縦100点までで、テスト点を100点で5回ぶん割る d=100; 割って1がたつなら ”*”を出力。それ以外は” ”を出力する。 終わったら d=d-10; でどんどん引いていいって最終的に↓見たいに出力するようにしたいんだ。 100点 * ** 90点 * *** 80点 ***** 70点 ***** 60点 ***** ・ ・ ・ ・ ・ ・ ・ ・ 別に子のやり方じゃなくても積み上げ式のがつくれっればいいんだ!力を貸してくれ!
527 :
デフォルトの名無しさん :2009/01/22(木) 23:34:32
[1] 授業単元: [2] 問題文:ボタンを押すとラベルが右に少しずつ(+7ずつ)移動するプログラムを書け。 [3] 環境 [3.1] OS:WindowsVista [3.2] コンパイラ名とバージョン: WindowsVisual C# [3.3] 言語: C [4] 期限: 2009年1月23日中 [5] その他の制限: LocationのY座標をtop、 Y座標はleftとする みたいなことをヒントでもらいましたがさっぱり・・・ お願いします
531 :
527 :2009/01/22(木) 23:53:15
誘導ありがと
532 :
デフォルトの名無しさん :2009/01/23(金) 00:52:08
[1] 授業単元:情報処理技法 [2] 問題文:何らかの実用的なプログラミングを作り、それについて考察する。 3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン: visualc++2005 [3.3] 言語:プログラミング言語は自由 [4] 期限:2009年1月25日午前8時 [5] その他の制限:・プログラミング言語は自由 ・本などの丸写し不可、参考は可 ・コメントつきプログラムソース添付必要 自分なりにまとめて独自性のある問題設定、開放、考察をする。 丸投げですいません。初心者なのでまったく思いつきません。
言語自由てなんだんだよwwwww C++/CLIでもいいのか?w
>>532 いくらなんでも丸投げし過ぎだろw
こんな課題が出る段階ってことは本来なら初心者レベルどころか授業の終了段階だろ
537 :
デフォルトの名無しさん :2009/01/23(金) 01:09:51
C++でお願いします。
期限は明日の正午です。
if-else文、for文、while文、1次元配列 これら全てを使用したプログラムを考えていただけませんか? フィボナッチ数列や階乗を求めるプログラム等が作れるらしいのですが…お願いします。
このスレは世界のアツナベが乗っ取った! これからは、3の倍数か3のつくレス番号にレスした人は アホになるではなく、アホ決定
アホになったらその人はアホだよね。でもそうじゃなく、アホ決定とはどういう意味?
>>512 たぶんそれでいいと思います。
>>516 すみません、のぐちさんがどの方かまだ把握してないもので・・・
それと今学期はもう会える機会がないので
>>522 ありがとうございます
えーと、プログラムはどこにあるのでしょうか
すみません
>>543 PDFに佐々木稔, 野口宏ってかいてるからその野口さんなんじゃないの?よく知らないけど。
それはさておき
>>522 にとても失礼なこと言ってると思わないか?
>>485 遅れてすいません
変えてくれて大丈夫です。
>>488 ありがとうございます。
しかし
サーバーにない
とかで見れないんですが
>>540 #include〈stdio.h〉
int main(void)
{
int i,n,a[1000];
scanf("初期値a=%d",a[0]);
while(a==0){
printf("いや0をいくら階乗しても(ry");
return 0;
}else{
scanf("指数n=%d",&n);
if(n〈=0){
for(i=1;i〈=n;i++){
a[i] = a[iー1] / a[0];
}else if(n〉=0){
for(i=1;i〈=n;i++){
a[i] = a[iー1] * a[0];
}
}
}
printf("求める階乗の値=%d",a[n]);
return 0;
}
誰か間違いを発見したら直してくれないか?
>>542 アホなレスをするとかではなく、その番号でレスをした人は、アホ決定ってことで
>>540 もうひとつ
/*自然数の和*/
#include〈stdio.h〉
int main(void)
{
int i,n,a[100];
scanf("初期値a=%d",a[0]);
while(a[0]〈=0){
printf("error!");
return 0;
}else{
scanf("上限値n=%d",&n);
if(n〈=0){
printf("error!");
return 0;
}else if(n〉=0){
for(i=1;i〈=n;i++){
a[i] = a[iー1] + 1;
}
}
}
printf("求める自然数の和=%d",a[n]);
return 0;
}
間違いを見つけた人は直してくれ
>>547 これはwww
s/〈/</g
s/〉/>/g
s/while/if/
s/",/\n",/
s/}else if/}}else if/
ほかにもありそうな
なんだこれ OCRでも掛けたのか >[iー1]
while-elseは新しいなw
間違い探しゲームだと思う
>>548 クズのような規約を決めてるのはお前か!
まったく人の邪魔をすることしかしない奴だ
ー体何考えてんだかな
一体 ー体 似ているようで違うw
556 :
522 :2009/01/23(金) 07:22:34
>>543 すみません。
普通にURL貼り忘れてた。
>>1 のうpロダのどっかにあるから探してw
すみません、 #include〈stdio.h〉 int main(void) { int i,n,a[100]; scanf("初期値a=%d",a[0]); while(a[0]〈=0){ printf("error!"); return 0; }else{ scanf("上限値n=%d",&n); if(n〈=0){ printf("error!"); return 0; }else if(n〉=0){ for(i=1;i〈=n;i++){ a[i] = a[iー1] + 1; } } } printf("求める自然数の和=%d",a[n]); return 0; } このプログラムを書き換えて、1から10までの和を求めるプログラムを 作れませんか? putを使って出力したいのですが・・・
#include<stdio.h> int main(void) { puts("55"); return 0; }
誰か頼むからGMRES法のプログラムをはってくれないか? 組む時間がなくて探しているんだがなかなかおちてないんだ。。。 暇な奴いたら頼む。。。
忙しくてもテンプレくらい守ろうぜ
[1] 授業単元:線形システムの解法 [2] 問題文(含コード&リンク):gmres法で線形システムを解いて時間、誤差の考察を [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc 3.4 [3.3] 言語: C [4] 期限:申し訳ないが今日中なんだ [5] その他の制限:特に無し すまん完全に見落としていた! こんな感じですかね?
>>557 #include <stdio.h>
int main(void)
{
int start, end;
printf("初期値=");
scanf("%d", &start);
printf("上限値=");
scanf("%d", &end);
printf("求める自然数の和=%d\n", (start + end) * (end - start + 1) / 2);
return 0;
}
>>563 すまん!ありがとう!
いろいろ試してみる!!
>>563 すまないコンパイルで無数のエラーが。
私はc++は未経験でしていじろうにもどこをどうすればいいのか分からなかったです。
C言語のプログラムをお願いできないでしょうか?
申し訳ありません。
おまえはいったい何をいってるんだ
569 :
デフォルトの名無しさん :2009/01/23(金) 13:23:08
[1] 授業単元:プログラミング演習
[2] 問題文:
http://77c.org/p.php?f=nk5775.jpg&c=62ed このファイルの演習問題5.4です。
a=6
b=7
c=0
d=3
3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C言語。
[4] 期限:なんとか今日中でお願いします。
[5] その他の制限:特にありません。
この問題だけなにから手をつけていいかわかりません...どうかよろしくお願いします
571 :
570 :2009/01/23(金) 14:09:33
A[1][2]の値 間違えた。 10じゃなくて-10に直してからやってみてくれ。
573 :
sage :2009/01/23(金) 16:12:36
>>570 短時間でのレスありがとうございます!無事提出に間に合いました。
初めての書き込みで緊張気味だったのですが、本当にありがとうございました。
574 :
デフォルトの名無しさん :2009/01/23(金) 17:17:39
[1]プログラミング1 [2]学生のテスト結果(0以上100以下の整数値)が入っているint型配列を渡され、合格者のリストを表示する関数 void gokaku(int idata[],int gokakuten)を作りなさい。 ※int idata[]:点数の入っている配列 データの最後を識別するために、最終データの次の配列要素には、「-1」が入っているものとする。 ※int gokakuten:この値以上のものを合格者として表示する ※動作確認の為、main関数として、キーボードから合格点・学生の結果を1つずつ読み込み、-1を読み込んだのち関数gokakuを呼び出し、下記のようにディスプレイに表示するプログラムを作成すること。 ※読み込む学生のテスト結果は最大でも10個までとしてmain関数を作ること。 ――――ディスプレイ―――― 合格点を入力してください。 ○ 学生の成績を入力してください。 △ ◇ □ ☆ ・ ・ ・ 合格者リスト 1番:△ 2番:☆ 3番:○ ―――――――――――― [3-1]XP[3-2]visual studio[3-3]C言語 [4]2009/01/26 [5]ポインターはまだ習っていないので、使用しない形で回答して頂ける方がいればおねがいします!!
>>574 10個入力するか、-1が入力された時点で読み込みを終える。
#include <stdio.h>
void gokaku(int idata[], int gokakuten);
int main(void)
{
int i, gokakuten, idata[11];
puts("合格点を入力してください。");
scanf("%d", &gokakuten);
puts("学生の成績を入力してください。");
for (i = 0; i < 10; i++) {
scanf("%d", idata+i);
if (idata[i] == -1) {
break;
}
}
idata[i] = -1;
gokaku(idata, gokakuten);
return 0;
}
void gokaku(int idata[], int gokakuten)
{
int i, j = 1;
puts("合格者リスト");
for (i = 0; idata[i] != -1; i++) {
if (idata[i] >= gokakuten) {
printf("%d番: %d\n", j, idata[i]);
j++;
}
}
}
配列を渡され、合格者のリストを表示する関数 ポインターはまだ習っていないので、使用しない形で うううーん
577 :
デフォルトの名無しさん :2009/01/23(金) 19:58:44
[1] 情報処理 [2] 整数型の配列dとデータの個数nを因数として受け取り、 配列dのd[0]からd[n-1]までの内容を逆順に入れ替える関数 void reverse(int d[],int n)をつくれ [3] 環境 [3.1] OS:XP [3.2] [3.3] 言語:C [4] 期限: 2009/1/30
>>577 #include <stdio.h>
#define N 10
void reverse_array(int d[], int n)
{
int t, i;
for(i = 0; i < n/2; i++){
t = d[i];
d[i] = d[n - i - 1];
d[n - i - 1] = t;
}
}
int main(void)
{
int i, d[N];
for(i = 0; i < N; i++){
scanf("%d", &d[i]);
}
for(i = 0; i < N; i++){
printf("%d ", d[i]);
}
printf("\n");
reverse_array(d, N);
for(i = 0; i < N; i++){
printf("%d ", d[i]);
}
printf("\n");
return 0;
}
579 :
H.K :2009/01/23(金) 20:41:25
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): 明治(mであらわす)、大正(t)、昭和(s)、平成(h)の範囲において、年号と年を入力すると実行例のように西暦年に換算して出力するプログラムを作成せよ。 プログラムはm t s h以外の文字が入力されると終了するものとする。 実行例 年号と年:m 20 西暦1887年です。 年号と年:s 28 西暦1953年です。 年号と年:z 1 プログラム終了 [3] 環境 [3.1] Windows xp [3.2] vc6.0 [4] 期限: はやめでおねがいします
580 :
H.K :2009/01/23(金) 20:42:43
[5] #include<stdio.h> main() { int x,ans; char y; printf("年号と年:"); scanf("%c%d",&y,&x); /*文字型*/ while(y=='m'||y=='t'||y=='s'||y=='h') { if(y=='m') ans=1868+x-1; else if(y=='t') ans=1912+x-1; else if(y=='s') ans=1926+x-1; else if(y=='h') ans=1989+x-1; printf("%d\n\n",ans); printf("年号と年:"); scanf("%c%d",&y,&x); } printf("プログラムを終了します。"); } までできているのですが、2回目にならず終了してしまうため直してください 。
>>579 #include <stdio.h>
int main(void)
{
int x, z, ans;
char y;
while(1){
printf("年号と年:");
scanf("%c%*c", &y);
scanf("%d%*c", &x);
z = 0;
switch(y){
m': ans = 1868 + x - 1; break;
case 't': ans = 1912 + x - 1; break;
case 's': ans = 1926 + x - 1; break;
case 'h': ans = 1989 + x - 1; break;
default : z = 1;
}
if(z){
break;
}
printf("西暦%d年です。\n", ans);
}
printf("プログラム終了\n");
return 0;
}
ちょwwwif文wwwwwwwwwww
whileの条件文にzとか・・・
cはラベル付きbreakは無いんだっけ?
ないっす gotoになる(下にgotoはありだが)
587 :
デフォルトの名無しさん :2009/01/23(金) 23:53:54
[1] 授業単元: C言語 [2] 問題文(含コード&リンク):ループをEnterの入力によって終了させる。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:VC2005 [3.3] 言語:C [4] 期限:一応今月中 do{ 処理 }while() ←ここの条件をエンターを入力した場合終了するという条件にしたい。
>>587 #include <stdio.h>
#include <conio.h>
int main(void)
{
do{
}while(getch() != 13);
return 0;
}
でも、そいつは関係ないけど そこまでしてgoto避けんでもよかろうにとちょっと思わないでもない
>>589 = 頭おかしいやつ
最近、自己紹介する傍若無人な人が増えたね。
自分がおかしいと思ったんであって、他人をおかしいと言えば
言った自分がそいつからおかしいって言い返されるのは当然だろ?
独りよがりな我侭な引きこもりが多いだろ、ここって。
>>580 は do whileを使っては駄目なのか?
594 :
デフォルトの名無しさん :2009/01/24(土) 02:09:42
2つの度分秒で表された角度の差を求めるプログラムってどうやって作るんですか?
>>594 一旦秒に変換するのが定番じゃないでしょうか
>>595 具体例も何も、そのまんまだが?というか、whileとdo whileの違いが分からない素人?
こんなの、10年前に受けた大学の講義でもさらっと話に出たくらいなんだが。
>>597 じゃあdo〜whileにすることで目下のところ話題となっている点を改善してみせてくれよ
scanf()で%d読み込んだときに\nが残るのが問題であって、do〜whileは無関係だよな 的外れの寝言ほざいておいて他人を素人呼ばわりとか、腹いてえw
rewind(stdin);
それはない
#include<stdio.h> int main(void){ int no,nu,na; int tw; double num; printf("1回目の得点は?\n"); scanf("%d",&no); printf("2回目の得点は?\n"); scanf("%d",&nu); printf("3回目の得点は?\n"); scanf("%d",&na); tw=no+nu+na; num=(double)tw/3; printf("合計点:%d点\n",tw); printf("平気点:%5.1lf点\n",num); return(0); } 小数出るけどどんな計算しても .0 になっちゃう。。。 何がいけないのかな、、、
>>602 >scanf("%d",ν);
吹いたwww
あとスレチ
すいませでした 別のスレに移動します
ν ν なるほど
>>606 265252859812191058636308480000000
>>606 #include <stdio.h>
int main(void)
{
int i, j, digit = 1, fac[10]={1}, temp[10];
for(i=2; i<=30; i++) {
for(j=0; j<10; j++) temp[j] = 0;
for(j=0; j<digit; j++) {
temp[j] += fac[j] * i;
if(temp[j] >= 10000) {
if(j==digit-1) digit++;
temp[j+1] = temp[j] / 10000;
temp[j] %= 10000;
}}
for(j=0; j<digit; j++) fac[j] = temp[j];
printf("%2d!=%d", i, fac[digit-1]);
for(j=digit-2; j>=0; j--) printf("%04d", fac[j]);
putchar('\n');
}
return 0;
}
2048*2048の配列を @ A B Cと4等分に4つの象限に分けて @とC、AとB象限を入れ替えるアルゴリズムをお願いします。 配列は1次元で[i*width+j] width=2048とかでやっています。 言語はC言語です。
配列の型ぐらい書いたら?
615 :
610 :2009/01/24(土) 21:19:15
配列の型はdouble型です。
>>610 何を重視する?
速さと使用メモリ量とわかりやすさとかあるけど
617 :
610 :2009/01/24(土) 21:26:54
>>616 重視しているのは目的を達成できること。
早ければ早いほどよいですがループさせる部分にはないので全体の処理としては1度しか
行わないところなのであまり気にはしていないです。
要はできさえすればそれでよいのですが。
2次元配列でなければよいです。A[i][j]こういう形の。
テンプレ埋めないカスじゃなくてスレ違いのカスか
象限というからには A @ B C こういう風に番号ふってほしいなあ
622 :
610 :2009/01/24(土) 21:42:35
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。
>>619 こりゃ失礼・・
>>620 なにが違ってるんだ?
>>622 なんで1読んでいながらテンプレに従わない?
624 :
610 :2009/01/24(土) 21:51:41
>>623 なんで従わないといけない?従わなければならないなんてことは書いてないよ。
推奨だろ??
環境などは必要かもしれないが、アルゴリズムだけでいいんでね。。
スルーできない && テンプレもよんでない && 解けもしないのにレスしてほしくないんだがね。
>>624 だから、オレに言えるのは一つだけ。
死ね。
627 :
610 :2009/01/24(土) 22:02:08
なぁ頼むから教えてください世皆さん
おまえの態度がきにくわないから、スルーされてんだろ
>>627 なりすましなんてしょうもないことはやめろよ。おかげでコテつけるハメになるだろう。
暗に「テンプレ書けば解いてやるよ」と言ってるのがわからない610かわ…氏ね
当人は今頃yahooかgooにでもマルチしてるだろ。 この手のアオリも発展がないと退屈だな。 死ね
>>628 態度が気に喰わないからスルーしてることにしてあげたいけど
単純に考える気がないor解けないだけだろ
えー?
>>610 にお似合いのソース作って待ってるのに!
634 :
610 :2009/01/24(土) 22:08:01
型がわかれば作ってやる
>>610 だけじゃ何もわからん
636 :
610 :2009/01/24(土) 22:09:32
まぁいいや。テンプレ書いてもしょうがないから書かなかっただけなんだが。 それを判断するのは回答者とか言われるんだろうけど、同じことなんでね。 そうこう言ってるうちに自分でいくつかできたんで。
できたのかよ
2048*2048って D配列1[2048] D配列2[2048] なのか?
640 :
610 :2009/01/24(土) 22:36:04
>>639 てめえらがどんくさいからもう自己解決しちまったよ。
テンプレテンプレうるせえクズ共が
644 :
610 :2009/01/24(土) 22:52:50
>>642 ありがとう
お前はいい奴だな
他の奴らは死ね
646 :
デフォルトの名無しさん :2009/01/24(土) 23:28:36
>>642 ありがとうございます。
仕様は一応書いてあるように1次元配列であることぐらいで
後はなんとかなる予定でしたので。考え方だけちらっと見せてもらえれば
環境に合わせるだとかそういうのは全部自分でやるつもりだったので。
しかし、642以外はただ単にできもしねーくせにテンプレテンプレほざいてるだけの
無能だってことがよくわかったよ。ただ叩きたいだけなのなw
偽610は今後もテンプレ厨を叩いておけ
648 :
デフォルトの名無しさん :2009/01/25(日) 01:41:49
前にこのスレでアドバイスをもらって、 自分なりに考えてみたんですが、わかりませんでした。 助けてください。 自作strcpyについてです。 #include<stdio.h> char *my_strcpy(char *s1, char *s2){ while(*s2 != NULL){ *s1 = *s2; s1++; s2++; } *s1 = NULL; return s1; } int main(){ char *s1 = "abc"; char *s2 = "wxyz"; my_strcpy(s1, s2); printf("s1:%s s2:%s \n", s1, s2); return 0; }
649 :
デフォルトの名無しさん :2009/01/25(日) 01:42:37
648続き 実行後、 w<-s1が指しているところ x y z \0<-s2が指しているところ w x y z \0 となっていることはわかりました。 s2のアドレスを別のところに変えることができれば、 s2もちゃんと表示されると考えたんですが、 どうすればいいかわかりませんでした。 初心者だからと言って片づけてはいけないとは思うのですが、 まだ始めたばっかりでわかりません。 よろしくお願いします。
char s1[16] = "abc"; char s2[16] = "wxyz";
651 :
650 :2009/01/25(日) 01:58:35
s2のアドレスを別のところにするだけだと、 どんなバグを引き起こすかわからない。 s1のメモリをきちんと確保しとかないとだめ。
・実行後の指しているところを誤認識している ・コピーされる側に十分な領域がない ・NULLはヌルポインタの為にあるのであって、NUL文字の為にあるわけではない char *my_strcpy(char *s1, char *s2){ char *p = s1; while(*s2){ *s1 = *s2; s1++; s2++; } *s1 = '\0'; return p; } という感じで。 while(*s1++ = *s2++) ; とするのが多いと思うけれど、それはもう少し理解が進んでから。
653 :
201 :2009/01/25(日) 02:16:20
>>652 そのコードは問題解決になっていないと思われ
>>651 というかmallocさせたほうがいいのでは?と言ってみるテスt
まあ、そうなるとコードが膨れるからやめたほうがいいか
>>653 どこでmalloc?
strcpyの動作確認の為なんだから配列でいいじゃんと思うんだけど
追加で質問して申し訳ないのですが while(*s1++ = *s2++) ;とした場合 最終的なs1は配列外を指すポインタになると思うのですが大丈夫なんですかこれは
>>656 関数内でmallocするならそれはstrdupの習作になるしねぇ
>>657 だからもう少し理解が進んでからと書いた。
ループ終了時のs1は終端文字の次を指しているが、それは関数内での話であり、呼び出し側のs1には影響を与えない。
659 :
658 :2009/01/25(日) 02:33:07
連レスごめん。 配列外になるかどうかはまた別の話です。
660 :
201 :2009/01/25(日) 02:37:36
>>655 >strcpyの動作確認の為なんだから配列でいいじゃんと思うんだけど
ここではstrcpyの動作よりもバッファオーバーフローのほうが重要かなと思って。
それならmallocのほうがためになるだろうと。
今気づいたけど、完全にスレチだな(w
>>657 大丈夫じゃないです
s1返したらいけません(返してもいいけど使っちゃだめ
661 :
201 :2009/01/25(日) 02:39:34
いえいえ。
今頃過去ログを見たんだが、それ(リテラル)を変更するなんてとんでもない!
>>282 とか。
>>654 ファイルの書式を
駅名<Tab>(1個もしくは2個)都道府県名<Tab>(1個もしくは2個)次の行の駅までの距離
と解釈してみているんだけど、あってますか?
あと、今回の課題だと都道府県名は読み捨てていい?
664 :
デフォルトの名無しさん :2009/01/25(日) 02:54:47
いやそれネタだろ(藁)
>>654 問題とテキストの1,2行目がくいちがってる。
正しいのを頼む
>>665 tokyo→shina 6.8
tokyo→yokohama 6.8+22.0=28.8
とか
667 :
606 :2009/01/25(日) 03:23:22
ありがとうございました。
どういたしまして
671 :
670 :2009/01/25(日) 07:39:56
#include <string.h> 抜けてた。
[1] 授業単元: 情報処理基礎及び演習 [2] 問題文:問 以下の処理を1つのプログラムで記述します。プログラムは1つです。 1.5行5列の行列[A]にデータを入力し、表示しなさい。 データは不規則な値でキーボードから入力します。処理は実数で行う。 2.行列[A]の転置行列を行列[B]に代入し、表示しなさい。 3.[C]←[A]+[B]の計算をして行列[C]を表示しなさい。 4.[C]←[A]−[B]の計算をして行列[C]を表示しなさい。 5.[C]←[A]*[B]の計算をして行列[C]を表示しなさい。 6.5.で求めた行列[C]の転置行列を行列[B]に代入し、表示しなさい。 [3] 環境 [3.1] OS: vista [3.2] コンパイラ名とバージョン: visual studio 2008 [3.3] 言語: C [4] 期限: 1月27日まで [5] その他の制限: 初歩的なことと配列まで習いました。ポインタなどはまだ習っていません。 恐縮ですが、お教え頂けたら幸いです。
いまうー発見!
676 :
デフォルトの名無しさん :2009/01/25(日) 18:49:59
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): 以下の条件を満たすプログラムを作成する。 1.毎日の収入・支出を管理する(家計簿)プログラム であり、データをファイルから読み込む機能と、書き込む機能がある。 2.新しいデータ(もしくはデータの一部分)を追加する機能、特定のデータ(もしくはデータの一部分)を削除もしくは修正する機能がある 3.データのソート(並び替え)を行う機能がある。 4.データから特定の部分のみを取り出して表示(もしくは保存)する機能がある 5.構造体を使用している 6.構造体のポインタを引数として持つ関数を使用している 7.enum型を使用している、もしくはプリプロセッサ「#define」を使用している [3] 環境 [3.1] OS: windows xp [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: C++ [4] 期限: 1月26日2:00まで [5] その他の制限: 条件を満たしていればなんでもかまいません。 よろしくおねがいします。
678 :
デフォルトの名無しさん :2009/01/25(日) 22:08:16
679 :
デフォルトの名無しさん :2009/01/25(日) 23:10:13
char *pnt[]={"Apple","Orange","Banana","Strawberry"}; 上のやつをもちろんポインタを使って、 ABC順にソートして結果を表示するプログラムを御願いします。 文字比較にstrcmpを使ってください。 使うとは思いますけど・・・。
そこまで言われると使いたくなくなるな
上のやつをソートだったらstrcmp使わんでも if (**a > **b)でいけるんじゃね?
682 :
デフォルトの名無しさん :2009/01/25(日) 23:36:53
683 :
525 :2009/01/25(日) 23:38:05
684 :
デフォルトの名無しさん :2009/01/25(日) 23:40:38
>>679 int compare(const void* s1, const void* s2)
{
return strcmp(*(char**)s1, *(char**)s2);
}
int main(int argc, char* argv[])
{
char *pnt[]={"Apple","Orange","Banana","Strawberry"};
qsort((void*)pnt, sizeof(pnt)/sizeof(char*), sizeof(char*), compare);
for (int i = 0; i < 4; i++) {
printf("%s\n", pnt[i]);
}
return 0;
}
687 :
デフォルトの名無しさん :2009/01/26(月) 00:08:11
>>686 えーっと。
出来れば関数なしでメインだけで御願いできませんか?
それはqsortを使うなと言ってるんだよね ソートアルゴリズムの希望は?
>>679 #include <stdio.h>
int main(void)
{
char *pnt[]={"Apple","Orange","Banana","Strawberry"}, *temp;
int i, j;
for(i=1; i<sizeof pnt / sizeof(char *); i++) {
for(j=sizeof pnt / sizeof(char *); j>=i; j--) {
if(strcmp(pnt[j], pnt[j-1]) < 0) {
temp = pnt[j];
pnt[j] = pnt[j-1];
pnt[j-1] = temp;
}}}
for(i=0; i<sizeof pnt / sizeof(char *); i++) puts(pnt[i]);
return 0;
}
690 :
デフォルトの名無しさん :2009/01/26(月) 00:33:01
>>688 まぁどう考えても自作関数使うなって言う意味だろw
>>691 自作関数なしでqsortは使えないだろw
>>691 そうだね、自作関数を使って欲しくないんだろうね。
けど、なんでわざわざそこを?
自分でクイックソートのアルゴリズムをmain関数内で書くとか。
>>692 strcmpが元から比較関数に使えるのに?
>>690 #include <string.h>付け足しといて
701 :
688 :2009/01/26(月) 01:26:05
こ、これは。 これほどまでに援護射撃を受けたことがあっただろうか!
もう解答済みなのにね
703 :
696 :2009/01/26(月) 01:48:50
キャストの仕方も知らないやつは黙っていてくれ
>>672 すみません、このプログラムをコンパイルして走らせたのですが
既にあるテキストファイルを表示追加などを行なう形にしてほしいのですが
なんとか自分で改変しようと思いましたが挫折しました
よろしくお願いします [1] 授業単元 コンパイラ [2] 問題文 次の文法を解析する再帰下降プログラムを書け(C言語) 式::= 数 | 左波括弧 右波括弧 | 左波括弧 列 右波括弧 列::= 式 | 列 コンマ 式 解析関数の名前はexpression(式)とsequence(列)とする。字句解析関数はget_token() 字句の種類を表す値はNUMBER(数)、LEFT_BRACE(左波括弧)、RIGHT_BRACE(右波括弧)、COMMA(コンマ)とする [3] 環境 C言語なら何でも [4] 期限1月中
709 :
704 :2009/01/26(月) 02:45:33
あ、なんとかなりました。
無理やり qsort 使った方法 #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct tag_string_t{ char data[20]; }string_t; int main(int argc, char* argv[]) { string_t pnt[]={{"Apple"},{"Orange"},{"Banana"},{"Strawberry"}}; int i; qsort(pnt, 4, sizeof(pnt[0]), strcmp); for (i = 0; i < 4; i++) { printf("%s\n", pnt[i].data); } return 0; }
構造体いらなかったw #include<stdio.h> #include<stdlib.h> #include<string.h> int main(int argc, char* argv[]) { char pnt[][20]={{"Apple"},{"Orange"},{"Banana"},{"Strawberry"}}; int i; qsort(pnt, 4, sizeof(pnt[0]), strcmp); for (i = 0; i < 4; i++) { printf("%s\n", pnt[i]); } return 0; }
713 :
デフォルトの名無しさん :2009/01/26(月) 09:38:43
>>703 キャストどうこうって問題じゃねーからw
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int cmp(const void *a, const void *b)
{
return strcmp(*(char **)a, *(char **)b);
}
int main(int argc, char **argv)
{
char *foo[] = { "abc", "bb", "aaaaa" };
char *bar[] = { "abc", "bb", "aaaaa" };
qsort(foo, sizeof(foo) / sizeof(char *), sizeof(char *), cmp);
qsort(bar, sizeof(bar) / sizeof(char *), sizeof(char *), (int (*)(const void*, const void*))strcmp);
puts(*foo);
puts(*bar);
return 0;
}
>>706 void mikan1::operator -(mikan1 m1)
{
int x = a*50 + b - (m1.a*50+m1.b);
a=x/50;
b=x%50;
}
>>715 そうやればよかったのか…
ありがとうございました
失礼します。 [1] 授業単元: コンピュータリテラシー研究 [2] 問題文(含コード&リンク):ファイル seiseki.txt 例 aoki 50 bando 60 〜 'seiseki.txt'を読んで、名前をabc順に管理して、ほかのファイル(seisekiA.txt)に書き写す という働きをするプログラムを作成 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン:BCC Developer [3.3] 言語:C++ [4] 期限: 2月3日 さっぱりわからないです… どなたか教えていただけませんか。
>>705 > 次の文法を解析する再帰下降プログラムを書け(C言語)
解析するってどんな結果にすることだ?
>>717 #include <iostream>
#include <fstream>
#include <map>
int main(void)
{
std::ifstream ifs("seiseki.txt");
if (ifs.fail()) {
std::cerr << "failed to open seiseki.txt" << std::endl;
return 1;
}
std::map<std::string, int> seiseki;
std::string name;
int score;
while (ifs >> name >> score) {
seiseki.insert(std::make_pair(name, score));
}
ifs.close();
std::ofstream ofs("seisekiA.txt");
if (ofs.fail()) {
std::cerr << "failed to open seisekiA.txt" << std::endl;
return 1;
}
std::map<std::string, int>::iterator it(seiseki.begin()), end(seiseki.end());
while (it != end) {
ofs << it->first << " " << it->second << std::endl;
++it;
}
ofs.close();
return 0;
}
721 :
デフォルトの名無しさん :2009/01/26(月) 16:10:01
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク) 課題内容 入力された「対象文字列(s)」の中から、「検索文字列(t)」を検索し、 該当した「対象文字列」の添字を戻り値とする関数「search(s,t)」を作成しなさい。 ただし、「対象文字列」が「検索文字列」を含まない場合には「-1」を戻り値とする。 なお、関数「search(s,t)」は別ファイルに分け(main関数とそれ以外の関数)、 分割コンパイルできるように作成しなさい。 このとき、main関数以外の関数宣言が記述されたヘッダファイルを作成し、 main関数のソースファイルにて利用すること。 【入力例】 文字列s = aababcbaa 文字列t = abc 【出力例】 検索結果 = 3 [3] 環境 [3.1] OS:WindowsXP [3.3] 言語:Cでお願いします。 [4] 期限:早めに。 [5] その他の制限:ありません。 よろしくお願いします。
strncmpとか使っちゃダメ?
strstrじゃなくて?
724 :
デフォルトの名無しさん :2009/01/26(月) 16:19:34
>722 >723 途中まで出来てます。 #include <stdio.h> #define STRMAX 140;//最大文字数 int search(char c_str_s[],char c_str_t[]);//検索関数 int main(void){ int search_num;//検索結果を格納する変数 char c_str_s[STRMAX];//検索対象文字列を格納する配列 printf("対象文字列を入力してください>>");//対象文字列を入力してくださいというメッセージを出力 fgets(c_str_s ,STRMAX, stdin);//検索対象文字列 str[strlen(c_str_s) - 1] = '\0'; char c_str_t[STRMAX];//検索文字列を格納する配列 printf("検索文字列を入力してください>>");//検索文字列を入力してくださいというメッセージを出力 fgets(c_str_t ,STRMAX, stdin);//検索対象文字列 str[strlen(c_str_t) - 1] = '\0'; search_num=search(char c_str_s,char c_str_t); return 0; }
strstr使ったらヤバいすぐできちまう
この問題ないようでつかっていいってこたないだろうなw
と、いわれましても 〜main.c〜 #include <stdio.h> #include "search.h" int main() { printf("%d\n", search("ababcaa", "abc")); return 0; } 〜search.h〜 int search(const char *, const char *); 〜search.c〜 #include <string.h> int search(const char *s, const char *t) { char *r = strstr(s, t); if (!r) return -1; return r-s; }
先生が怒らないならいいんじゃない?
729 :
デフォルトの名無しさん :2009/01/26(月) 16:33:22
一応strncmp()とstrlen()は標準のものを使った。 #include <string.h> #include "ヘッダファイルの名前" int search(const char *s, const char *t) { int i, len; len = strlen(t); for (i = 0; s[i]; i++) if (strncmp(s + i, t, len) == 0) return i; return -1; } 以下main()から呼び出すためのヘッダファイル #ifndef __DEFINED_SEARCH_H #define __DEFINED_SEARCH_H int search(const char *s, const char *t); #endif /* #ifndef __DEFINED_SEARCH_H */ 終わり。
どうでもいいけど 先頭のアンダースコアは予約されてるよ
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 2文探索プログラムで 最良の木と最悪の木を1つずつ作成せよ 入力するものは2桁の数字6つとする [3] 環境 [3.1] OS: Windows XP PS3 [3.2] コンパイラ名とバージョン:bcc [3.3] 言語: C言語 [4] 期限: 2009年1月28日18:00まで よろしくお願いします
んだ。2個はだめだ。 _DEFINED_SEARCH_H_ でどうぞ
グローバル スコープを持ち、_ で始まる名前 _ で始まり、その次が大文字の名前 __ を含む名前
あ、Cの場合は 「__ を含む名前」 が「__ で始まる名前」か
737 :
デフォルトの名無しさん :2009/01/26(月) 18:48:22
エラストテネスのふるいを用いて2から1000までの間の素数を求め表示するプログラム を作成せよ。 (1)2.3.4...1000までの表を作る。 (2)2に○を付け、2の倍数全部に×をつける (3)印の付いていない最小の数に○を付け、その数の倍数全部に×を付ける。 (4)3.をすべての数に印が付くまで繰り返す。 (5)○が付いているのが素数。 c++言語で<stdio.h>のヘッダでお願いします。
>>737 #include <stdio.h>
#define N 1000
int main(void)
{
char sieve[N+1] = {0};
int i, j;
for (i = 2; i < N; i++) {
if (!sieve[i]) {
printf("%d ", i);
for (j = 2*i; j < N; j += i) {
sieve[j] = 1;
}
}
}
putchar('\n');
return 0;
}
それと、一応指摘しておくと「エラトステネス」な。
>>739 細かい指摘だが
(j = 2*i; j < N; j += i)
↓
(j = 2*i; j <= N; j += i)
こうでないか?
[1] 再帰 [2] 入力:自然数nおよびr(n≧r) 出力:集合{1,2...,n}から異なるr個の要素を選ぶ、すべての組み合わせの辞書式順の生成 [3] [3.1]Windows [3.3]C [4] 来週中ですがなるべく早めにお願いしたいです [5] ・再帰的な関数を必ず定義してください ・再帰のアイデアは樹形図そのもの ・r要素の組み合わせを表すのに配列Aを使う ・非再帰的な関数も書いてくださるならお願いします
743 :
デフォルトの名無しさん :2009/01/26(月) 22:21:32
[1] 情報処理 [2] 1. 整数配列に、11 から3 きざみで57 までの数値を順に配列に代入しなさい。 1.1 代入した数値を小さい順に出力しなさい。 1.2 代入した数値を大きい順に出力しなさい。 1.3 最小値、最大値を出力しなさい。 1.4 代入した数値の、総和を求め出力しなさい。 以上のプログラム(サブ関数を使用する)、結果とプログラムを提出します。 2. 適当な数の整数値(配列に代入する数は15 以上)を配列に入力し(キーボードから入力する)、以 下の処理を行ないます。 1.1 配列内の値を表示しなさい。但し1 行に7 個の値を表示する。 1.2 最大値を表示しなさい。 1.3 代入された値の、総和、平均を計算し表示しなさい。 1.4 配列内の値を小さい順に表示しなさい。但し1 行に7 個の値を表示する。 以上のプログラム(サブ関数を使用する)、結果を提出します。 [3] 環境 [3.1]Windows [3.3] C++ [4] 今週金曜までです [5] if,for,while,自作関数、配列。主に配列を使うらしいです。お願いします。
744 :
デフォルトの名無しさん :2009/01/26(月) 22:22:48
[1] 情報処理 [2] 問 以下の処理を1つのプログラムで記述します。プログラムは1つです。 1. 5行5列の行列[A]にデータを入力し、表示しなさい.データは不規則な値でキーボードから入 力します。処理は実数で行う。 2. 行列[A]の転置行列を行列[B]に代入し、表示しなさい. 3. [C]←[A]+[B]の計算をして行列[C]表示しなさい. 4. [C]←[A]−[B]の計算をして行列[C]表示しなさい. 5. [C]←[A]*[B]の計算をして行列[C]表示しなさい. 6. 5.求めた行列[C]の転置行列を行列[B]に代入し、表示しなさい. プログラムと結果を提出します。 [3] 環境 [3.1]Windows [3.3] C++ [4] これも今週金曜までです [5] if,for,while,自作関数、配列。主に配列を使うらしいです。
>>742 辞書式順がこれで正しいのかは分からないけど。
#include <stdio.h>
#define LENGTH 100
void print_stack(int length, int * stack) {
int i;
for (i = 0; i < length; i++)
printf("%2d ", stack[i]);
printf("\n");
}
void recursive_combination(int n, int r, int start, int depth, int * stack)
{
int i;
if (r == depth) {
print_stack(r, stack);
return;
}
for (i = start; i <= n; i++) {
stack[depth] = i;
recursive_combination(n, r, i + 1, depth + 1, stack);
}
}
void combination(int n, int r)
{
int stack[LENGTH];
recursive_combination(n, r, 1, 0, stack);
}
int main(void)
{
combination(5, 2);
return 0;
}
747 :
739 :2009/01/26(月) 23:01:26
[1] C言語(構造化・関数・配列・ポインタ・構造体)
[2] 長いので全文はアップローダーにあげました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm (現行スレNo.8742)
内容はCSVファイルの入力から並べ替え→出力といったものです。
[3] 環境
[3.1] OS: Windows
[3.2] Borland C++ Compiler 5.5
[3.3] 言語: Cのみ
[4] 2009年1月31日14:00まででお願い致します。
[5] 使っていいのは配列・ポインタ・構造体までです。
ソースと変数関数の意味を記載する必要があります。
第一ステップが必須、第二ステップは努力目標です。よろしくお願いします。
749 :
デフォルトの名無しさん :2009/01/26(月) 23:10:57
750 :
デフォルトの名無しさん :2009/01/26(月) 23:14:12
>>746 でもまだ解答待ちのようですね(´・ω・`)
>>741 ありがとうございます。
申し訳ないのですが文字化けしていてよくわからないので、どなたかもう1パターンお願いできますか?
>>751 文字コードとかUTF8とかでぐぐれ
もしくはちゃんとしたテキストエディタを
って書いて気づいたけど、VSで化けるはずがないだろう。
一体どういう環境なんだ
754 :
デフォルトの名無しさん :2009/01/26(月) 23:36:21
>>587 です。レス遅れてすいません。
>>588 さん素早いレスありがとうございます。
やってみたのですが<conio.h>というヘッダファイルが見当たらないというエラーが返ってきてしまいました。
いまさら条件を追加するのは申し訳ないと思うのですが、できれば標準ライブラリ関数でやることはできないでしょうか?
勝手な意見をして誠に申し訳ございません。
ご協力よろしくお願いします。
755 :
デフォルトの名無しさん :2009/01/26(月) 23:37:31
757 :
684 :2009/01/26(月) 23:53:16
>>746 言語がC++なところが新しい
てか、boost使えば瞬殺?
759 :
デフォルトの名無しさん :2009/01/26(月) 23:57:47
・・・・・ 743の課題C++じゃなくてCでした^^;
>>753 751じゃないが、
>>741 をIEで開くと化ける。もちろんエンコードを指定しなおすと正常。
環境はVistaSP1でIE7ね。
761 :
741 :2009/01/27(火) 00:10:09
環境がWindows系っぽいときはsjisに変換してから上げたほうが良さそうだな。。。 次からそうするか。
>>761 そういうときはUTF-8だよ。
しかし、BOM付けないとWindows系には優しくないという罠。
ブラウザも使いこなせないような奴単位落としたらいいじゃん面倒だなw
>>764 ここは、C系で一番バカな質問者の集まるスレだぞ?
これが他所のスレッドに流出したら、どれだけ迷惑か。
[1] 授業単元: C言語(構造化・関数・配列・ポインタ・構造体) [2] 問題文(含コード&リンク): fileを読み込んで出力し、関数内にて使用した文字列を 格納するbuff配列のアドレスをmain関数内にて表示しなさい またmain関数内では、ファイルのオープン・クローズと関数呼び出し 関数からの戻り値を表示する処理のみおこない、 それ以外はすべて関数内でおこなうこと。 読み込むファイルの名前はユーザーが入力できることとする。 1行の最大読み込み文字数:256 ファイル名最大文字数:40 【イメージ的には↓】 cccccc cccc cccccc cccc buffアドレス:b23a84 [3] 環境 [3.1] OS: Windows [3.2] Borland C++ Compiler 5.5 [3.3] 言語: Cのみ [4] できれば早めでよろしくお願いします
>>670 本当にありがとうございます。
助かりました。
>>766 とりあえず問題文は一字一句間違いなく丸写ししたほうがいいと思うよ
769 :
710 :2009/01/27(火) 02:35:21
>>736 のをVC++2008でビルドしたらエラーがでました。何かこちら側のミスでしょうか?
error C2146: 構文エラー : ';' が、識別子 'convert' の前に必要です。
error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
error C2146: 構文エラー : ';' が、識別子 'convert' の前に必要です。
error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
error C2086: 'int ssize_t' : 再定義されました。
'ssize_t' の宣言を確認してください。
error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
CじゃなくてC++としてコンパイルしちゃってるんじゃないか
ごめん、適当すぎたかも。 ssize_t を int で置換
>>742 こんな感じに出ればいいの? n=6 r=3
1:{1,2,3}
2:{1,2,4}
3:{1,2,5}
4:{1,2,6}
5:{1,3,4}
6:{1,3,5}
7:{1,3,6}
8:{1,4,5}
9:{1,4,6}
10:{1,5,6}
11:{2,3,4}
12:{2,3,5}
13:{2,3,6}
14:{2,4,5}
15:{2,4,6}
16:{2,5,6}
17:{3,4,5}
18:{3,4,6}
19:{3,5,6}
20:{4,5,6}
773 :
デフォルトの名無しさん :2009/01/27(火) 10:27:22
三行三列の行列のデータを読み込み転置行列および逆行列を計算し表示する プログラムを作成せよ。 c言語<stdio.h>でお願いします。
774 :
デフォルトの名無しさん :2009/01/27(火) 10:35:24
二次方程式ax二乗+bx+c=0のa,b,cを入力すると答えを出すプログラムを作成せよ ただしaが0の場合を考慮せよ。また実根、重根、虚根の判定をして、重根の場合は 根を一つだけ表示し、虚根の場合はx=0.5+0.3i,x=0.5-0.3i のように実部、虚部を表示せよ。 c言語<stdio.h> お願いします。。。
>>774 #include <stdio.h>
#include <math.h>
int main(void)
{
double a, b, c, D, x;
printf("a = "); scanf("%lf", &a);
printf("b = "); scanf("%lf", &b);
printf("c = "); scanf("%lf", &c);
D = (b * b - 4.0 * a * c) / (2.0 * a);
x = b / (-2.0 * a);
if (D > 0)
printf("x = %f, x = %f\n", x - sqrt(D), x + sqrt(D));
else if (D == 0)
printf("x = %f\n", x);
else {
D *= -1.0;
printf("x = %f - %fi, x = %f + %fi\n", x, sqrt(D), x, sqrt(D));
}
return 0;
}
>>766 激しく日本語でおkな問題文だ
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FILENAMELEN (40 + 1)
#define BUFFSIZE (256 + 1)
long DoneMyself(FILE *fp)
{
char buff[BUFFSIZE];
while (fgets(buff, BUFFSIZE, fp) != NULL) printf(buff);
return (long)buff;
}
int main(void)
{
FILE *fp;
char filename[FILENAMELEN];
printf("input filename: ");
*strchr(fgets(filename, FILENAMELEN, stdin), '\n') = '\0';
fp = fopen(filename, "r");
printf("buff:アドレス%x\n", DoneMyself(fp));
fclose(fp);
return 0;
}
777 :
738 :2009/01/27(火) 11:52:32
>>741 文字化けは解決しました。どうもすみません。
後ビルドしてみたのですが並べ替える前と並べ替えた後のところがdatファイルにきちんと表示されないのですが・・・
778 :
デフォルトの名無しさん :2009/01/27(火) 11:52:35
781 :
デフォルトの名無しさん :2009/01/27(火) 14:11:12
782 :
デフォルトの名無しさん :2009/01/27(火) 14:29:44
>>762 713です。
コンパイルは通ったのですが、実行すると以下のようなエラーが出ました。
何かこちら側のミスでしょうか?
error:Illefal format[line:15 head]
783 :
デフォルトの名無しさん :2009/01/27(火) 14:31:23
↑ error:Illegal format[line:15 head] の間違いでした。すみません。
>>783 データファイルの改行コードがLFになってないんじゃないの?
多分、CR+LFになっている。
785 :
デフォルトの名無しさん :2009/01/27(火) 16:24:15
内容: [1] 授業単元:プログラミング [2] 2×2分割表の任意の4要素を入力するとフィッシャーの直接確率検定 (両側検定)を行う(p値を求めて表示する)プログラムを作成せよ [3] 環境 [3.1] OS: Windows xp [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: C [4] 期限: 1/29 [5] その他の制限: なるべく簡単にお願いします
787 :
710 :2009/01/27(火) 18:16:34
コンパイルできました。ありがとうございました。
788 :
デフォルトの名無しさん :2009/01/27(火) 18:34:18
>>779 ありがとうございました!!
もしよければ、評価関数を使わない場合もできませんでしょうか……
評価関数ってどれ?
>>788 >>1 ・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
>>788 マクロのことかな
単なる置換だから手動で書き換えてくれ
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): リスト構造を使ったキューを実現するプログラムを作れ。 1つの要素にはアルファベット20文字以内の文字列を入れられるようにすること。 0(Exit)を選択したらキューに蓄えられているデータを順に出力せよ。 具体的には以下のように出力される。 Select: (1) Enqueue , (2) Dequeue , (0) Exit : 1 Input strings : yamada Select: (1) Enqueue , (2) Dequeue , (0) Exit : 1 Input strings : takahashi Select: (1) Enqueue , (2) Dequeue , (0) Exit : 1 Input strings : tanaka Select: (1) Enqueue , (2) Dequeue , (0) Exit : 2 Output strings : yamada Select: (1) Enqueue , (2) Dequeue , (0) Exit : 0 Queue : takahashi - tanaka [3] 環境 [3.1] Win [3.2] gcc [3.3] C [4] 期限:木曜日までです><よろしくお願いします。
>>790 あ、すいません。次からきをつけます……
>>791 わかりました。とりあえずやってみます
すみません、そなたか
>>731 お願いできないでしょうか
>>731 最良
1
/\
2 3
/\/\
4 5 6
最悪
1
\
2
\
3
\
4
\
5
\
6
5変じゃない?
あれ、ほんとだね。 なんとか型UFOみたいだなーとか思いながら書いてて気づかなかったw
5の件もだけど、こうの方がいいかな? 1 /\ 2 5 /\ \ 3 4 6
二分探索なのだから、 探索木じゃないのかえ?
どうやって探索するんだその木は
最小値をpop -> 評価 -> ヒープ再構築 実装は楽しそうだね★ミ
探索する人の気持ちになって、考えてみてください
4 2 5 1 3 6
811 :
デフォルトの名無しさん :2009/01/28(水) 00:12:31
>>677 これを#define N 5を用いずに書くとどうなりますか??
>>811 Nって書いてあるところを全部5に置き換える
813 :
デフォルトの名無しさん :2009/01/28(水) 00:18:42
どなたか
>>743 の問題お願いしますm(_ _"m)
814 :
デフォルトの名無しさん :2009/01/28(水) 00:21:26
どなたか
>>743 の問題お願いしますm(_ _"m)
815 :
デフォルトの名無しさん :2009/01/28(水) 00:21:32
>>812 ありがとうございます。あともう一点ですが、
>>677 のputchar('\n');を使わないで書くことはできませんか?
817 :
デフォルトの名無しさん :2009/01/28(水) 00:25:19
お手数ですがお願いします。 [1] 授業単元: C言語 [2] 問題文(含コード&リンク): 0〜99の100個の数字から異なる30個を選び、配列COM[30]に格納せよ 次に異なる6個の数字を入力し、順番に配列MAN[6]に格納せよ(乱数使用:123で初期化) ソートを用いて配列COM、MANの要素をそれぞれ小さい順にならべよ 配列COMに含まれる配列MANの数字の個数をcountを求めよ 最後に配列COM、MANの全要素、変数countをresult.outに書き込め 出力形式は自由だがmain関数は10行以内とする [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 28日の18時まで [5] その他の制限:特になし
>>743 とりあえず1だけ。激しく酔っ払ってるから間違ってたらごめんね
#include <cstdio>
void prob1(void)
{
int a[16], j = 0;
for (int i = 11; i <= 57; i += 3) a[j++] = i;
for (int i = 0; i < j; ++i) printf("%2d ", a[i]); puts("");
for (int i = j - 1; i >= 0; --i) printf("%2d ", a[i]); puts("");
printf("max = %d, min = %d\n", a[j - 1], a[0]);
int total = 0;
for (int i = 0; i < j; ++i) total += a[i];
printf("total = %d\n", total);
}
int main(void)
{
prob1();
return 0;
}
>>809 問題文嫁w
> 入力するものは2桁の数字6つとする
822 :
デフォルトの名無しさん :2009/01/28(水) 00:34:08
823 :
デフォルトの名無しさん :2009/01/28(水) 00:40:04
>>819 ありがとうございます!
今家には動作確認する環境が無いので、明日動作確認してみます!
825 :
デフォルトの名無しさん :2009/01/28(水) 00:48:25
>>824 本当にありがとうございます。助かりました。。
>>786 参考:
ttp://aoki2.si.gunma-u.ac.jp/lecture/Cross/Fisher.html #include<stdio.h>
double fac(int n) { double r = 1; for (; n > 1; n --) r *= n; return r; }
double P(int a, int b, int c, int d) { return fac(a+b)*fac(c+d)*fac(a+c)*fac(b+d) / (fac(a+b+c+d)*fac(a)*fac(b)*fac(c)*fac(d)); }
int main() {
int a, b, c, d, va, vb, vc, vd; double Pa, Pva, Psum = 0;
printf("a b\nc d\n\n");
printf("a="); scanf("%d", &a); printf("b="); scanf("%d", &b);
printf("c="); scanf("%d", &c); printf("d="); scanf("%d", &d);
Psum = Pa = P(a, b, c, d);
printf(" a b c d Pa\n"); printf("%3d %3d %3d %3d %.12f @\n", a, b, c, d, Pa); printf("---\n");
for (va = a+1; va>=0 && (vb=a+b-va)>=0 && (vc=a+c-va)>=0 && (vd=d-a+va)>=0; va ++) {
Pva = P(va, vb, vc, vd);
if (Pva <= Pa) Psum += Pva;
printf("%3d %3d %3d %3d %.12f %c\n", va, vb, vc, vd, Pva, Pva<=Pa?'@':' ');
}
printf("---\n");
for (va = a-1; va>=0 && (vb=a+b-va)>=0 && (vc=a+c-va)>=0 && (vd=d-a+va)>=0; va --) {
Pva = P(va, vb, vc, vd);
if (Pva <= Pa) Psum += Pva;
printf("%3d %3d %3d %3d %.12f %c\n", va, vb, vc, vd, Pva, Pva<=Pa?'@':' ');
}
printf("---\nPsum=%.12f\n", Psum);
return 0;
}
>>817 言葉がメチャクチャだが、
「行」の定義ぐらい聞いておこうか?
void f(void)の中で全部やって、mainはそれを呼ぶだけでもオッケーなんかな
for(i=j=cnt=0; i < 6 && j < 30;) { if(MAN[i] < COM[j]) i++; else if(MAX[i] > COM[j]) j++; else i++, j++, cnt++; } ソート済みならこんなのはどうよ?
いいね
>>797 です
なんとか自分で二分探索木作ることができました
すみませんでした
834 :
817 :2009/01/28(水) 01:46:42
>>827 問題文そのまま写したらちょっと変になってしまいました・・・
>>828 早い回答ありがとうございます。
835 :
792 :2009/01/28(水) 02:42:28
>>799 ありがとうございます!
リスト構造を使ったキューにしたいのですがそのverも時間がありましたらよろしくおねがいします。
>>756 お礼が遅くなって申し訳ありません。
ありがとうございました。本当に助かりました。
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): コマンドライン引数を使用して、指定した読み込みファイルからテキストを読み込み、 中央揃えで画面に表示する。ただし、1行は80文字とする [3] 環境 [3.1] OS:Windows Vista [3.2] bcc [3.3] 言語:C [4] 期限: 1月29日 よろしくお願いします
>>705 ってのは、結局どんな出力を期待してるんだ?
>>840 もとのコードがコンパイルできないって、どう言うことよ。
843 :
デフォルトの名無しさん :2009/01/28(水) 17:27:28
>>838 行長には行末改行も含めた。
#include <stdio.h>
#include <string.h>
enum {LEN = 80 + 1, }; /* 行長 + '\0' */
int main(int argc, char **argv)
{
FILE fp;
char s[LEN];
int len, i, j;
if (argc != 2) {
fprintf(stderr, "オプションはファイル名1つのみです。\n");
return 1;
}
if ((fp = fopen(argv[1], "r")) != NULL) {
fprintf(stderr, "ファイル\"%s\"をオープンできません。\n", argv[1]);
return 2;
}
while (fgets(s, LEN, fp) != NULL) {
len = strlen(s);
j = (LEN - 1 - len) / 2;
for (i = 0; i < j; i++)
putchar(' ');
s[len - 1] = (s[len - 1] == '\n')? '\0' : s[len - 1];
printf("%s\n", s);
}
return 0;
}
>>843 返事遅れて申し訳ありません
本当にありがとうございました
[1] 授業単元: プログラミング実習2 [2] 問題文(含コード&リンク): 15パズルを作成せよ ・4×4のマス目を持つ盤に置かれた15個の番号付きのコマを番号順に並べる ・1マスだけは空白で上下左右のコマをその場所に移動することが出来る 以下の関数を使って15パズルを作成せよ 関数 disp void disp(int b[NX][NY]); ・引数 盤面の配列 ・働き 盤面を表示する、数字の右端を揃える、空白は[]を出力 関数 move void move(int b[NX][NY], int *x, int *y, int d); ・引数 盤面の配列、空白のコマのx座標(変数のアドレス)、空白のコマのy座標(変数のアドレス)、移動方向(1 〜4) ・働き 移動方向に従い盤面の配列を変更(端で移動できるコマがない場合は変更せず)、新たな空白コマの座 標にx,yを更新 関数 shuffle void shuffle(int b[NX][NY], int *x, int *y); ・引数 盤面の配列、空白のコマのx座標(変数のアドレス)、空白のコマのy座標(変数のアドレス) ・働き 盤面をバラバラにし、空白のマスのx,yを更新して返す 関数 check int check(int b[NX][NY]); ・引数 盤面の配列 ・働き 完成しているかどうかのチェックを行い、完成していれば1、完成していなければ0を返す [3] 環境 Visual C++ [3.1] OS:Windows [3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ [3.3] 言語: C言語 [4] 期限: 2009年1月30日(金)まで [5] その他の制限: 関数内の処理の説明(コメントとしてプログラムに書いてもいい) もお願いします。 宜しくお願いします。
>>843 コンパイルもしてない自身の割には・・・
847 :
デフォルトの名無しさん :2009/01/28(水) 17:45:01
>>840 >>842 コンパイルできないのは関数プロトタイプがないから。
void swap(char *pa,char *pb);
をcharsort()の上に置くこと。
問題それ自体は上記の修正した上で、以下を最後に追加する。
int main(void)
{
char s[] = "任意の文字列、ただし多バイト文字や空白文字を使うな。";
printf("元の文字列:%s\n", s);
charsort(s, 0, sizeof (s) / sizeof (char) - 2);
printf("ソート後の文字列:%s\n", s);
return 0;
}
以下追記。
sizeof (s) / sizeof (char)はsizeof sでも可。
-2は配列の最後へのアクセスは長さから-1する必要がある上、
文字列は余分に'\0'がつくためさらに-1の必要がある。
>>840 int main()
{
char timpo[] = "information";
char manco[] = charsort( timpo, 0, strlen( timpo ) - 1 );
}
この charsort 関数を書いた人に言っておきたいことがある〜♪
ソート範囲は [ begin, end ) で受け取ったほうが何かと便利〜♪
>>847 swapの中身もcharsortの中身もグダグダだろ
なに? 今日はコンパイラも持ってないやつが書き込む日なの? じゃあ、明日来るわ。
いやいや。コンパイラは持ってるよ。 コンパイルエラーが出ても無視してるだけで。
852 :
デフォルトの名無しさん :2009/01/28(水) 17:57:56
>>846 お笑い×××××も阻止できない自身の割には・・・ w
853 :
840 :2009/01/28(水) 18:07:33
>>842 TXTにあるソースを利用(修正)してプログラムを作る
ということだと思います。
>>854 「informationが入った文字配列を下に示すクイックソートのプログラムによりソートせよ」
という問題文だから使わないわけにはいかないべ。
もちろん、他人のプログラムを勝手に修正しちゃらめぇ。
>>855 ぶっちゃけ、動かないものは「クイックソートのプログラム」じゃねーし
860 :
デフォルトの名無しさん :2009/01/28(水) 20:36:43
>>840 swap()は,
・プロトタイプか関数定義そのものをcharsort()の前におく。
・*pa = pb; を *pa = *pb; にする。
という修正が必要。
charsort()は、
・else if(nn - n0 == 1){ は else{ にする。
・while(i<j){ は while (1){ にする。
・else{ charsort(a,n0,j); charsort(a,i,nn); } は else break; にする。
という修正が必要。
問題文の提示がおかしい。ソートを修正してほしいならそう言うべき。
提示された問題文ではただの釣り扱いされるかも。
861 :
860 :2009/01/28(水) 20:40:50
>>848 >char manco[] = charsort( timpo, 0, strlen( timpo ) - 1 );
くだらない名前を使いたがるバカにふさわしい低レベルw
+ printf("%4.1f ", (double)sum[jun[i]]/nn); - printf("%4.1f ", (double)sum[i]/nn);
いやぁ、C言語は難しいなぁ。
>>677 ありりがとうございました。助かりました。
>>867 >>858 とかなり似た問題だなぁ。一応 ????? を埋める形式でやってみたよ。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
FILE *infp, *outfp;
int ch;
if (argc < 3) {
printf("There is no FILE NAME.\n");
exit(1);
}
if ((infp = fopen(argv[1], "r")) == NULL) {
printf("INPUT FILE OPEN error.\n");
} else {
if ((outfp = fopen(argv[2], "w")) == NULL) {
printf("OUTPUT FILE OPEN error.\n");
} else {
while ((ch = fgetc(infp)) != EOF) {
if ('a' <= ch && ch <= 'z') {
fputc(ch-('a'-'A'), outfp);
} else {
fputc(ch, outfp);
}
}
fclose(outfp);
}
fclose(infp);
}
return 0;
}
869 :
教えてください。 :2009/01/28(水) 22:18:41
問 題 あるクラスで英語のテストを実施しました。テスト結果を入力し、最高点と平均点を出力するプログラムを作成してください。 ・ 入 力 生徒1人の点数が1行に記載されています。 点数は100点満点です。-1で入力終わりとします。 ・ 出 力 最高点、平均点の順に画面の1行に出力します。 データの区切りは空白とします。 入力例 75 74 10 50 95 -1 出力例 95 60.8
>>869 >>1 の質問テンプレくらい読もうね。
#include <stdio.h>
int main(void)
{
int max = 0, sum = 0, count = 0, v;
while (scanf("%d", &v) == 1 && v != -1) {
sum += v;
count++;
if (v > max) {
max = v;
}
}
printf("%d %g\n", max, (double)sum/count);
return 0;
}
871 :
840 :2009/01/28(水) 22:23:41
873 :
860 :2009/01/28(水) 22:55:56
>>840 >>871 ごめん。間違えた。
charsort()の3つめのアドバイスは必要ない。
替わりに、
else if(i==j){charsort(a,n0,i-1);charsort(a,i+1,nn);}
else{charsort(a,n0,j);charsort(a,i,nn);}
のそれぞれの{}括弧の中の最後にbreak;を追加するのが正解だった。
>>861 >>853 の言ってることはデタラメで、きちんととしたソースを入手していないだけだと見える。
876 :
840 :2009/01/28(水) 23:18:08
877 :
デフォルトの名無しさん :2009/01/28(水) 23:27:20
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 10人の学生の視力を以下に示す。このデータを構造体に格納して、新規ファイルに構造体単位で書き込む。 また、このファイルからデータを構造体単位で読み込み各学生について右目と左目の視力の平均を出力する。 学生番号 1 2 3 4 5 6 7 8 9 10 右目視力 1.5 1.0 1.2 0.6 0.8 0.1 0.5 1.5 2.0 1.0 左目視力 1.2 1.0 1.0 0.4 1.0 0.3 1.5 2.0 2.0 0.7 [3] 環境 [3.1] OS: Windows Vista [3.2] コンパイラ名とバージョン:bcc [3.3] 言語: C++ [4] 期限:1月29日 [5] その他の制限: 特になし よろしくお願いします。
>>876 タイプミスがなければ今回の混乱は起こりえなかった。
>>880 タイプミスかどうかくらい、今からでもプリントを見れば確かめられるが、
けしてしない。
タイプミスとかありがちなオチですたかよwww
>>879 #include<stdio.h>
int main() {
int x, y, c;
for (y = 0; y < 16; y ++) {
for (x = 0; x < 6; x ++) {
c = 32 + x * 16 + y;
printf("%3d %c ", c, (char)c);
}
printf("\n");
}
return 0;
}
>>875 16! ≒2.1 x 10^13 = 21T
最短経路以前に、それだけのデータをどうやって持たせるつもりなんだ?
Gでは 多いことに変わりないけど。重みも持たさないとだろうしね
ごめんTだ>< 161のミスってことはないだろうか
887 :
588 :2009/01/29(木) 02:34:52
>>754 残念だけどその方法しか思いつかんかった(´・ω・)
とりあえず VC++2008 Express Edition だったら正常にコンパイルできるよ。
役に立てなくてスマソ
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): コマンドライン引数として入力したひとつの任意長文字列を文字型のポインタstrに格納する。 この結果、格納された文字列をそのまま出力する。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン: bcc [3.3] 言語:C [4] 期限:2009年1月29日正午 [5] その他の制限:なし
>>888 >文字列を文字型のポインタstrに格納する
とか、どう見ても課題の原文じゃないだろ・・・
int main(int argc,char**args)
>>889 途中で送っちゃった
int main(int argc,char**args){
char*str=args[1];
printf("%s\n",str);
return 0;
}
とか?
1] 授業単元:C言語 [2] 問題文(含コード&リンク): 「○○の××は△△」の形式の知識を、キーボードからの入力により、収集する。 収集した知識を標準出力に印字する。収集した知識をファイルに保存する。 保存形式は以下の通り: 隣,芝生,青い 日本,首都,東京です・・・ 「○○の××は△△」の形式の知識を、キーボードから入力すると、 すでに格納されている知識と一致したら、「yes」と答える。 一致しなかったら「no」と答え格納するかどうか尋ねる。 「リンゴ, 色, ?」のように尋ねると、「赤い」と答える。 「?」はどの位置でも使える。複数の「?」を使うこともできる。 ファイルから知識を読み込んで、すでに持っている知識と統合できるようにしよう。(同じ知識を二重登録しないようにしたい。) 「Mt. Fuji のheight は?」と尋ねられたら「知りません。でも、Mt. Everest のheight なら知っています。」のように答えられるようにしよう。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン:Eclipse [3.3] 言語: C [4] 期限:1月30日 [5] その他の制限: 特になし よろしくお願いします。
893 :
デフォルトの名無しさん :2009/01/29(木) 11:03:17
>>892 #include <stdlib.h>
#include <stdio.h>
int main(void) {
char buf[32], *endptr;
long n;
while(1) {
printf("2進数を入力: ");
fgets(buf, 32, stdin);
buf[8] = '\0';
if (buf[0] == '\n') {
printf("エラー: 2進数を入力してください。\n");
continue;
}
break;
}
n = strtol(buf, &endptr, 2);
if (*endptr != '\0' && *endptr != '\n')
{
printf("エラー: 0でも1でもない文字が入力されました。\n");
return 1;
}
printf("入力された数値は10進数で%ldです。\n", n);
return 0;
}
894 :
デフォルトの名無しさん :2009/01/29(木) 11:34:55
[1] 授業単元:C言語 [2] 問題文 乱数を発生させてビンゴゲームを作る。 3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン: DEV-c++ [3.3] 言語:C [4] 期限:2009年1月29日正午 [5] その他の制限:なし 誰か助けてください・・・
>>894 ゲームの仕様がわからん
カードを乱数で作るのか
>>894 1-75をダブらないように出力するだけか
それなら75個の配列に1-75を順番に入れてシャッフルすればいい
カードも作って穴開けて、、、設問がシンプルすぎる
>>889 本当に原文まる写しなんです
すみません、ありがとうございました。
>>899 「課題 A の操作」はシフト演算なのか・・・?
>>899 課題 C:xを2ビット左にシフトした値にxを加算し、更に1ビット左にシフトする。
xの4倍にxを足して、xの5倍になる。
更にそれを2倍すると、xの10倍になる。
>>891 君のその授業単元は何?
どう見てもプログラム内で品詞を定義してあげなくてはできない
例からみるとマルコフ連鎖かベイズアプローチも必須のようだし昔の人工知能の基盤に思えるのだが
>>899 FILE*の引数の名前がfilenameって・・・
>>754 getchをgetcharに書き換えればいいんじゃね?
#include <conio.h>を消して。
>>902 というほど深く考えなくてもいいんでないの?
それぞれで区切られた各要素には「の」「は」を含むことはできないという仕様制限で、
「の」「は」で淡々と切ればいい。
>>906 >一致しなかったら「no」と答え格納するかどうか尋ねる。
尋ねるだけで格納するかどうか書かれていないとか、どう考えても素人の考えた文言
> [3.2] コンパイラ名とバージョン:Eclipse
死ねば良いのにと思う知識レベル
[1] 授業単元:C言語 [2] 問題文、以下の式の値を求めなさい ack(x,y)= if x=0 then ack(x,y)=y+1 if y=0 then ack(x,y)=ack((x-1),1) else ack(x,y)=ack((x-1),ack(x,(y-1))) ではack(3,1)=? 尚、計算したくなければC言語で代替してもよい 3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン: visualc++2005 [3.3] 言語:C [4] 期限:2009年1月29日午後10時 [5] その他の制限:なし 急ですみません。値だけでも構いません。
>>909 格納しますか?(y/n):y
これで格納されなかったら噴飯ものだろ
コンパイラEclipseはどうしようもない
が、コンパイラに依存するようなコードを含まざるを得ないレベルを要求された課題でもないと思う
質問者を擁護しても何の得にもならんのだけどね。
>>912 > これで格納されなかったら噴飯ものだろ
ズブの素人の発想
> コンパイラEclipseはどうしようもない
本人乙
Eclipseはコンパイラじゃないだろ…常識的に考えて…
>>913 >> これで格納されなかったら噴飯ものだろ
>ズブの素人の発想
どゆこと?教えてください玄人さん。
[1] 授業単元:C言語 [2] 問題文: 次の非線形方程式をニュートン法を使って解くプログラムを作成せよ。 1. x+cos(x) = 0 2. x^3-x^2-x+1 = 0 なお、解を求めるだけでなく、以下の要素を含めること。 ・解の収束の過程がわかるように途中経過を出力する。 ・その結果を元に、収束する様子をグラフで示す。 [3] 環境 [3.1] OS:WindowsVista [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5 [3.3] 言語:C言語 [4] 期限:2009年1月30日20:00まで [5] その他の制限:特になし よろしくお願いします。
>>875 本当に有り難う御座いました。
大変助かりました。
>>916 格納するかどうか聞いといてって言われただけなのに、勝手に格納するなよ
一致しなかったら一致しない旨「no」を出力した上で、
さらにそれを格納するか
>>912 のように尋ねて入力待ちじゃないのか?
勝手に格納するという言い分は訳が分からないし
格納すると指示をした上で格納されなかったら噴飯ものというのももっとも。
Eclipseは…
>>921 オマエは書かれていないことを覚えこんじゃうタイプの脳だよ
>>891 です
問題は出されたままを書いたのですが言葉足らずで申し訳ありませんでした
付け足させていただきます
>>一致しなかったら「no」と答え格納するかどうか尋ねる。
これについては
>>921 さんの仰るように一致しない場合はその旨を「no」で示した上、
その知識を格納するか質問し、
「yes」と答えた場合はその知識を格納するということです
コンパイラについては何分知識不足なもので非常に申し訳ありません
Visual C++ 2008ということでお願いします
>>891 知識がないのでそれがどういった意味か理解できないのですが
そこまで高等な事では無いように思います
顔真っ赤なのが一人いるな
>>923 たとえば、
(りんご、色、赤い)と
(りんご、色、青い)の両方があったらどうするのかとか
両方ある時点でおかしくね?
>>913 ,919,922のことか。
確かに真っ赤だなw
>>926 おかしいとしたら、そういう制約を作成しなくてはいけない。
何処にも書かれていないし、どうするのかも不明。
いや、普通に考えたら
片方がある時点でもう片方の文章を打ち込んだ時点で
「no」→「格納(update)するか(y/n)」で返答待ちだろうから、両方あるのは変だろ。
でないと?を使った質問に対して返答できなくなるから、
論理的に考えたら
>>925 のデータセットはイリーガル。
>>928 一致しなかったらnoと答え格納するかどうか尋ねるんだろ?
想像しても仕方ないんじゃね 結局、どう扱うかを問題で定義してもらわないと 完全新規、一部既存にかかわらず、noしか出力されないんだし
何だまだいたのか。
>>930 おまえらなんかごちゃ混ぜになってるぞ。
yes/noで答えるのは、「○○の××は△△」で聞かれるときだ。
(りんご、色、赤い)が有る時に、「りんごの色は赤い」が入力されたなら、一致するから、yes、
「りんごの色は青い」が入力されたら、一致しないから、noで格納するかどうか尋ねる。
それとも「○○の××」が一意キーだという説明でもあっただろうか?
格納されたら
(りんご、色、赤い)と
(りんご、色、青い)の両方が有る。
「リンゴ, 色, ?」と尋ねられたらどうするんだ?
>>929 イリーガルだと考えるかどうかさえ、説明されていないぞ。
赤いと青いです ぐらい出しとけばいいんでないの
>>933 一致するものをすべて列挙すればいい
面倒だから 「で」 でつなぐ
リンゴの色は赤い で 青い
どうでもいいけど、怒るでしかし を思い出した
?を複数使えることを考えると、マッチするやつ全部列挙するのがシンプルな気もするが
>>933 「○○の××」に△△を格納するって意味だと思ったんだが
追加するのか。格納としか書いてないから深読みしすぎたか
質問者がもっとスレにはりついて回答してくれると楽なんだけどな
>>938 書いた本人のツモリまでは分からないけど・・・
>>923 「Mt. Fuji のheight は?」と尋ねられたら「知りません。でも、Mt. Everest のheight なら知っています。」のように答えられるようにしよう。
これは高等な事ではないですか?
当たり前のように字句解析も行っているし立派なレコメンド機能じゃないの?
Mt. Fuji のheight は?と聞かれて
知りません。でもりんごは赤いのは知っています。
りんごの色は?
知りません。でもりんごは赤いのは知っています。
という返答がくるものでいいの?
heightにマッチする知識を列挙すればいいんだよね。
943 :
デフォルトの名無しさん :2009/01/29(木) 20:12:14
>>891 です
問題の意図は
>>933 の方のおっしゃる通りです
?についてですが、本来は人間の受け答えのように
例えば(りんご、色、赤い)と(りんご、色、青い)と言う知識が格納されている場合、「赤と青があります」のように
柔軟な対応が出来るのが望ましいと言われましたが
今回はどうしてもできない場合は自分で
「単語が重複するような紛らわしい知識の入力には対応できない」
等の制約を自由に設けても構わないと言われました
944 :
891 :2009/01/29(木) 20:21:16
>>941 山について聞かれたら山に関連した知識を返すといった物ではなく、
知らない知識を聞かれたら何でもイイので
知っている知識を形式的に返せばイイみたいです
人工無能っぽいものを作るわけだな
>>941 > 当たり前のように字句解析も行っているし立派なレコメンド機能じゃないの?
「わたしのはははははのかがみだ」
947 :
891 :2009/01/29(木) 20:34:52
何度も付け足してすいません あまりにもみんなの出来が悪いので、 ?を使うところまでで良くなりました。 Mt.Fuji〜以降は無視でお願いします
>>946 京都大学情報なんたらかんたらの論文にすもももももももものうちがあったな
Mecabだっけか?
出来が悪くてすまんこまんこ それで、?を使うところまでというのはどこまでのことですか?
他の生徒のソースが全部ひどかったから合格基準を下げたってこと?? ずいぶんひどいな。みんな単位なしが普通じゃね?
951 :
891 :2009/01/29(木) 20:52:55
>>949 「りんご、色、?」と聞かれたら「赤い」と答え、
?はどの部分にも使え、複数の使用も可能と言うところまでです
>>950 そぅです
普通ならそぅいうものだと思いますが…
取り敢えず今回はそぅみたいです
PC「詳しい 仕様 は知りません。でも、おまえ の 知識 は ヘボい」 ・3・;
>>919 2の奴解二つあるけど,両方求めなくて良いなら.
#include<stdio.h>
#include<math.h>
double func(double x){
return cos(x)+x;
}
double dx(double x){
return -func(x)/(-sin(x)+1.0);
}
/* 2:
double func(double x){
return pow(x,3.0)-pow(x,2.0)-pow(x,1.0)+1.0;
}
double dx(double x){
return -func(x)/(3.0*pow(x,2.0)-2.0*x-1.0);
}
*/
int main(void){
double x=0.0;
while(1){
printf("%lf\t%E\n",x,func(x));
if(fabs(func(x))<1.0e-15)break;
x+=dx(x);
}
return 0;
}
955 :
954 :2009/01/29(木) 21:32:55
12,13c12,13 < int kokug,suug,eig,goukei,kyoukag,n; < float kyoukagh,heikin,kyoukah,kyoukahg; --- > int kokug,suug,eig,kyoukag,n; > float kyoukagh,kyoukah,kyoukahg; 17a18,19 > int goukei[5]; > float heikin[5];
kyoukahg=kyoukag/5.0;/*教科平均の合計*/ この左辺がkyoukaghなのかなあとも思う。
966 :
439 :2009/01/30(金) 01:16:34
>>439 で書きこんだ者です
>>481 で回答をいただいたんですけど、途中までしか動作しません
(ビルドは問題なくできます)
ファイル読み込みから読み込んだ文字を表示、までは動くのですが、
その後のデータ格納がうまくいかないみたいです・・・
どなたか回答いただけると助かります
>>966 どううまくいかないの?
ファイル内の文字は出力されて、その後の出力がないという事?
だとしたら無限ループに入ってるか、一般保護違反のどっちかじゃない?
cをint型にしたらどうかな。
>>966 sscanf(str, "%7s%10s%2d%2d", data[i].number, data[i].str, &data[i].score[0], &data[i].score[1]);
を修正する?
>>967 おぉ! この通りです。
ありがとうございます。
自分のソースと見比べて何がダメだったのか勉強してみます
971 :
439 :2009/01/30(金) 02:07:01
>>968 そのとおりです。ファイル内の文字の出力を終えたところで強制終了します。
正確には99行目まで読み込んで停止します。
struct data data[100]をdata[101]にしてみたら100行目まで読み込んだけどやっぱりそこで停止。
cをint型に…やってみたんですが結果は変化なしでした
>>969 多分そこで引っかかってるんだと思うんですけど…
式はあってると思うんで自分ではもう何がなんだかさっぱりですorz
>>971 sscanf(str, "%7s,%10s,%2d,%2d", data[i].number, data[i].str, &data[i].score[0], &data[i].score[1]);
じゃ、ダメかね?
内容: [1] 授業単元:C言語 [2] 問題文(含コード&リンク) 課題:次のプログラムを作成し,2つのファイルを提出せよ. 1 0〜99 の100 個の数字から異なる30 個を選び,配列COM[30] に 格納せよ.(乱数使用:学籍番号で初期化) 2 次に異なる6 個の数字を入力し,順番に配列MAN[6] に格納せよ. 3 ソート方法A を用いて配列COM,MAN の要素をそれぞれ小さい 順に並べよ. 4 配列COM に含まれる配列MAN の数字の個数count を求めよ. 5 最後に,配列COM,MAN の全要素,変数count を result-1g06a9999.txt に書き込め. 6 出力形式は自由とするが,main 関数内は10 行以内にすること. 【ソート方法A】 1 作業用の配列として、要素が100 個のint 型の配列Work を用意 する. 2 配列Work の各要素は、0 に初期化する. 3 ソートしたい配列x の要素を順番に読んで、Work[ その値] を+1 する. 4 作業3を全てのx の要素について行った後、Work の要素を小さい ほうから順番に読んで、Work の値が0 でなければ、x に書き戻し ます。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2009年1月31日 [5] その他の制限:特に無し よろしくお願いします。
>>973 > (乱数使用:学籍番号で初期化)
の意味が分からん。srand()に渡す種?
10行わろたw
>>973 > 1 0〜99 の100 個の数字
> 【ソート方法A】
> 2 配列Work の各要素は、0 に初期化する.
> 4 作業3を(中略)Work の値が0 でなければ
30個のCOMには0が入る可能性もあるわけでしょ?
その0は無視しちゃうわけ?
>>977 COMが0ならWork[0]が1になるだけ
>>978 なるほど。けど、面倒なソートしとるなぁ・・・
メモリなどの条件さえ許せばかなり速いソートだよ。 アルゴリズム的にも他のソートよりもかなり単純だし。
いや、+1にしたらまた-1にしなきゃならなくね?
>>982 クリアはするけど、-1とかじゃないんじゃね?
って、自分が勘違いしてた、すまそw
MANに入れた値が99より大きかった場合、Work[100]じゃ無理ぽ?
986 :
デフォルトの名無しさん :2009/01/30(金) 04:26:09
なめんな
ずいぶん期間が短い。おやすみなさい。
993 :
デフォルトの名無しさん :2009/01/30(金) 14:02:06
埋め
994 :
デフォルトの名無しさん :2009/01/30(金) 14:02:34
生め
生き埋め
996 :
デフォルトの名無しさん :2009/01/30(金) 14:10:02
干し梅
997 :
デフォルトの名無しさん :2009/01/30(金) 14:13:35
梅吉
998 :
デフォルトの名無しさん :2009/01/30(金) 14:18:03
あ
999 :
デフォルトの名無しさん :2009/01/30(金) 14:20:36
な
1000 :
デフォルトの名無しさん :2009/01/30(金) 14:21:42
る
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。