拙者はC/C++侍。
わからない問題は次々と切捨御免。
【注意点】 -------------------------------------------------
・問題はしっかりと解いてもらう方にわかりやすいように
問題文などの省きはやめ、全文を書きましょう。
・使用する言語(C/C++)や環境(CUI/ANSIとか
GUI/Windows32bitAPI など)は必ず書きましょう。
・計算問題は必ず数式自体をあげ、どのような計算をするのか
くわしく説明してください。
・エラーは、その行とエラーの詳細を書きましょう。
エラーメッセージが出た場合はそのままコピーしてください。
・後になって問題につけたしをするのはやめましょう。
解いてもらっている方に失礼になってしまいます。
------------------------------------------------------------
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html 【歴代スレは
>>2-10】
「C/C++の宿題は拙者が断る! 」に読めたOTLorz
>>1 乙
AA 無しか。もしかしてテンプレ増加により「改行が多すぎ」?
前スレ951
1様乙です。
テンプレの評判をみてからたてようかと思ってたんですが、
いつの間にか前スレが970までのびてて
拙者まにあわず…
それではごめんなすって…
32行までだな。
変にAAあるとアレなのでなくしますた。
えー
拙者C言語侍がC/C++の宿題を斬って斬って斬りまくります!
\∧_ヘ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
/ \〇ノゝ∩ / C/C++道
/三√ ゚Д゚) / <
/三/| ゚C゚|\ | 壱 宿題を斬って斬って斬りまくれ!
U (::::::::::) | 弐〜拾 歴代スレである!
//三/|三|\ \ 参 誰もが侍になれるぞ!
∪ ∪ \________________
「円周率(π)を求める公式の和としてライプニッツの公式より精度のよい公式を見つけ出し、
そのC++のぷろぐらむを作成せよ。また、ライプニッツの公式との比較も行え。」
という宿題が出ました。どなたかこの問題が解け、プログラムを作れる、C++に
詳しい方教えてください。お願いします。
>>11 本当ですか!?この問題の答えありますか?
return "およそ3";
公式の和?
>>15 どこらへんにありますか?わざわざ探してくれてありがとうございます。
>>16 和の公式でしたw
書き忘れ
20は>>11の問題に関連する物です。
,,ゞト、ノノィ,、
/ `ゝ
/ ノノ'`'`'`'`ヽミ
.| Y \ / }i
| / / ヽ ミ
.!(6リ (__) ノ
リノト、 '/エェェェヺ
り| ヽ lーrー、/ 夏なんで宿題出ませんから!! 残念!!
ノノ ヽニニソ Θ / \
,...-'"::::|:| /'::::::::::::::ヽ、 Θ//\//Θ
,...-'":::::::::::::::|.| v /':::::::::::::::::::::::::::_____//\//Θ
. /::::::::::::::::::::::::::|.! /'::::::::::::::::::::::::::::::",.-、, \ //Θ
/:::::;┐::::::::::::::::::|,レ':::::::::::::::::::::::::::::: :(_.人 ヽ._ ヽ
. /:::::::∪::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ハゝ. \ /
,( \ ノハ
>>前スレ998
Mをメルセンヌ素数(2^n -1 の形の素数 3 7 31など)とするとき、
偶数の完全数は {M(M+1)}/2 で表されるという定理があるんだよ。
また、現在のところ奇数の完全数は見つかっていない。
これらの事実を使ってるから、1000 以下の完全数を求めるのに
主ループを 3,7,15,…,511 の 8 回しか回さずに済むので速い。
# 素数判定部はむしろ一般的に言えば遅いのを使ってる
>Mをメルセンヌ素数(2^n -1 の形の素数 3 7 31など)とするとき、
>偶数の完全数は {M(M+1)}/2 で表されるという定理があるんだよ。
これって小さいのから順にもれなく出てくるんですか?
27 :
デフォルトの名無しさん:04/07/26 11:11
char *c[] = {"Monday" , "Tuesday"};
char **p = c;
とする時、'e'にたどりつくポインタpを用いた表記を
考えられるだけ、列挙せよ。
例)
*(*(p+1)+2))
*(*(p+2-1)+2))
*(*(p+10/10)+2))
*(*(p+1)+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+1-1+2))
こんなの?
>>27 *(*(p+1)+2)
*(p+1))[2]
2[*(p+1)]
*(p[1]+2)
*(1[p]+2)
p[1][2]
1[p][2]
2[p[1]]
2[1[p]]
*(*(p+1)+2)
(*(p+1))[2]
2[*(p+1)]
*(p[1]+2)
*(1[p]+2)
p[1][2]
1[p][2]
2[p[1]]
2[1[p]]
*((*(p++)++)++)
*(++(++(*(++p))))
*(*(p+=1)+=2)
おはようござます。
あるクラスに在籍している5人の出席番号と電話番号をポインタ配列を用いて画面に表示
するプログラムを作成せよ。
数値等は自由。
と言う問題が出たんですがちょっと分らないので模範解答を教えて下さい。
よろしくお願いします。
pの値や*pの値が変化してもいいのかな
37 :
デフォルトの名無しさん:04/07/26 11:45
「与えられた数の階乗を計算するプログラムを静的変数を用いて作成せよ。」
と言う問題が出ました。
全く分らないので教えて下さいm( )m
>>35 出席番号と電話番号はファイルから読み込むの?
それともキー入力?
それともソース埋め込み?
みなさん、ありがとうございます m( )m
多ければ多いほど、良いんで(点数的に)。
2,3個かと思ってたんですが、結構ありますね・・
助かりました!
>>37 こんなんでいいのか?
#include <stdio.h>
static int f = 1;
int main(int)
{
int n=5; // ここにNを与える
int i;
for(i=1; i<=n; i++){
f *= i;
}
printf("%d\n", f);
return 0;
}
便乗質問ですが、100!ってどうやって求めるんですか?
数がでかすぎて、格納できる型が無いんですが・・・
フリーの多倍長整数ライブラリがある
なるほど。一工夫が要る訳ですね。
調べてみます。
使用言語はCです。
かなりの初心者なので複雑なことは出来ません。
配列がかろうじて出来る程度です。その程度の技術でお答えくださればコレ幸いです。
オネガイします。
1、キーボードから入力した10個の実数データを配列xに格納し、その中の最大値と最小値を求め出力するプログラム
2、キーボードから入力した10個の実数データを配列xに格納し、そのデータを小さい順に出力するプログラム
3、文字型配列を、”OKINAWA”と初期値として宣言し、文字列を反転させて”AWANIKO”と表示するプログラム
4、要素の数が40の文字列配列str1、str2、str3を、初期値なしで宣言する。その後、str1に”Let's”を、str2に”Study”を、str3に”programming”を代入し、これらの文字をつなげて出力するプログラムをstrcat関数を使わない場合と使った場合の2種類のプログラム
いきなり大量の問題ですが(-m-)おねがいします
"OKINAWA"大人気だな、前スレに何度か出てる、まだdat落ちしてない。
1.
#include <stdio.h>
int main()
{
int i, nNum, nMin, nMax;
for(i = 1; i <= 10; i++){
for(;;){
printf("[%02d] ", i);
if(scanf("%d", &nNum)) break;
scanf("%*s");
}
if(i == 0 || nNum < nMin) nMin = nNum;
if(i == 0 || nNum > nMax) nMax = nNum;
}
printf("Max: %d\n", nMax);
printf("Min: %d\n", nMin);
return 0;
}
あ。いっけね、見間違えた。
1(改).
#include <stdio.h>
int main()
{
int i, x[10], nMin, nMax;
for(i = 0; i < 10; i++){
for(;;){
printf("[%02d] ", i+1);
if(scanf("%d", x+i)) break;
scanf("%*s");
}
}
for(i = 0; i < 10; i++){
if(i == 0 || x[i] < nMin) nMin = x[i];
if(i == 0 || x[i] > nMax) nMax = x[i];
}
printf("Max: %d\n", nMax);
printf("Min: %d\n", nMin);
return 0;
}
とりあえず、入力と最大・最小の判定は別口でやっておいた。
#include <stdio.h>
#include <stdlib.h>
int compare(const int *pSrc1, const int *pSrc2){
return *pSrc1 == *pSrc2 ? 0 : (*pSrc1 < *pSrc2 ? -1 : 1);
}
int main()
{
int i, x[10], nMin, nMax;
for(i = 0; i < 10; i++){
for(;;){
printf("[%02d] ", i+1);
if(scanf("%d", x+i)) break;
scanf("%*s");
}
}
qsort(x, 10, sizeof(int), compare);
printf("\n[Sorted]\n");
for(i = 0; i < 10; i++)
printf("%d\n", x[i]);
return 0;
}
どこのバカ学校の生徒が聞きに来てるのか知りたいものだ
>>51 書き忘れ → 2.
3.
#include <stdio.h>
#include <string.h>
int main()
{
int i;
char *szSrc = "OKINAWA", szRes[8];
for(i = 0; i < 7; i++)
szRes[6-i] = szSrc[i];
szRes[7] = '\0';
printf("%s\n", szRes);
return 0;
}
あぁ・・・表示だけで良かったのか。
ミス多いな、俺。使うのやめたのに#include <string.h>残してるし。
char *szSrc = "OKINAWA", szRes[8];
:
printf("%s\n", szRes);
↓
char *szSrc = "OKINAWA";
for(i = strlen(szSrc)-1; i >= 0; i--)
putchar(szSrc[i]);
4.
#include <stdio.h>
#include <string.h>
int main()
{
char str1[40], str2[40], str3[40], str4[120];
strcpy(str1, "Let's");
strcpy(str2, "Study");
strcpy(str3, "programming");
// 使った場合
*str4 = '\0';
strcat(str4, str1);
strcat(str4, str2);
strcat(str4, str3);
printf("%s\n", str4);
//使わない場合
printf("%s%s%s\n", str1, str2, str3);
return 0;
}
宿題まだー?ちんちん
ω
>>48 「 printf("[%02d] ", i);
if(scanf("%d", &nNum)) break;
scanf("%*s"); 」
のあたりがどうしてもわかりません・・。
#include <stdio.h>
int main(void)
{
double x[10], max,min;
int i,j;
for (i=0;i<10;i++){
scanf("%lf", &x[i]);
}
/*最大値*/
max = x[0];
for(i=1;i<=10;i++)
if (x[i] > max)
max = x[i];
/*最小値*/
min = x[0];
for(j=1;j<=10;j++)
if (x[j] <= min)
min = x[j];
printf("最大値は%.0lf\n", max);
printf("最小値は%.0lf\n", min);
return 0;
↑↑↑↑↑↑
のような感じで自力でやってみました。
どうしても最小値が「0」になってしまいます。
どうしてでしょうか?
オネガイします。
>>35 #include <stdio.h>
int main()
{
struct{
unsigned int num;
char tel[16];
}man[5]={
{5,"012-345-6789"},
{8,"012-345-9876"},
{17,"012-347-1142"},
{23,"012-315-2000"},
{36,"012-345-5688"},
},*p;
int i;
p=man;
for(i=0;i<5;i++){
printf("%d : 出席番号%d TEL:%s\n",i,p->num,p->tel);
p++;
}
return 0;
}
正常に入力されるまでループ回してます。
scanfに%dを指定したときに、数値以外が入力されると、
取得されない上にバッファ上に残って取り出されない。
そして、scanfの返り値として取得された数が返ってくる。
だから、0以外の場合は正常に入力されたということでループを抜ける。
0のときは、% *(代入しないことを示す) s(文字列として扱う)で、バッファをクリアしてるわけ。
fgetsとatoi使った方が良いと思うけど、「使ったことのある関数がいい」って言われないように、
scanfを使ってみた。
用語に自信が無いなぁ・・・。
>>61 日記は他所で。
宿題なら
> ・問題はしっかりと解いてもらう方にわかりやすいように
> 問題文などの省きはやめ、全文を書きましょう。
64 :
デフォルトの名無しさん:04/07/26 15:09
C++で、ある構造体に別の構造体を配列として動的に確保したいと思っています。
typedef struct tagSENDDESCRIPTOR{
UINTnRetry;
LPVOIDpPacket;
SOCKADDR_INaddrRemote;
}SENDDESCRIPTOR, *LPSENDDESCRIPTOR;
typedef struct tagSENDDATA{
DWORDdwSeq;
UINTnRetry;
DWORDdwTick;
LPSENDDESCRIPTOR pData;
}SENDDATA, *LPSENDDATA;
と言う構造体があり、メンバ変数に
SENDDATA m_SendData;
m_SendData.pData = (LPSENDDESCRIPTOR)malloc(sizeof(SENDDESCRIPTOR)*50);
ZeroMemory(&m_pSendData.pData[1], sizeof(SENDDESCRIPTOR));
ZeroMemory(&m_pSendData.pData[2], sizeof(SENDDESCRIPTOR));
ZeroMemory(&m_pSendData.pData[3], sizeof(SENDDESCRIPTOR));
ZeroMemory(&m_pSendData.pData[4], sizeof(SENDDESCRIPTOR));
・
・
・
というように利用してもいいのでしょうか?
ここまで動かしてみましたが、エラーは出ませんでした。
ZeroMemory(&m_pSendData.pData[1], sizeof(SENDDESCRIPTOR));
:
ZeroMemory(m_pSendData.pData, sizeof(SENDDESCRIPTOR)*50);
じゃ不満なの?
C++で、ある構造体に別の構造体を配列として動的に確保したいと思っています。
typedef struct tagSENDDES−−−−−−−−−− ここまで読んだ −−−−−−−−−−−
あ、そこのところはそれでいいのですが、
これを通信用に利用していますので、
配列として利用できれば便利だなと思ったわけです。
バカ過ぎ
できますよ
71 :
デフォルトの名無しさん:04/07/26 15:24
もしかして、こういう風に使いたいの?
typedef struct tagSENDDESCRIPTOR{
UINT nRetry;
LPVOID pPacket;
SOCKADDR_IN addrRemote;
}SENDDESCRIPTOR, *LPSENDDESCRIPTOR;
typedef struct tagSENDDATA{
DWORD dwSeq;
UINT nRetry;
DWORD dwTick;
SENDDESCRIPTOR Data[0];
}SENDDATA, *LPSENDDATA;
LPSENDDATA pm_SendData;
pm_SendData = (LPSENDDESCRIPTOR)malloc(sizeof(SENDDATA) + sizeof(SENDDESCRIPTOR)*50);
>>69 ありがと〜。
なんか書き込んだらスペースがなくなってしまって
醜くてごめんね。
74 :
デフォルトの名無しさん:04/07/26 15:29
>>72 なんで九九なのに5なのかは分からんが、
int arry[5][5];
↓
static int arry[5][5];
ってことを言いたいんじゃないのか?
>>71 えっとちょっとちがって
SENDDATA の構造体で SENDDESCRIPTORを50個(ここは実行時に決めます。)
管理したいのです。
なので
SENDDATA ないのSENDDESCRIPTORポインタに
mallocで50個分とか割り当ててあ、
配列として利用できれば名と思っています。
それで、こういう書き方が正当なのかどうかお伺いした
かった訳であります。
>>72 #include<stdio.h>
int *func()
{
static int arry[5*5];
int i,j;
for(i = 0;i < 5;i++){
for(j = 0;j < 5;j++){
arry[i*5+j]= (i+1)*(j+1);
}
}
return arry;
}
int main(void)
{
int *pt;
int i;
pt = func();
for( i = 0;i < 25;i++){
if(i % 5 == 0)puts("");
printf("%3d",*(pt+i));
}
puts("");
return 0;
}
77 :
デフォルトの名無しさん:04/07/26 15:33
>>77 ありがとうございました。
こういう場合なんか宣言時に配列であるみたいな宣言がいるのかなと
気にしていました。
すっきりしました。ありがとです〜。
>>67 配列は要素が隙間なく並んでるだけだから、
まとめてZeroMemoryしようと、要素ごとにZeroMemoryしようと変わらない。
関数呼び出しのコストがかかるというデメリットはあってもメリットはない。
>46,47
ありがとうございます!
>>78 ほんとに配列として扱いたいなら71の方がいいな
>>81 ・・・・・・
SENDDESCRIPTOR Data[0];
}SENDDATA, *LPSENDDATA;
SENDDESCRIPTOR Data[0];
ここのところで、
非標準の拡張機能が使用されています : 構造体または共用体中にサイズが 0 の配列があります。
って Warningがでます〜。
管理用の構造体は別段ポインタでなく
メンバ変数に固定的にもっててもOKで、なかの配列のみを
起動毎に変更したいのでポインタにしてメモリ確保後
配列として使いたかったわけです。
83 :
デフォルトの名無しさん:04/07/26 16:10
物理の点数データが入った一次元配列のアドレスと人数を受け取り、それらの最大点 最小点 平均点を求めて返す関数を作成せよ。
(点数データは初期値代入し関数呼び出した後は最大点 最小点 平均点の順に出すこと)という問題で以下のプログラムを実行し提出をしたら「今のプログラムでは、関数内で合計しか求めていない。関数内で、最大点、最小点、平均点を求め、これら3つの値を返す
(引数を用いて)関数にすること」というのが返ってきて再提出となり困ってます。できればこのプログラムを少し変えていただけるようなプログラムでしたら非常に助かります お願いします。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/index.html の270に書き込みさせていただきました(長かったために・・・)
前スレで出てたネタが再提出になったのね
URL間違えてないか
85 :
デフォルトの名無しさん:04/07/26 16:14
>>85 #include <stdio.h>
void cal(int *x, int n, int *max, int *min, double *ave){
int i, goukei = 0;
*max = *x; *min = *x; *ave = 0;
for(i = 0; i < n; i++){
goukei += *x;
if(*max < *x) *max = *x;
if(*min > *x) *min = *x;
x++;
}
if(n) *ave = (double)goukei / n;
}
int main(void){
int a[10]={0,10,20,30,40,50,60,70,80,90};
int max, min;
double ave;
cal(a, 10, &max, &min, &ave);
printf("最大点=%d 最小点=%d 平均=%f \n",max,min,ave);
return 0;
}
ありがとうございます さっそく作成していただいたプログラムを
提出させていただきます。ホント助かったです
出題者がここで回答者をやってて
動かぬ証拠を日夜作り出してたりして(ボソ
ネタバレ
91 :
デフォルトの名無しさん:04/07/26 17:02
#include <stdio.h>
int func(int);
int main(void){
printf("%d\n",func(4));
return 0;
}
int func(int n){
if(n == 1) return 1;
else return func(n-1)+n;
}
上記のプログラムを実行すると画面にどのように表示されるかを書け。
また、関数funcは何を計算する関数かを述べよ。
という問題が出ました。実際書いて実行したところ結果は10でしたが
なぜ、10になるのか。funcは何を計算する関数なのかがさっぱり
わかりません。わかる方ご解答お願いします。
>>91 func(4)
func(3)+4
(func(2)+3)+4
((func(1)+2)+3)+4
1+2+3+4 = 10
なんか偽者>73>75>78>82がいるようで、
騙りはやめてほしかった
>>93 トリップ使うと良いらしい
66#password
みたいな
>>92 とても素早い解答ありがとうございます。理解できました
#include<stdio.h>
void main(){
int a,b,*p;
a=10;
b=10;
p=&b;
a=20;
*p=30;
printf("%d\n",a);
printf("%d\n",b);
}
の結果が
20
30
になるわけを教えて下さい・・。
あ、わかりました。すみません・・。
*pの値とbの値は同じってことですね。
最初の
a=10;
b=10;
の意味は良く分かりませんが・・。
>>101 a=10 b=10
が
a=20 b=30
にちゃんと変わっただろ?という事が言いたいんじゃないかな
少なくとも a=10 の意味は全然わかんないけどな。
気の利いた問題作ろうとして失敗したって感じ。
a=20と同じように*pにも代入できるよ、
って所じゃない?
ネタだっつーの
65が66って間違えて名前かいてたんだYO!
しまった64だったorz
もうだれがだれやら
フィボナッチ数Fnを求める非再帰的なプログラムを作成してくれませんか?
問題の制限では繰り返し文を用いることだそうです
109 :
デフォルトの名無しさん:04/07/26 20:56
110 :
デフォルトの名無しさん:04/07/26 20:57
これ再帰じゃん
>>108 #include <stdio.h>
void main(){
int n=10,j=2,a,b,c;
a=b=c=1;
for(;j<n;j++){
a=b+c;
c=b;
b=a;
}
printf("%d",a);
}
最大15、偶数を入力し魔方陣を出力するプログラム
/* 魔方陣 */
#include<stdio.h>
int main(void)
{
int mg[16][16], i, j, k, n;
printf("15以下の奇数を入力してください!\n");
scanf("%d", &n);
j = (n + 1) / 2;
i = 1;
mg[i][j] = 1;
for (k = 2; k <= n * n; k++){
if (k % n == 1){
i++;
}else if (i == 1){
i = n;
j++;
}else if (j == n){
i--;
j = 1;
}else{
i--;
j++;
}
mg[i][j] =k;
}
>108
#include<cmath>
#include<iostream>
using namespace std;
namespace{
const double SQRT5 = 2.23606797749979;
const double RSQRT5 = 1/SQRT5;
const double C1 = ( 1+SQRT5 )/2;
const double C2 = ( 1-SQRT5 )/2;
}
int fib( int n ) {
do {
return 1.0/SQRT5 * ( pow(C1,n) - pow( C2, n));
}
while( false );
}
int main(){
int i;
for( i = 1; i < 10; ++i ) cout << fib( i ) << endl;
}
for (i = 1; i <= n; i++){
for (j = 1; j <= n; j++){
printf("%5d", mg[i][j]);
}
printf("\n");
}
return 0;
}
で、
△▽問題▽△
@偶数を入力すると正しい結果が得られません。偶数を入力された場合でも正確な結果が出るように変更してください。
A前門に追加して15を超える数、または1未満の数が入力されたときも再入力させるようにプログラムを変更してください
B下図はn=3の魔方陣である。図のように、横の合計も出力するように前門のプログラムを変更してください。
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
15以下の奇数を入力してください!
3
8 1 6 | 15
3 5 7 | 15
4 9 2 | 15
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
長かったので分割しました。
おねがいします
ここまで既出が多いと、問題を出す講師のほうがこのスレを監視しているように思えてくるな。
大金先生とか、実際チクられたケースもあったし。
まぁ28*1000以上のやりとりがあるスレだからな。似たような宿題の繰り返しにもなろう。
122 :
デフォルトの名無しさん:04/07/26 23:29
画像にフィルタをかけるプログラムを作成せよ、との問題をどなたか解いていただけないでしょうか。
使用言語はC、環境ツールはVisual C++ Toolkit 2003です。
「フィルタは5つ作れ、でも一つ作れば数値を変えるだけだからすぐ作れるだろう」と先生から言われましたが、
全然うまくいかないので、ここに書かせていただきました。
フィルタの計算が出来ないの?
画像の読み込みが出来ないの?
元画像の形式は?
なにがうまくいかないの?
>>122 /* graphic には画像データへのポインタ、sizeにはサイズを渡す */
void filter(char *graphic,int size) {
while(size-- > 0 ) {
*graphic ^= 0xf0;
graphics++;
}
}
dw/dt=(2-a)w da/dt=(2w-4)a をルンゲ・クッタ法で解くプログラムを
作成してください。お願いします。
127 :
デフォルトの名無しさん:04/07/27 00:14
いやいや、実際に面白いもんですよ
学生には解けないだろうな〜ってレベルの問題をだすと、
ここのHPにいつも質問が来てますからね。
最近では簡単な問題でもここに質問して答えだけ得ているようですね。
ほんとにいつも自分でがんばって解く学生なんかは
自分のレベルがきちんと分かっていますね。
だから、学生のレベルでは負えない問題をわざと出すと
ここのところの考え方はこうこうこういう考えでいいんでしょうか?
とか
ここのところをこうこう考えたんですが○○の値がエラーになってしまって困っています。
と、きちんと自分のわからないところを説明できるようになってきています。
馬鹿学生は自分のレベルが分かってないわけですから、
いくら難しい問題を出しても平気で綺麗なプログラムを提出してきます。
私でも、ちょっと書けそうにないぞってなコードがあったので
検索してみたらここのHPを見つけたわけですね。
まあ、前期の単位を出す2週間前に馬鹿学生を呼び出して
いままでのレポートやり直しを命ずるつもりでいますから。
やはり課題を出す側としては完璧なものを求めているわけではありません。
そんなのは無理だということも分かっています。
学生が自分の頭でどう考えて、どう試行錯誤を繰り返すのか、
そこのところが一番大事です。
ここを見ていて思い当たる節のある学生は気をつけるように
学のない人間が学のある人間をよそおって書くと、上記のような不気味な文章になります。
>>127 このスレに出てくる質問の大半は中学〜高校レベルだと思うんだけど
ここのレスが綺麗なプログラムなんて思ってる辺りが粕取り講師の限界なのか。
まずはルンゲ・クッタ法のアルゴリズムをどうぞ
>私でも、ちょっと書けそうにないぞってなコードがあったので
ようはそこか(w
よくわかんないから侍の人よろしく
ものすごくレスが遅くなって申し訳ないです。
>>123 えーと、まず下のアドレスにある「入力画像の輝度値を2倍にして出力する」プログラムを試してみました。
ttp://www.edu.tuis.ac.jp/~susaki/image/c_process.html このプログラムの通り、画像の読み込みは実行時に行い、元画像の形式はraw、出力画像もrawです。
また、宿題も同じようにraw画像を実行時に読みこんで、raw画像を出力ということでした。
うまくいかないのはその後、このプログラムを応用してフィルタの計算をしようとしたのですが、下手にソースをいじるとエラー吐いてよくわからない状態に・・・(汗
なので、ぼかしの効果を出すソースプログラムを教えていただけるとうれしいです。
>>124 すみません。これだけだと実行しても何が何だか・・・(泣
最後に、
>>1に書いてあ注意書きに反してしまったみたいです。
すみませんでした。
>>136 非常に簡単な暈かし(というか平均化)の例。
画像読み込み();
for (unsigned y = 0; y < height; ++y) {
for (unsigned x = 0; x < width - 1; ++x) {
画素[x + y * width] = (画素[x + y * width] + 画素[x + 1 + y * width]) / 2;
}
}
画像書き出し();
へー.
何か面白い.
>>136 31行目〜35行目だけ直せばよい
1)輝度2倍(オリジナル)
if(idat * 2 > 255){
idat = 255;
}else{
idat = idat * 2;
}
2)2値化(閾値128)
if(idat & 0x0080){
idat = 255;
}else{
idat = 0;
}
3)輝度反転
idat = ~idat;
4)輝度1/2
idat >>= 1;
5)これら全部対象が1点のみであまり面白くないので、
エンボスやエッジとかもやってみよう。
ナンカスゲー
カスタムフィルタでいいじゃん
ヌルボ
宿題まだー?ちんちん
重複とかでるんだったら宿題の回答まとめサイトとかほしいね…
sakuraでは雑然としたメモ帳みたいでなんだかなぁ…
>>146 このスレで質問するようなのは、まとめてあっても見ないから同じ。
回答者は問題をとくのが楽しみだからな。
148 :
デフォルトの名無しさん:04/07/27 13:44
ちょいっと長いのですが、Cの宿題を助けていただけませんか?
身長のデータを一行一人分で入力するものとする。
ただし、入力するデータは最大でも100人分と分かっているものとする。
身長データとして負の値を入れた時点でデータ入力の終了と判断するものとする。
データ入力が終了した時点で何人分のデータであったかという人数情報と、平均身長、
ならびに全データの中で最大値と最小値を出力するプログラムを作ってもらえませんか?
なお、データの入力中ゼロを入力すればコレまでの入力データを
入力番号(通し番号)と共に表示し、入力番号を入れれば当該データを削除し
それ以降のデータを上に繰り上げて、再びデータ全体を出力するものとする。
入力番号として0を入れた場合は、データの削除は行われず、データの入力処理を継続するものとする。
なお、プログラムの作成に関してはmain関数以外の関数をひとつ定義して使うという条件があります
>>148 丸投げ氏ね。
金くれるんなら考えてもいい( ´ー`)y-~~
150 :
デフォルトの名無しさん:04/07/27 13:50
す、すみません
とりあえず平均と人数を求めるものは作ってみました。
ここから削除モードに移る機能を付けたいのですがどうすればよいでしょうか?
main()
{
int i;
float height[100],x;
i=height[0]=x=0;
while(x>=0){
scanf("%f",&x);
if(x!=0){
height[i+1]=height[i]+x;
i++;
} else {
i--;
}
}
height[i]=height[i]-x;
i--;
printf("平均身長は%f,\n",height[i]/i);
printf("入力した数は%d,\n",i);
}
>>147 あいや〜質問者のためではなく、
ここで勉強してる僕みたいな人のためですw
>>150 #include <stdio.h>
void hyouji(float height[]){
int i;
for(i = 0; i < 100; i++){
if(height[i] == 0) break;
printf("No.%d Height = %f\n", i+1, height[i]);
}
}
int main(void){
float x, sum = 0, height[100] = {0};
int i, n, index = 0;
while(index < 100){
scanf("%f", &x);
if(x > 0) height[index++] = x;
else if(x == 0){
while(1){
hyouji(height);
printf("delete : "); scanf("%d", &n);
if(n == 0) break;
if(n > index) {printf("no data\n") ;break;}
for(i = n - 1; i < 99; i++) height[i] = height[i+1];
height[99] = 0; index--;}
}
else break;
}
i = 0; while(height[i]){ sum += height[i++]; if(i >= 100) break;}
printf("平均身長は%f\n",sum / i); printf("入力した数は%d\n",i);
return 0;
}
>>152-153 ありがとうございます
とりあえずこれ提出するだけではあんまり意味がないんで、自分の力にもならないし
これを自分なりに手を加えてやってみたいと思います
Cは5月から学校で習い始めたばっかりでまだ
>>152-153のソースで分からないものも多いのですが(void)とか
できるだけがんばって見ます。 ありがとうございました
155 :
デフォルトの名無しさん:04/07/27 16:37
なげーし仕様違反だしw
なんつーかもう身長とか成績とか計算するライブラリつくった方が早いんじゃないか。
どこの大学もこんな問題ばっか出してるわけ?
だから、大半は高校の宿題だって。
>>157 中学校じゃないのか?
オレが工業高校生の頃はもっと難しかったような気がするんだが。
C言語の30%は最大、最小、平均値で出来ています。
残りの70%はやさしさです
162 :
デフォルトの名無しさん:04/07/27 18:18
2の10000乗を計算するエレガントなプログラムを作れという宿題が出ました。
言語はCでよろしくお願いします。m(_ _)m
main()
{
printf("%d", 2^10000);
}
>>162 int print_large_int(int*, int);
int print_large_int(int* plint, int count) {
/* plint先頭からcount個を配列として、その数を表示する */
return 0;
}
int main(void) {
int elegant[313];
elegant[0] = 0400;
print_large_int(elegant, 313);
}
- elegant[0] = 0400;
+ elegant[0] = 01000;
10000乗なら、こうだな
>>164 /* plint先頭からcount個を配列として、その数を表示する */
ここはどう書くんですか?
気合いで
168 :
デフォルトの名無しさん:04/07/27 22:52
先生方、お願いいたします。
問題1. 複素数の指数関数 ez は, テーラー展開を用いて次の式で求める.
ez = 1 + z + z^2/2! + z^3/3! + … + z^n/n! + …
上式を用いて e^z を計算するプログラムを作成せよ. 上の展開式で, 各項の分母は階乗であるから, 急速に増大する. よって各項は急速に小さくなる. したがって, 適当なところで計算を打ち切ってよい. まず, 最初の6〜7項を計算し, 計算精度が足りなければ項数を増やせ.
プログラムができたら, e^(x+0i)を計算し,実数のexp関数の答えと照らし合わせて検算せよ.
また, 実数のθに対して e^iθ = cosθ + i sinθ の関係があることを調べよ.
問題のヒント: exp^zの各項はzn/n!の形をしている. z^nは以前に作ったpow関数を使って計算できる. また, 分母のn!はプログラミング演習Iで作ったkaijo関数を使って計算できる. kaijoは戻り値がintなので, complex(kaijo(n),0)として, complex型に変換して使えばよい.
続く
続き
うそぴょーん
終わり
170 :
デフォルトの名無しさん:04/07/27 22:53
とりあえずこんなんつくったんですが、どうも違うみたいです。
#include "complex.cpp"
int main(void)
{
int a,i;
printf("底eのz乗を計算します\n");
printf("z >");
scanf("%f",&a);
complex c(1,0),z(a,0),sum(0,0);
sum=c+z;
for(i=2; i<10; i++){
complex b(kaijo(i),0);
sum=sum+pow(z,i)/b;
}
sum.print();
printf("\n");
getchar();
return 0;
}
付け加えおねがいします。
complex.cppって何よ
ええと、コンプレックスクラスをつくってあったり、オペレーターで四則演算が
複素数の計算をするようになってます。あと複素数のべき乗を返したり、階乗を返したり
します。すいません、説明がへたで・・・
いや、そうじゃなくて普通はcppをincludeしたりしない。
すいません 会社の研修の宿題なのですが
10101010 x 11001100 = 00100010
となるようなプログラムを記述せよ
* =の右側は演算結果である
演算は一行で記述するものとする
という問題があるのですがお願いします
課題名は ビット演算 です
おねがいします
まま、まじっすか!?でも教授にはこうやれと言われ申しました。
ちなみに中身はこんな感じです(一部)。
#include <math.h>
#include <stdio.h>
class complex{
private:
double real,imaginary;
public:
complex(void);
complex(const double r,const double i);
void print(void) const;
#if 0
void draw(CDC* pDC);
#endif
friend int kaijo(int x);
friend complex pow(complex x,double y);
friend double abs(complex x);
friend double arg(complex x);
friend complex polar(double a,double b);
friend complex sqrt(complex x);
friend complex operator +(const complex x,const complex y);
friend complex operator -(const complex x,const complex y);
friend complex operator *(const complex x,const complex y);
friend complex operator /(const complex x,const complex y);
};
どうでしょうか・・・?
>>175 /* ビット演算 */
#include <stdio.h>
int main(void)
{
puts("10101010 x 11001100 = 00100010");
return 0;
}
会社辞めろ。今ならまだ間に合う。
10101010 x 11001100 = 00100010
10101010 | 11001100 = 11101110 ×
10101010 & 11001100 = 10001000 ×
10101010 ^ 11001100 = 01100110 ×
・・・
10101010 & (~11001100) = 00100010 やね
ああ、xに一つの演算子を入れろっていうんじゃないのか。
#include < stdio.h >
void main(){
unsigned char hidari = 0xAA;
unsigned char migi = 0xCC;
printf("%d",hidari & (~migi));
}
あってるかな?
これじゃ10進数で表示しちまうか
どうしたらいいんだっけ?
>>182 逐一ビットが立ってるかを調べて01を表示。
for(i = 7; i >= 0; i--)
if((hidari & (~migi)) & (1 << i)) putc('1');
else putc('0');
putc('\n');
>>168です。自力でやることにします。
>>170でやるとコンパイルはエラーなしでできるのですが実行すると
Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted
といったエラーメッセージがでてきてしまいます。これは何が悪いのでしょうか?
>>184 aをintで宣言しているのにscanfする時に%dにしてない。
間違えた。
aとiはdoubleで宣言しなきゃダメ。
さらにミス。doubleにするのはaだけでよかった…orz
>>186 あいたー!初歩的なことに気付きませんでした。
すいません、ありがとうございました。この恩は向こう数十年は忘れません。
>>168です。エラーは消えたのですが答えがz=1のときは底eの2.7なんとかーって
でてくるはずなんですが2.00000000にしかなりません。
kaijo,pow関数はちゃんとした答えを返していました。なにが原因でしょうか・・?
どうもpow(z,i)/bがおかしいようでした。毎回pow(z,i)/b=0になっていました。
うーん・・・
>>188 忘れていーよ。寧ろ忘れて。
complex b(kaijo(i),0);
↓
complex b((double)kaijo(i),0);
でどうよ?
>>185様様
すいません、"/"のオペレーターの式が間違ってました(´д`)
おかげさまで底は無事表示できました。
あとexp関数を使って検算をするらしいんですけどヘルプにあるこれ↓意味がわかんねぇっす・・・
int main( void )
{
double x = 2.302585093, y;
y = exp( x );
printf( "exp( %f ) = %f\n", x, y );
}
>>170を使って、aに2.302585093を代入して、同じ値が出ればいいんじゃない?
具体的な値は…10。
なるほど。exp(x)はe^xを返す関数というわけですな。
ちなみに2.302585093を我がプログラムにいれたら見事に10.0000がでましたよ!!
ヒャホー(・∀・)イイ!!ありがとうございました!あとはθを使うやつか・・・
ちなみに余談ですが私は.net2003を使っているのですがツールバーの
デバッグのなかにあるプロセスってのをクリックするとなぜか.netがとまってしまうんですよね・・。
デバッグなしで開始のすぐ下にプロセスってのがあるんでさっき間違えて押してしまったときは
蒼白ものでした。
195 :
デフォルトの名無しさん:04/07/28 01:53
16進数を入力して10進数を出力するプログラムが
宿題で出たんですけど、初心者なのでぜんぜんわかりません。
なぜかscanf()関数を使っちゃいけないらしいです。
例えば、20って入力したら、32って出るプログラムです。
よろしくお願いしますm(__)m
fscanf
>>195w
#include <iostream>
int main() {
int value;
while(std::cin >> std::hex >> value)
std::cout << value << endl;
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int main() {
char buf[20];
fgets(buf, 20, stdin);
printf("%ld\n", strtol(buf, NULL, 16));
return 0;
}
>>195 普通にこうでしょ
#include <stdio.h>
int main(){
int i;
scanf("%x",&i);
printf("%d\n",i);
return 0;
}
やってもた・・・orz
203 :
デフォルトの名無しさん:04/07/28 09:30
>>195 #include <stdio.h>
#include <string.h>
int main()
{
char Buf[256];
fgets(Buf, sizeof Buf / sizeof (Buf[0]), stdin)
;printf("%ld", stdtol(Buf, NULL, 32);
return 0;
}
宿題まだー?ちんちん
206 :
デフォルトの名無しさん:04/07/28 13:31
面倒な宿題・・・他の言語と比較してC++について論述しろって。
javaと比較しようと思うのだけど、何を書くのがいいのでしょう。
誰かヒントお願いします。
「ちんちん」は↓のAA略じゃないのか
下品と捉える貴方が
☆ チン ハラヘッタ〜
ハラヘッタ〜
☆ チン 〃 ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ヽ ___\(\・∀・)< 宿題まだー?
\_/⊂ ⊂_)_ \____________
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄/|
|  ̄  ̄ ̄ ̄ ̄ ̄ ̄:| |
| 淡路たまねぎ .|/
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>206 参照
多重継承
演算子のオーバーロード
テンプレート
936 名前:デフォルトの名無しさん[sage] 投稿日:04/07/25(日) 21:57
>>934-935 下品すぎ
このアホだろ
「ちんちん」は箸で丼を叩く音なんだけどな。
このAA
↓
☆ チン
☆ チン 〃 ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ヽ ___\(\・∀・)< ○○まだ〜?
\_/⊂ ⊂_)_ \____________
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄/|
|  ̄  ̄ ̄ ̄ ̄ ̄ ̄:| |
| 淡路たまねぎ .|/
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
162の2^10000が微妙だから解いてやったら?
>>208,211
さっそくありがとう。調べてまとめてみる。
>>195 >>203のを改良,エラーチェックぐらいしなさいな
#include <stdio.h>
#include <stdlib.h>
int main()
{
char Buf[256];
gets(Buf);
printf("%ld", strtol(Buf, NULL, 16));
return 0;
}
>>205 さては2ちゃん初心者ですね。
最初はROMっていってるでしょーが。
サテハニチャンショシンシャデスネー!
wow!f**king!!i18n!
出力じゃねーや,32進数として変換されてるってことね
シンタックスエラーを直しても、fgetsをgetsに置き換えてたら釣りと見られても仕方が無い
>>219
先をこされた...
#include <stdio.h>
#include <string.h>
int main()
{
char Buf[256];
fgets(Buf, sizeof Buf / sizeof (Buf[0]), stdin);
printf("%ld", strtol(Buf, NULL, 16));
return 0;
}
変えるのはこれぐらいでいいだろう。
セミコロンは別に動かさなくても良かったけど、気分悪いから・・・。
わざわざ、バッファオーバーフローしないようにしてあるのを、
(ユーザー次第で)バッファオーバーフローするようにすることもあるまい。
>162
|・∀・|ノ ひさしぶりにようかんまんが解いてみたよ!
お礼はかわいい幼女画像がいいなー
#include <stdio.h>
#include <string.h>
#define EX10000
#define LIM1000
int main()
{
int tbl[100000];
int carry;
int i,j,w=1;
memset(tbl,0,sizeof(tbl)/sizeof(tbl[0]));
tbl[0]=1;
for(i=0;i<EX;i++){
carry=0;
for(j=0;j<w;j++){
tbl[j]+=carry;
tbl[j]*=2;
if(tbl[j]>=LIM){
carry=tbl[j]/LIM;
tbl[j]=tbl[j]%LIM;
}
}
if(carry>0)tbl[w++]=carry;// 繰り上がり
}
printf("2^%d = ",EX);
for(i=w;i>0;i--)printf("%03d",tbl[i-1]);
puts("");
return 0;
}
getsって使っちゃいけないの?
最近気付いたんだがファイル操作以外で
fgets派を多数見かけるんだがこれってどういう事?
どうも俺はファイル操作以外でfがつく関数を使われると違和感を感じるんだが・・・.
どうせならリモートにしろよ
225 :
デフォルトの名無しさん:04/07/28 14:20
>>223 getsを使うほうが違和感があるんだが。
>>223 何言ってるんだ使っちゃいけないわけ無い。
使っちゃいけないもんがなんで標準にあんだよ。
no boundary checkingってのが好きな奴もいるんだよ
std::printf(argv[1]);いうのもな
>>223 まさか、プログラマで飯くってる人じゃないだろうな
>>223 getsじゃ最大文字数指定できないでしょ?
バッファオーバーフローか,そうかそうか
なんかサイズチェックがゆるい関数表とか
Cで使っちゃいけない関数表とかないかな
>>230 おまえはC/C++を使っちゃいけない。
使うなとは言わない。
ただし、ユーザーが特定できていて、
なおかつ、そのユーザーが仕様以上の文字を入力する心配が無い場合のみにしてくれ。
#include <stdio.h>
int main()
{
char szBuf[8];
fgets(szBuf, sizeof szBuf / sizeof(szBuf[0]), stdin);
// gets(szBuf);
printf("%s", szBuf);
return 0;
}
このままの場合と、fgetをコメントアウトしてgetsのコメントアウトを解除した場合で、
8文字以上入力して試してみてくれ。
ただし、バッファオーバーフローするので、自己責任で。
まぁ、Win32の環境なら他のプロセスにまでは影響はでないと思うが…。
>>235 名に言ってんだ。
その二つは「C言語なら俺に聞け!」のメインテーマだろうが!
>>232 だって宿題だぜ?
そりゃー不特定の人相手に作る場合はチェック厳しくするけどさ
>>237 「使ってもいい」「使っちゃダメ」って一言で言ったら理由を知らない人が・・・。
俺も、宿題ならgets使おうとscanf使おうと構わないと思うけど。
宿題まだぁ〜ちんこちんこ
>>222 |・∀・|ありゃりゃTABだったからくっついちゃってる
#define EX 10000
#define LIM 1000
>>222 ん?これあってる?
2^20乗をためしたらおろろな結果になったんだが…
結果: 2^20 = 001010034072576
正: 2^20 = 1048576
象かよ。
ちゅうか
>>エレガントにお願い
とか言われると解くのに躊躇しちゃいます(^^;
ふだんからエレガントに書いていたらショボいソースは出てこないかと。
carryを0にするの忘れてた
if(tbl[j]>=LIM){
carry=tbl[j]/LIM;
tbl[j]=tbl[j]%LIM;
}else{
carry=0;
}
でもまだ微妙に違うなあ…
|・∀・;| わかった、逆でした
こっちが正解
tbl[j]*=2;
tbl[j]+=carry;
あと
#include <string.h>とmemset
いらないね
ようかんまーん
清書してsakuraにUPおねがいしまーす!
253 :
デフォルトの名無しさん:04/07/28 15:49
#include <stdio.h>
const int JOU = 1000;
const int KETA = 2000;
const int NINOBASYO = (2 / 2);
int main(void)
{
int i;
int hako[KETA];
for(i = 0; i < KETA; i++) hako[i] = 0;
hako[NINOBASYO] = 1;/* 2ができた */
hako[JOU] = hako[NINOBASYO];/* 1000乗できた */
hako[NINOBASYO] = 0;
for(i = 0; i < KETA; i++) printf("%d",hako[i]);
printf("\n 2進数でドゾー。 \n");
return 0;
}
ようかんまん先生こちらにおられましたか。
前のスレはどこにいきました?
virtualつけた関数ってどういう挙動なんですか
A←B←Cと継承してる場合
基底クラスからvirtualをずっとつけといた関数は
A *c=(A) new C; c->hoge(); とかやると
newしたときのクラスCのhoge()が呼ばれるけど
ずっとvirtualをつけてないときはAのhogeが呼ばれる。
で、よくわからないのが
継承の途中からvirtualをつけたり、途中からはずしたりしたとき。
実験しまくってるけど法則がよくわからないです。
一度virtualをつけたらそれ以降は省略してもvirtual
>>254 ようかんまんも、拙者も、流石兄弟も
中の人達はみんな同じでお送りしております。
>>258 中 の 人 な ど い な い 。
OK?
#include "現実.h"
int main(void)
{
return いい加減現実を見ろよ!();
}
unko[x]の中にy個の数字の中からx個を選んで入れる。
仮にx=4、y=10なとき、
unko[ ]={1,2,3,4}
unko[ ]={1,2,3,5}
unko[ ]={1,2,3,6}
・・・
unko[ ]={7,8,9,10}
とunkoの配列の中身を順に変えて行きたいのですが、
for文を使わずにTimerを使って一回づつ処理を進めて行く場合は
どう書けば良いですか?
Timerって何?
コードの再利用など愚の骨頂だと気づいたから、書き直した。
void swap(int *a, int *b)
{
int t = *a;
*a = *b;
*b = t;
}
void reverse(int *data, int size)
{
int i, j;
for(i = 0, j = size - 1; i < j; i++, j--)
swap(data + i, data + j);
}
int np(int *data, int size)
{
int i;
for(i = size - 2; i >= 0; i--)
{
if(data[i] < data[i + 1])
{
int j = size;
while(data[i] >= data[--j])
;
swap(data + i, data + j);
reverse(data + i + 1, size - i - 1);
return 1;
}
}
reverse(data, size);
return 0;
}
270 :
デフォルトの名無しさん:04/07/28 20:20
>>270 func()が全く意味を成していない.
xを返してるだけじゃん
return (x); /* 右辺の関数 */
を
return (t,x); /* 右辺の関数 */
に変更
273 :
デフォルトの名無しさん:04/07/28 23:38
すいません、昨日の者です・・・
複素数の指数関数 ez は, テーラー展開を用いて次の式で求める.
e^z = 1 + z + z^2/2! + z^3/3! + … + z^n/n! + … ( zは(a+0i) )
らしいのでこんなん作ったんですが値が1とか2とか小さいのだと標準ライブラリの
expを使ったのとかなり近い値になるのですが5ぐらいになってくるとかなりずれてきます。
なにがおかしいのでしょうか??
//eの複素数べき乗を返す
complex exp_co(complex x)
{
int i;
complex c(1,0),sum;
sum=c+x;
for(i=2; i<10; i++){
complex b(kaijo(i),0);
sum=sum+pow(x,i)/b;
}
return sum;
}
ちなみにmainはこんな感じです。
int main(void)
{
double a;
printf("問題1:\n底eのz乗を計算します\n");
printf("z >");
scanf("%lf",&a);
complex ans1,seed(a,0);
ans1=exp_co(seed);
printf("自分のプログラムの値 > ");
ans1.print();
printf("\n\n");
・・・・
}
>>276 マクローリン展開じゃなくテーラー展開を使え
>>278 Σ(゚д゚)エッ!?このプログラムテーラー展開してないの!?
>>276 級数の和を取る回数の10を増やせばいいだけじゃないの
つーか増やせって
>>168にも書いてあるじゃねーか。
>>280 ループ条件:for(i=2; i<10; i++)
底eのz乗を計算します
z >7
自分のプログラムの値 > 910.749383+0.000000i
exp関数の値 > 1096.633158+0.000000i
ループ条件:for(i=2; i<20; i++)
底eのz乗を計算します
z >7
自分のプログラムの値 > 101366746.487487+0.000000i
exp関数の値 > 1096.633158+0.000000i
でした・・・
>>282 実装が悪い。階乗を計算してると限界がすぐに来る。
ではlong double でいいんですか・・・?
…まあ、向いてないということで……
ヽ(`Д´)ノウワァァン
287 :
デフォルトの名無しさん:04/07/29 02:19
どんな環境でも常に2バイトの大きさを持った変数を使いたいんですが…
どうやら学校のパソコンではint型が4バイトのようで、int使うと大きすぎて困るんです。
だからといって char a[2] みたいにすると直接 a=a+1 とかいう感じに、一つの数字として
扱うことが出来ないし。
なんか方法ないですかね?
>>289 お前には向いてない
学校辞めて別の道探した方がいい
>>291 いやなんか、どんな処理系でも共通な型ってcharだけって聞いたんですが、
short intも常に2バイトで決まってるんですか?
293 :
デフォルトの名無しさん:04/07/29 03:06
>>292 共通な型という意味では全部そうだが、サイズが同じものは何もない。最低の
ビット数が決まっているだけだ。実装依存だからコンパイラのマニュアルを嫁。
しかし、その前にまず常に2バイトの整数を使いたい理由を言ってみろ。
ヒロシで・・・じゃなく168です。
解決しました。
double kaijo(int x)
{
int i,sum;
sum=1;
for(i=1; i<=x; i++) sum=sum*i;
return sum;
}
kaijoがこんなんになってました・・・
sumはdoubleじゃん・・・('A`) もう寝ます。
自分にプログラミングは向いてないっすかね・・・あと実装っていう意味勘違いしてました。
調べてなんとなくですがわかりました。
>>283様 ありがとうございました
295 :
デフォルトの名無しさん:04/07/29 06:10
>>292 じゃあキミの知ってる short の長さは?
10センチ以下だろ
>>292 stdint.hのint16_t ならどうだ?
ただ2バイトじゃなくて常に16ビットと決められているけど
(VCならたぶんstdint.hがない代わりに__int16って型があるはず)
WORD は?
はい
>>298 なかったら自分で作れ。typedefと#defineが並んでるだけだ。
>>292 組み込み系ではcharが9bitのものもあるという話だが
C99 なら stdint.h
C++ なら boost/cstdint.hpp
C99以前のCとか、C++だけどboost使えないとかの場合はシラン
>>305 C++ の場合は知らないが、C99 の int16_t とかはあれば定義されてるってだけで、
どの処理系にもあるってわけじゃないんでは?
そもそも 1バイト と 8ビット は絶対的には = ではない。
バイトバイトばーいと♪
おい、無職。バイトしろ
Float Overflow のアプリケーションエラーの場合はどうすればいいのでしょうか?
みんな型の質問するときに自分の環境を書かないのはこのスレの伝統ですか?
・全ての環境が同じ仕様だと思っている
Borland5.5 WindowsXP です。
まだー?ちんちん
putcやgetcと、fputcやfgetcの具体的な違いが解せません。
宿題じゃないだろそれ。マニュアル嫁
スレ違いなあなたが解せません。
質問者は俺たちに定期的に宿題を出し続けなければならない
>>289 ビットフィールドじゃだめか?
1バイトが 7,8,9,11 ビットの処理系に対応するように union して
あげれば何とかなると思う.
でも,そんなアクロバティックなプログラムは
今の時代に合わないと思うよ.
charが12bitのCPUもある
scanfの話題もそろそろ出てくる頃だな
> 32bitで表せる素数をすべて列挙するプログラムを作成せよ。
> ただし、単独のコンピュータで行い、24時間以内に終了することを条件とする。
どなたか出来ませんでしょうか?
>>324 マジで一生懸命考えちゃったじゃないか!w
ビルの高さh(m)、初速v(km/h)を入力し、
落下地点と最終速度を表示するプログラムを作成しなさい
但し、仰角は0度、空気抵抗は考慮しなくても良い。
■問題
地上26mの高さのベランダから水平に飛び出したところ建物から
9m離れた地表に落下した。ベランダから飛び出したときの初速
を求めよ。なお、重力加速度は g=9.8m/sec^2とし、空気抵抗は
無視する。
考え方:初速度V0で物体を水平方向に投げると、水平方向には等速
運動、鉛直方向には初速度0の自由落下運動となる。
速度のx成分 Vx=V0 時間tについて積分→t秒後の水平位置 x=V0*t
速度のy成分 Vy=g*t 時間tについて積分→t秒後の鉛直位置 y=(1/2)*g*t^2
地表に落下した時刻をt1とすると、題意より、
V0m/sec*t1sec=9m …1)
(1/2)*9.8m/sec^2*t^2sec=26m …2)
1)より t1=9/V0 これを2)に代入して
(9.8/2)*(9/V0)^2=26
9/V0=√26/(9.8/2)
V0=9/√(26/(9.8/2))
V0=3.907m/sec
(答) 3.907m/sec (14.07km/h)
--------------------------------------------------------------------------
■落下時間は 1)にV0を代入して t1=9/3.907≒2.30sec
最終速度は Vy=g*t=9.8*2.304≒22.58m/sec (81.3km/sec)
♀
彡 />....
───┐ ’ミζ゚
□□□│ ・
□□□│ ’.
□□□│↑ ミ
□□□│ ζ゚
□□□│26m .
□□□│ .
□□□│↓ .
□□□│ .
._. │ ..
| | | │ "orz ||
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
|← 9m →|
いたい、いたい
関数atof(),atoi(),strtod()と同様の機能の関数を作ってください。
>>324 後はCPU能力次第やな。
int main(void)
{
/* unsigned long = 32Bit */
unsigned long *prime, count, number, index, *memory;
char loop;
prime = (unsigned long *)malloc(1 * sizeof(unsigned long));
if (prime == NULL) return 1;
prime[0] = 2;
count = 1;
printf("%u\n", prime[0]);
number = 3;
while (number != 1) {
for (loop = -1, index = 0; loop && index < count; index++) {
if (number % prime[index] == 0) loop = 0;
if (prime[index] >= number / 2) break;
}
if (loop) {
memory = (unsigned long *)realloc(prime, (count + 1) * sizeof(unsigned long));
if (memory == NULL) {
free(prime);
return 1;
}
prime = memory;
printf("%u\n", number);
prime[count++] = number;
}
number += 2;
}
return 0;
}
// Need -> #include <stdlib.h>
double _atof(const char *nptr){ return strtod(nptr, (char **)NULL); }
int atoi(const char *nptr){ return strtol(nptr, (char **)NULL, 10);
最後に中括弧つけといて(||゚Д゚)
ちょい修正
if (prime[index] >= number / 2) break;
↓
if (prime[index] >= number / 3) break;
>>332 CPU2GHz、RAM1GBもありゃぁ十分可能ジャマイカ?
今時実現不可能なスペックでもあるまい?
素数を計算せよじゃなく、単に列挙するだからラクショー
#include <stdio.h>
#include <stdlib.h>
inline bool BitGet(unsigned int *x, unsigned int y)
{
return x[y/32] >> (y % 32) & 1;
}
inline void BitSet(unsigned int *x, unsigned int y)
{
x[y/32] |= 1 << (y % 32);
return;
}
int main(int argc, char **argv, char **envp)
{
unsigned int *map, i, j;
const unsigned int max = 0xFFFF;
map = (unsigned int *)calloc(max/32+(max%32 != 0), sizeof(int));
if(map == NULL) return 0;
for(i = 2; i <= max; i++){
for(j = 2; j <= max / i; j++){
BitSet(map, i*j);
}
}
for(i = 2; i <= max; i++)
if(!BitGet(map, i))
printf("%d\n", i);
free(map);
return 0;
}
エラトステネスのふるいを使ってみた。
とりあえず、"動くように"作ったから速度は(r
メモリは128MBくらい要ります。
maxを0xFFFFFFFFにしといて('A`)
テストで減らしたの忘れてた。
素数は列挙スレに行けばいい。
まあ結局はエラトステネスしかないんだが。
>>339 > maxを0xFFFFFFFFにしといて('A`)
int が 32ビットの保証はないし、32ビットなら止まらん。
limits.h - UINT_MAX
>>341 32ビット演算の場合。
(unsigned)0xFFFFFFFF <= (unsigned)0xFFFFFFFF は真だよね?
0xFFFFFFFF + 0x00000001 = 0x00000000 だよね?
(unsigned)0x00000000 <= (unsigned)0xFFFFFFFF は真だよね?
ほら、Forループが終わらないでしょう?
>>326 地球上と限定していいの? その場合、緯度と標高は?
あーそれに、初速の方向も必要だな。
0xFFFFFFFE
みんなの使うCには do ... while 文というものが無いのか?無いなら謝る。
ui = 0;
do {
ui++;
} while (ui != 0xFFFFFFFF);
とすれば良いジャマイカ。
>>343 地球限定で構いません。重力加速度=9.8m/s^2でお願いします。
初速の方向は、地表と水平で、ビルの壁面に対し垂直でお願いします。
地球の丸みは無視して下さい。
ハハハ
す、すいません
似たような課題があったので上から引っ張ってきたんですが
関数で書かれてるのもあったんですね、もっとよく探すべきでした、すいません
>>326 多分こんな式?
#include <stdio.h>
#include <math.h>
int main()
{
const double g=9.8;
double h,v;
double t;
printf("高さh(m) 初速v(km/h) > ");
scanf("%lf %lf",&h,&v);
t=sqrt(2*h/g);
printf("落下地点 : %f\n",v*1000*t);
printf("最終速度 : %f\n",g*t);
return 0;
}
>>353 最終速度は鉛直方向と水平方向で3平方取らないといけないYO!
空気抵抗ないってことは初速度そのままでいいの?
それなら
printf("最終速度 : %f\n",sqrt((g*t)*(g*t)+v*v));
スペースが消えるだろうから調整してくれ
#include <stdio.h>
#include <math.h>
int main(void)
{
double h, v, vv, t;
double g = 9.80665;// 標準重力加速度
printf("h[m]? >");
scanf("%lf", &h);
printf("v[km/h]? >");
scanf("%lf", &v);
vv = v / 3.6;// v[m/sec]に変換
t = sqrt(2.0 * h / g);
v = sqrt(g * g * t * t + vv * vv);
printf("落下地点 = %f[m]\n", vv * t);
printf("最終速度 = %f[m/sec]\n", v);
printf(" = %f[km/h]\n", v * 3.6);
return 0;
}
>>356 とか全角とかに置き換えれば消えない
全角空白文字を使うと、質問者がそのままコピペして
「コンパイルできません!」とか言われたりする罠
質問・宿題スレではお勧めできない
「 」「 」に置換すると良いね。
でもかちゅ〜しゃでレスポップアップしたときに醜くなる罠
地球の丸みを無視してもコリオリの力は無視できない罠。
#東京程度の緯度で初速0でも東京タワー程度の高さで3cm位は東に流れるぞ。
自転も無視してください!
そんなの中学校じゃ習わないよ!!
使用する言語はCです。
>>366 分かりました。かなり長いかもしれませんがよろしくです
>>364 1.
ひとつは,辺の重みの値が 0 になるグラフがだめだよね.
もうひとつは何だろう?
2.
自分でコンパイルしてやって.
3.
プログラム上は配列に残ってるけど,アルゴリズム上は
なくなったノードだからでしょ.
>>364 素人なんで間違ってたらスマソ
1.
辺に重み0をつけられない。
ある点と自分自身との接続や、同じ二つの点の間の複数の接続を表現できない。
2.
自分で試せ。
3.
グラフに孤立点しかなかった場合にvisit_all_nodesは常にYESを返し、
これは期待した動作ではないから。
2. の意見は一致したな.
>>369 それか,
1.
辺の重み0ができない.
と
2つのノード間の複数の辺を表現できない.
これだな.(自己接続はできるよ.)
>>372 関数内のコメント凄いね。逆に見辛くない?
>>374 仕様書を兼ねたコーディング規則を取る場合はあれぐらいやるよ
センセが書いたんだろ。
>なぜでしょう?
なんて煽る文句が入ってる。
>>372をGoogleのクロール対象に加えておいた:P
378 :
デフォルトの名無しさん:04/07/29 21:37
平衡木B-Treeを用いたプログラムを作成せよ。
以下の仕様を満たすものであれば,その他の詳細は問わない。
1.英文テキストファイルから単語を抽出し,それをB-Treeに格納する。
2.B-Treeから,単語を辞書順に出力する。
C言語/C++言語,どちらでも良いそうです。
よろしくお願いします。
リトルエンディアンを入力し、ビッグエンディアンに変換して、出力せよ
その際、先頭の0を省略することを禁じ、演算は、1行で行うものとする
>>379 こうでいいよな?
int main()
{
unsigned short n;
scanf("%u", n);
printf(%0u, (n << 8) | (n >> 8));
return 0;
}
int main()
{
unsigned long n;
scanf("%lu", n);
printf(%0lu, (n << 24) | (n >> 8 << 16) | (n >> 16 << 8) | (n >> 24));
return 0;
}
>>331 >>338 の素数計算プログラムを評価してみた。
CPU: Pen4 2.4BGHz Mem:512MB gcc(g++)オプション: -O3
331:
桁が二倍になるごとに計算時間は約3.6倍になるように見える。400万以下の素数で 221.167s
かかることから予想終了時間は1020日位。よって24時間以内に終わらない。
338:
桁が二倍になるごとに計算時間は約2.2倍になる。ただし計算数が大きくなるほど倍率は
下がっていくように見える。(1000万→2000万:2.34倍/2000万→4000万:2.25倍)
1.6億以下の素数で 173.771s かかることから予想終了時間は 130分以下。
まさに爆速!このプログラムなら24時間以内なんて楽勝っぽい。
爆速ってのは prime_sieve.c みたいなのを言うんだ
>>381 JavaScriptで書いたほうがはるかに速い
>380
それじゃだめじゃね?
#include <stdio.h>
int main()
{
unsigned int n;
scanf("%x", n);
printf("%0x", (n << 24) | (n >> 8 << 16) | (n >> 16 << 8) | (n >> 24));
return(0);
}
#include <stdio.h>
int main()
{
unsigned int n;
scanf("%x", &n);
printf("%0x", (n << 24) | ((n << 8)& 0x00FF0000) | ((n >> 8) & 0x0000FF00) | (n >> 24));
return(0);
}
douda?
>>356 >v = sqrt(g * g * t * t + vv * vv);
>printf("落下地点 = %f[m]\n", vv * t);
>printf("最終速度 = %f[m/sec]\n", v);
v壊しててもだれもつっこまないんだな
>>379 こういうときこそ,C++。
#include <iostream>
#include <iomanip>
template <class Type> Type traverse(Type in){
int i; char *p,buf[100]; Type out=in;
for(i=0,p=(char*)&out;i<sizeof(Type)/2;++i) p[sizeof(Type)-i-1]^=p[i]^=p[sizeof(Type)-1-i]^=p[i];
std::cout<<"0x"<<std::setw(2*sizeof(Type))<<std::setbase(16)<<std::setfill('0')<<in;
std::cout<<" -> ";
std::cout<<"0x"<<std::setw(2*sizeof(Type))<<std::setbase(16)<<std::setfill('0')<<out;
std::cout<<std::endl;
return out;
}
int main(){
int i=0x01234567;
short s=0x0123;
long l=0x01234567;
long long ll=0x0123456789abcdefll;
traverse(i);
traverse(s);
traverse(l);
traverse(ll);
return 0;
}
>>386 元々意図してますが、何か?
これ以降、元の形の v 使いませんが、何か?
何かナニカうるせぇハゲ
ハゲハゲうるせぇぼけ
非常に柔軟性の求められる課題で、全く手がつかない状態です。。。
(課題)
今手元に、「ある学校の生徒の名前と連絡先の入ったファイルA」と
「その生徒たちのテストの結果および平均点と評価、全体での平均点が入っているファイルB」があるとする。
@ファイルBで評価がD以下だった生徒の名前を新たなファイルCに書き出す。
Aその生徒たちの連絡先をファイルAから探し出しファイルCに追加する。
Bその生徒たちの名前と連絡先を名前順に並び替える。
結果として、ファイルCに「評価がD以下だった生徒」の「名前と連絡先」が「名前順」にソートされている。
このようなプログラムを作れとのことです。
制限とかはなかったんで、ぜひぜひ自由にプログラム組んでいただけると助かります。
C言語です。どうかよろしくお願いします。
>>379 C言語版。
#include <stdio.h>
#include <string.h>
void traverse(void *in, int size){
char *p=malloc(size);
memcpy(p,in,size);
for(i=0;i<size/2;++i) p[size-i-1]^=p[i]^=p[size-i-1]^=p[i]; //演算の一行
printf("0x");
for(i=0;i<size;++i) printf("%02x",((char*)in)[i]);
printf("-> 0x");
for(i=0;i<size;++i) printf("%02x",p[i]);
printf("\n");
free(p);
}
int main(){
int i=0x01234567;
short s=0x0123;
long l=0x01234567;
long long ll=0x0123456789abcdefll;
traverse(&i,sizeof(i));
traverse(&s,sizeof(s));
traverse(&l,sizeof(l));
traverse(&ll,sizeof(ll));
return 0;
}
>>392 1や2でファイルCに書き出すと,すげぇ面倒くさいんだけど?
最後,3で一度だけ書き出すんじゃ駄目なの?
>>393 > for(i=0;i<size/2;++i) p[size-i-1]^=p[i]^=p[size-i-1]^=p[i]; //演算の一行
未定義
>>394 生徒が100万人くらいいてメモリだけでやるには手に負えないんじゃないか?
どんな学校ですか
>>396 それなら,ファイルDを用意しないと,上書きしちゃう。
>>394 あっ、書き方が悪かったかもしれません。
最後に一度だけ書き出していただいて、全然問題ないです!
助かります、どうぞよろしくお願いいたします。
>>399 ファイルの形式は決まってないのか?
それも含めて制限なしで自由ってことなのかもしれないけど、面倒くさいんだよ、そういうの。
>>401 p[size-i-1]^=p[i]^=p[size-i-1]^=p[i] の辺り
あpろだ使うまでもなくサンプルを2、3行ここに貼ればいいだけじゃないか
↑ Not Found.
宿題まだー?ちんちん
> 毎秒1億桁のπを求め、表示するプログラムを作成せよ。
> (※使用するパソコンの性能は現在、一般に普及している最新型相当のものとする)
何ですが………
どう考えてもできません。どうすればいいでしょうか……。
毎秒一億桁はムリだろー
普通のπなら FFT でガウスルジャンドルでもやっとけ
407 名前:デフォルトの名無しさん[sage 今度こそ不可能なネタ投下!]
>>407 あからさまに不可能な宿題は見ていて面白くないよ。
ギリギリ現実可能か?と思わせる宿題出される様にしてよ。
つか、しつこい上にツマラナイ
またちんちんしちゃうよー
CPU: 1GHz
Mem: 1GB
のパソコンにおいて
一時間かけて合成数n(=p*q)を素因数分解するとき
nが何ビットまで素因数分解できるか
(p,qのビット数は等しいものとする)
情報足りなくないか
何ビットまでって…
足りない頭をひねっても愚問しか出てこないよ。いい加減諦めろ。
ちょー簡単なアルゴリズムの問題でも出そうか。
N個の数、1,2,3,...,nの順列を表示するプログラムを、N=10として作れ。
なお表示する順は問わない。
next_permutation
と元も子もないことを言ってみるテスツ
nが1024ビットの数だったら一時間で素因数分解できないけど
nが40ビットだったら楽勝でできるわけで、
どこが限界か知りたいの
>>417 そういう探せば一瞬で見つかるようなのじゃなくて、もうちょっとひねった問題にしてくれ。
>>417 ここはあくまで宿題スレだから問題出す時は下手に出ろ
while, do〜while文を用いた反復文プログラム
次のような単純な暗号を作成しなさい。
@暗号化したい数字を入力(正の整数)[データ1]
A暗号用の鍵(正の整数3桁)を入力[暗号鍵]
B暗号鍵の数字(の約数)から素数を全て求める
C1番目に大きい素数と2番目に大きい素数を選択[鍵1,鍵2]
(1番目と2番目が無い場合,暗号鍵の数字に1を足しBへ)
Dデータ1に鍵1の数字を掛ける[データ2]
E最後に,データ2を鍵2で割り,その余りの2乗を暗号とする
Aまでは出来たのですが、B以降が分かりません。
どなたか解いてくださいませんでしょうか、お願いします
すいません↑はC言語でお願いします
ひとついいですかそれは可逆ですか
暗号を作るだけで、暗号から元に戻したりはしません
ウイルス
Nothing like that. Those games were console applications written with
C++ on my own burden. Just try to right-click, save, then play it!
fuck off sunnovabitch
I seriously made it for fun and only pleasure is just to have somebody
play my hand-made game. That's the sense, well, I would never erge to
play those it's all up to u folks..
えいごわかりません
hand-made game? huh, bullshit.i mean, fuck it.
英語読めね('A`)
Why u so cursing around? Isn't it on far plot so far for you?
I'm really not sneaking.... well, i'm away...
どうでもいいけどスレ違い
go! go! away! hope never to see ya again
えーと、これは自演?コピペ?
あ、ふるいじゃないのか。なら違った。
>>440 ありがとうございました〜。
素数判定はどんなことやってもいいので、
その回答例が正しいようです。
お手数をおかけしてすみませんでした。
>>443 わざわざ示していただきありがとうございました。
でも、自己参照的データ構造への書き直し方がよくわからないので、
440さんに示していただいたプログラムに手を加えて見ようと思います。
過去レスもよく読まずに質問してしまい申し訳ありませんでした。
すいませんが場違いなのはわかりますが助けてください。
JPEG処理に使われる1次元8点DVTを実現するプログラムを
SH3-DSPのアセンブリ言語を用いてさくせいせよ。
変換行列の係数は計算済みとしてよい
ソースデータはメインメモリにおかれているとする
結果はメインメモリに格納する
>>447 ここはC,C++の宿題スレです。アセンブラはCとかC++じゃないです。
流れてしまった
>>422を誰かお願いします。・゚・(ノД`)・゚・。
とりあえずその(2)までのPrg.を
>>1にうpっとけ。
>>402 それって未定義なの?
右から順次代入していくんじゃないの?
=じゃなく^=なのだが
C言語の課題でこんな問題が出されました。
宝くじで1億円当たったあなたは,それを増やすために,
T銀行に2年間預けることにしました.利率は,0.005%(毎月複利)です
2年間(24ヶ月)の残高の推移を,1ヶ月毎にfor文とprintf文を用いて出力しなさい。
さっぱり分からないので誰か代わりに答えを出してください(´Д⊂
>>456 #include <stdio.h>
main()
{
double money = 100000000;
int i;
printf("元金 %d円\n", (unsigned long)money);
for(i=0 ; i < 24; i++){
money *= 1.005;
printf("%d ヵ月後 %d円\n",i+1 ,(unsigned long)money);
}
}
>>457 ^= は = と違って左辺値も一度評価される
>>456 表示修正
#include <stdio.h>
main()
{
double money = 100000000;
int i;
printf("元金 %.f円\n", money);
for(i=0 ; i < 24; i++){
money *= 1.005;
printf("%d ヵ月後 %.f円\n",i+1 ,money);
}
}
課題でくらい 10% くらいにしてくれよ
ありがとー^^
>>458 表示だけじゃなくて、計算過程としても小数以下は切り捨てるんじゃない?
double money
↓
unsigned long money
あと、0.005%複利は * 1.00005 。
I君は自宅から学校まで電車で通っている。
その片道運賃は190円である。
syyyy年smm月sdd日からeyyyy年emm月edd日まで
学校へ休まず通う(自宅→学校→自宅)とした場合、
運賃はいくらになるか。但し、
通う総日数部分(閏年は考えない)および、運賃計算部分は関数化すること。
という宿題が出ました。よろしくですm(_ _)m
っと、言語はCでよろしくです
>>465 春・夏・冬休みも学校に行くの?
…現実なら定期を買って行くんだろうけどなぁ。
まだ学校休みじゃないんですよー
課題もネット経由で提出しなくちゃいけないのです;;
ひぃ、ごめんなさい現実と勘違いしてました(照
土日は休みで春・夏・冬休みは無いです・・・
ほんとすいません><
閏年は考えないのに土日を考えるっていったいどうするつもりなんだろう?
下がり杉なので age ときますね.
ageないで良い
475 :
デフォルトの名無しさん:04/07/31 00:02
age
1年365日の内、土日何日あるのかわからねミ,,゚Д゚彡
365/7*2=104日くらい
478 :
デフォルトの名無しさん:04/07/31 04:52
Cでコンパイルした時に
77行目:out of memory
というエラーが出るんだけどどういう意味ですか
out of memoryです
ヘッダの二重インクルードだろ?
妙な誤字があたよ。
× >* sw は、開始日の曜日を表す数値。0-6で、小さい順に、月日水目金土日
○ >* sw は、開始日の曜日を表す数値。0-6で、小さい順に、月火水木金土日
あと、年月日の整合性チェックしていないので、変な値入れると動作保障できません。
特に「月」は、配列のインデクスに使ってるので、1〜12の範囲外では不正メモリアクセスが発生する。
そういえば、国民の休日っつーもんがあるな。
>465 の提示情報だけだと、祝日も考慮しなきゃならなそうだ。
> 祝日も考慮
ハッピーマンデー キタ━(゚∀゚)━( ゚∀)━( ゚)━( )━(゚ )━(∀゚ )━(゚∀゚)━!!!!
> 閏年を無視すると、曜日計算が出来ませんので、開始日の曜日も入力するようにしました。
こんなん感じでええんちゃう?
テストしてないから間違えてるかもしれないけど・・・・
int montable[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int y, m, d, ms, dow;
/*
y = 2004;
m = 2;
d = 7
*/
ms = 0;
for(i = 0; i < m-1; i++) ms += montable[i];
dow = ((y - 1) * 365 + ms + (d - 1)) % 7;
教授によると休みは土日のみらしいです・・・
死ぬぞヽ(`Д´)ノ
>>482さんのソースでできました。
有難うございましたー
C言語実習の課題で
5 -1 7 -7 9 25 -9 5 14 9の配列を
シェルソートで並べ替えた結果と交換回数、比較回数を表示せよ。
なんですけど、交換回数、比較回数の表示ができません。
どうやればいいのか教えてもらえないでしょうか。
コード晒せや
>>491=488
手っ取り早い方法。関数外でstatic unsigned KoukanKaisuu, HikakuKaisuu;と定義しておき、
比較のif文の前で++HikakuKaisu;、交換の直前で++KoukanKaisuu;とカウントする。
ソート後、それらを表示すればよい。
私ゃ頭が痛いよ。
こんな奴がシェルソート書いてることが不自然
ネタ決定
クイックソートって萌えるよね
すいません、天然でした・・・
グローバル関数にしたら作動しました
どうもお騒がせしました
そして有難うございました
498 :
c言語入門ふつかめ:04/07/31 15:35
>>498 1. 細切れにしなくてもまとめて1つにできる。
printf("数字(%d)を代入してください", n);
2.
scanf("%d",&input);
if(input==0) break;
data[i]=input;
これはinputを使わずにこれじゃダメなのか?
scanf("%d",&data[n]);
if(input==0) break;
3. 何番目にあるのか探すのだから、data[0]〜data["0が入っているとこまで"]をforで探し回らないと探したことにならない。
for (;;) {
printf("見つけたい数字を入力してください ");
scanf("%d",&j);
if (j == 0) {
printf("それではプログラムを終了します");
break;
}
for (n = 0;; i++) {
if (data[n] == j) {
printf("%dは%d番目にみつかりました", j, n);
break;
}
else if (data[n] == 0) {
  printf("%dは見つかりませんでした", j);
  break;
}
}
}
>>499 なるほど、1番目のはどうにかしたらできると思ってたんですが3番目のは全く
思いつかなかった_| ̄|○
ありがとうございます!
あ、ファイル出力忘れてた。最後にコレ追加しといて。
// Record set. - C.txt
strcpy(caFile, ".\\C.txt");
if ((pfA = fopen(caFile, "w")) == NULL) {
printf("File not find - %s\n", caFile);
return 1;
}
lIndex[ID_SORT] = 0;
while (lIndex[ID_SORT] < dbQuery.lCount) {
fprintf(pfA, "%s %s\n", praSort[lIndex[ID_SORT]]->caName, praSort[lIndex[ID_SORT]]->caTel);
lIndex[ID_SORT]++;
}
fclose(pfA);
1番目と2番目のはできましたが、
肝心の見つけたい数字を入力するとこが全く正常に動きませんでした・・_| ̄|○
>>504 for (n = 0;; i++) {
を
for (n = 0;; n++) {
にしてみ
iをnにしてみましたがかわらず・・
実行したときに、0以外の整数を入力すると常に見つかりませんが表示され、
なぜか0を代入すると0は〜番目に見つかりましたと表示され、プログラムも
終了されません。
c 34: syntax error near 'end of file'このエラーを無視してるからでしょうか_| ̄|○
あ、エラーがあるからコンパイルできてないから実行しても結果がかわらないのかな
>>499は間違いが多いから、この考え方を参考にして自分で書いてみるべし。
>>509 構文エラーの意味を考えれ。
>if(j==0) break; {
>printf("それではプログラムを終了します");
>}
変だろ?
>>509 わかったわかった
#include<stdio.h>
#define MAX 10000
#define else
↑これを書けばコンパイルできるよ
初心者にやさしくない人がいますね。
>>510,511
ありがとうございます。参考にさせてもらいました。
まだ若干の問題点はありますがもうちょっと改良すればできそうです。
見やすくはなった
余り日数の土日チェックが不完全だったので、一応完全版書いておきます。
初日が土日の場合に、計算が合わないことがあります。
もっとも、初日が休日というのはありえない設定かもしれませんが。
int get_weekdays(int sy, int sm, int sd, int sw, int ey, int em, int ed){
int i, s, e, all_days, holidays, mod;
s = YEAR_OF_DAY[sm - 1] + sd;
e = YEAR_OF_DAY[em - 1] + ed;
all_days = ((ey - sy) * 365 + e) - s + 1;
holidays = (all_days / 7) * 2;
mod = all_days % 7;
if(mod > 0){
switch(sw){
case 5:
if(mod == 1) holidays += 1;
else holidays += 2;
break;
case 6:
if(mod < 6) holidays += 1;
else holidays += 2;
break;
default:
if(sw < 0 || sw > 6) break;
if(sw + mod == 6) holidays += 1;
else if(sw + mod >= 7) holidays += 2;
}
}
return all_days - holidays;
}
>初日が土日の場合に、計算が合わないことがあります。
誤解を招く言い回しかいちゃったので訂正。正しくは
>初日が土日の場合に、計算が合わないことが(最初のプロ具レムでは)ありました。
です。>517 に差し替えれば初日が土日でもちゃんと計算されます。
あと、
MONTH_OF_DAY, YEAR_OF_DAY
は
DAY_OF_MONTH , DAY_OF_YEAR
が英語的にただしいっぽ。
配列を戻り値にできますか?
>>519 関数は配列を戻り値にはできないよ。ポインタなら戻り値にできるけど。
セミコロン多かったorz
523 :
デフォルトの名無しさん:04/07/31 23:41
C++で式を入れたら答えが出力されるという計算機のプログラム
6+2×3と入力したら12とでるやつを作りたいのですが・・・
自分にはできないのでできるかたお願いしますm(__)m
524 :
デフォルトの名無しさん:04/07/31 23:44
522です
C++じゃなくてCです。すいません><
m(__)m><
入力は2バイト文字?それとも1バイト文字でも良いの?
>>523 if (strcmp(szInput,"6+2×3") == 0){
printf("12");
}
>>500>>515 コンパイルして実行してみたら、できました!
全く手がつけられない状態でしたので、すごく助かりました。
本当に、どうもありがとうございました。
531 :
デフォルトの名無しさん:04/08/01 01:13
ブレイク!ブレイク!
( ゚∀゚) ・∴.
(ヽ□=□━━━
> > .∵’
scanf使っているから
なんで初心者ってscanf使っちゃうんだろうね?
scanfしか知らないからです_| ̄|○
538 :
デフォルトの名無しさん:04/08/01 02:26
>>537 scanfの問題では無い。問題も無い。
検索のforループ、見つかろうが見つからまいが、1回目でbreakしてるのが原因。
1つ目に入れた数なら何回目でも必ず見つかる。
>>537 あと、問題は他にもある。
int data[MAX]の中身は不定だ。main()の外に置けば0で初期化される。
??27行目あたりのbreakでしょうか?
消して実行してみたら余計おかしくなってしまいました
541 :
デフォルトの名無しさん:04/08/01 02:35
つりっぽ
もし (data[i]==0) なら「見つからなかった」
544 :
c言語入門ふつかめ:04/08/01 03:18
だめだ。。
これ以上この問題だけに時間かけれないので、
具体的にどこをどうすればいいか教えてください
>>545 提出しないとダメなので。c言語あと1問、レポート、テスト勉強(;´Д`)
>>544 >if(j==data[i]){
>printf("%dは%d番目に見つかりました\n",j,i+1);
>break;
>}
>else{
>printf("%dは見つかりませんでした\n",j);
>break;
>}
これを、
if(data[i]==0){
printf("%dは見つかりませんでした\n",j);
break;
}
if(j==data[i]){
printf("%dは%d番目に見つかりました\n",j,i+1);
break;
}
にすれば大丈夫、とみんなは言っている。
>>547 やっとできました・・・
マジでありがとう。
夏休みにc言語の学習に励みます
549 :
デフォルトの名無しさん:04/08/01 05:15
>527
個性的でですね
>530さん
ありがとうございます(^▽^) 助かりました(つД`)
まぁそう言うなって。
なんちゃってプログラマが増えるのは良い事だ。
カレンダー表示させたいのですが、表示部分のプログラムがうまくいきません。
とりあえず、月の開始曜日は0が日曜日・・・6が土曜日になるようにしてます。
土曜日になったら改行するようにしたいんですが、表示がおかしくなります。
アドバイスお願いします。
ソース張れや糞ボケが
タイピングソフトもどきを作っているのですが、
一定時間内に指定された文字を入力させるにはどうすればいいでしょうか。
標準C++では出来ません
>>554 「時間内に指定された文字を入力しろ」って出力したら素直な奴なら従うよ
>>552 #include <stdio.h>
// week : 曜日、 last:月の最終日
void print_calendar(int week, int last){
int i;
puts(" 日 月 火 水 木 金 土");
for(i = 0; i < week; i++) printf(" ");
for(i = 0; i < last; i++){
printf(" %2d", i + 1);
if((i + week) % 7 == 6) putchar('\n');
}
putchar('\n');
}
int main(){
print_calendar(1, 31);
print_calendar(5, 28);
print_calendar(0, 30);
print_calendar(6, 29);
return 0;
}
あるC言語で書かれたプログラムXがあり、これはprintf文で画面に"20"と表示する。
このプログラムXのソースに'/'(スラッシュ)を1文字だけ加えることで
画面に"1"と表示するようになるプログラムXのソースを書きなさい。
>>559 #include <stdio.h>
int main(void)
{
return printf("%d", 1 * 20 /**/);
}
>>559 #include <stdio.h>
int main(void) {
int i = 20;
i = 20;
printf("%d\n",i);
return 0;
}
#include <stdio.h>
int main() {
printf("%d", 2020 - 1 ? 20 : 1);
return 0;
}
C99対応コンパイラ必須
#include <stdio.h>
int main()
{
printf("%d", -20 / 20
+ 21);
return 0;
}
入れ方
-20 / 20
-20 // 20
#include <stdio.h>
int main(void)
{
/*
printf("20");
/*/
printf("1");
//*/
return 0;
}
1 + 19
1 + 1/9
あ、逆じゃん。orz
21 - 1
2/1 - 1
スレタイを拙者にしてくれとか言ってたやつ、まったく書き込まないな
書き込もうにも、知識がありませんから!!残念!!
C言語でテキストファイルから読み込み、読み込んだ内容を全て一行で
出力するプログラムを作りたいのですが、fgetc で読み込んだ後、
出力用に配列に入れようと思ったらうまく行きません。
初歩的で住みませんが、助言して頂けないでしょうか。
別に配列にいれなくても改行文字だけ飛ばしてコピーすれば良いんじゃない?
「もし、enterが押されたら」という分岐はどうすればいいんでしょうか。
ちなみに今は以下の感じで、読んだ内容を配列に入れて p に渡して書き込もうと思ってます。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char str[];
FILE *fp0;
FILE *fp1;
char *p;
int i;
(fopen省略 引数にfp1 fp2 を指定)
for(;;) {
i = fgetc(fp1);
if(i == EOF) break;
}
while(*p){
if(fputc(*p, fp0)==EOF){
printf("ファイル書き込みエラー\n");
exit(1);
}
p++;
}
fclose(fp0);
fclose(fp1);
return 0;
}
改行文字すら知らないアホが居るスレがここですか?
>>573 お前は辞めた方がいい
突っ込みどころが多すぎる
>>571さん即レスありがとうございます。
そんな手があるんですね(^^;
ありがとうございます、方法について調べて来ます!
ただ、それとは別に配列を使用したいんですけど、難しくなるんでしょうか?
良かったらこちらについてもアドバイス頂けないでしょうか。
>>573 #include <stdio.h>
int main(void)
{
FILE *in = fopen("in", "r");
FILE *out = fopen("out", "w");
int i;
while((i = fgetc(in) != EOF) if(i != '\n') fputc(out, i);
return 0;
}
>>575 ss[i]=getch();としてenterを押すまで一文字ずつ取り込んでいきたいんですが
enterの判別にif(ss[i]=='\n)としてもどうもうまくいかないので・・・'
'\n'じゃなくて'\r'でやれ。
すみません、独習Cっていう本みてやってて、例文をいじってるだけです・・・。
このスレッドの主体性をうまく理解してないで書き込んで失礼しました。
>>578さんありがとうございます。
簡潔ですばらしいコードですね、ありがたく参考にさせて頂きます。
それでは出直してきます。。。
>>584 「主体性」を辞書で引く事をお勧めする。
586 :
デフォルトの名無しさん:04/08/01 17:57
#include<stdio.h>
#define N 3
#define M 4
int n=3;
double a[N][M]={{33.0,16.0,72.0,-359.0},{-24.0,-10.0,-57.0,281.0},
{-8.0,-4.0,-17.0,85.0}};
void print_matrix(double x[][M],int n,int m)
{
int i,j;
for(i=0;i<n;i++){
for(j=0;j<m;j++)
printf("%15.8lf",x[i][j]);
printf("\n");
}
printf("\n");
}
void gauss(double x[][M],int n)
{
int i,j,k,l;
double p;
for(k=0;k<n;k++){
p=a[k][k];
for(j=k;j<=n;j++)
a[k][j] /= p;
a[k][k]=1.0;
for(i=k+1;i<n;i++)
for(j=k;j<=n;j++)
a[i][j] -= a[k][j]*a[i][k];
}
??
}
>>585さん
以下 goo辞書より
=================================================================
しゅたい-せい 0 【主体性】
自分の意志・判断によって、みずから責任をもって行動する態度のあること。
「―をもって行動する」
=================================================================
逝っていますわ・・・∧||∧
590 :
デフォルトの名無しさん:04/08/01 17:59
void main()
{
print_matrix(a,3,4);
gauss(a,3);
print_matrix(a,3,4);
}
の、??に処理を追加して、第n+1列に解が求めるがうすのしょうきょ法
のプログラムを完成させよ。 をお願いします。
586=590です
拡大係数行列の第n+1列です。
c++でソースの上半分と下半分をmain.cpp,main2.cpp
のように分割してコンパイルするときに結合する
方法はありますか?
main.cppの一番下で
#include "main2.cpp"
int i[10]の中にそれぞれランダムな数字が入ってるとして、
できるだけ短いコードで数字の小さい順に並べ替える方法を教えて下さい。
すいません。
どなたか
>>378をやっていただけないでしょうか?
よろしくお願いします。
>>596 for(int m=0;m<10;m++)for(int j=0;j<10;j++)if(i[m]<i[j]){i[m]^=i[j];i[j]^=i[m];i[m]^=i[j]}
90字
>596
std::sort(i,i+10);
18字
おっと、
#include<algorithm>
の分を入れ忘れた。
>598
外側のforをfor(int j,m=0;m<10;m++)にすれば内側でint が要らないのでちょっと小さく出来る。
それと、;が}のまえ抜けてる。
>>597 B-Tree 書くのマンドクセ。
そんなのネット上で探せば幾らでも転がっているだろうに・・・
>>598 ;が抜けてますができました。有難うございます。
>>599 すいません。sortは何をincludeすれば使えますか?
cでprintf("%8d",hoge);
ってやると値の入らない場所には空白がはいりますよね?
その空白部分に0を表示させたいんですがなにか書き方ってあるんですか?
%08d
宿題まだないでごじゃるか…
拙者刀を磨いてまっているでごじゃる…
569殿はどうやら深くを知りすぎのようじゃ…
というか拙者自分の宿題で四苦八苦してますからっ切腹ぅ!
Cの宿題なんですが、
文字列nPtrの先頭部分をdouble型に変換する関数double atof(const char *nPtr),
文字列nPtrの先頭部分をint型に変換する関数int atoi(const char *nPtr),
文字列nPtrの先頭部分をdouble型に変換する関数double strtod(const char *nPtr, char **endPtr)
と同様の機能の関数を作ってください。できればなるべくシンプルなのでお願いします。
strtod(atof) は宿題の範囲を超えてると思うんだが
613 :
デフォルトの名無しさん:04/08/02 02:56
@n元n変数連立1次方程式の拡大係数行列に対し、掃き出し法を適用する関数
sweep_out()を定義せよ。
Agaussf()の後半に処理を追加することにより、拡大行列の第n+1列に連立1次方程式の解
が求めるガウスの消去法のプログラムを完成させよ。
C言語でお願いします。
拡大係数行列の保持の仕方とか指定されてないの?
そのB-treeの実装ってのはHDDに格納するとか条件が
付いてるわけ?それともメモリ?(←意味ねぇよなぁ)
メモリ上の作業で良いと思いますが
なぜそれだと意味がないのでしょう?
>>378のとおり,そんな指定はありませんでした。
>>618 B-tree(正確にはその派生したもの)はよくFileSystemに使うからだよ。
621 :
デフォルトの名無しさん:04/08/02 04:18
昨日から悩んでもうすぐ朝です(>_<)。
助けてください。
まずクラスAがあって、
class A
{
public:
A(int n);
};
クラスAをメンバとするクラスBがあります。
class B
{
private:
A array;
public:
B(int n);
};
BのコンストラクターでAを初期化します。
B::B(int n):array(n){}
これはOKなのですが、、、
622 :
デフォルトの名無しさん:04/08/02 04:19
クラスBがクラスAの配列をメンバに持つとき、
class B
{
private:
A array[2];
public:
B(int n);
};
BのコンストラクターでAを初期化できません<m(__)m>
以下はコンパイラーエラーが出ます。
B::B(int n):array[0](n),array[1](n){}
B::B(int n):array(A(n),A(n)){}
助けてください(~o~)
配列を初期化リストで初期化することは出来ません。
つまり、constオブジェクトの配列はキャストでもしない限りメンバに持つべきではありません。
624 :
デフォルトの名無しさん:04/08/02 04:31
↑(~o~)(~o~)(~o~)
できないのですか、、、、、
やはりそろそろC#に移行します。
レスありがとうございます<m(__)m>
初期化リストじゃなくて、コンストラクタ本体で初期化すりゃいいだろ。
> つまり、constオブジェクトの配列はキャストでもしない限りメンバに持つべきではありません。
constならstaticにすりゃいいだろ。
M$厨の自作自演ネタじゃないのか?
他のスレにも同じ事書いてるみたいだし
それにしても無知無能だな
もう少し勉強しろよって感じ
628 :
デフォルトの名無しさん:04/08/02 07:18
超初心者です 僕は今こんなプログラムでつまずいてます
#include<stdio.h>
main()
{
int a,x,y;
x=y=0;
while((a=getchar()) !=EOF){
if(a=='\n')
x++;
y++;
}
printf("%d 行 , %d 字数.\n",x,y);
}
というプログラミングでつまずいてます 何故このプログラムで字数が表示されるのか意味不明です
if(a=='\n')x++;y++;という部分が改行コード認識する度に行がカウントされるのは分かるんですけど
どこで字数が確認出きるんですか 教えて下さいお願いします
>>628 そのプログラムは
#include<stdio.h>
main()
{
int a,x,y;
x=y=0;
while((a=getchar()) !=EOF){
if(a=='\n')x++;
y++;
}
printf("%d 行 , %d 字数.\n",x,y);
}
こう書くべきだね。
while((a=getchar()) !=EOF){
は一文字読み込んでそれを a に格納する。と、
その文字が終了文字でなければループを続ける
if(a=='\n')x++;
a が改行コードだったら x の値を 1 増やす
ここで行数のカウントがなされているのは正しいよ。
y++;
この文は前の if 文のスコープの範囲外ですから。
この文は無条件で 1 増やす。
で、この文は while((a=getchar())!=EOF) の中にあるので、
文字数分呼び出されるので、文字数が確認できます。
これで大丈夫かな?
630 :
デフォルトの名無しさん:04/08/02 08:02
>629さん 理解する事が出来ました。ありがとうございました(゜ー゜)(。_。)ぺこり
>>629 解説ありがとうございます。
ところで、
終了文字の文字コードは何ですか?
終了文字そのものを読み込みたいときはどうすればよいですか?
終了文字なんてものない。
ファイルの終端に達したら、getchar()はEOFという文字コードではない値を返すが。
>>632 あら先を越されちゃいましたね。
>>631 ちょっと難しいかもしれないけど
終了文字の文字コードは存在しません。
文字コードは char 型 1 byte で 0 - 255 までの値だけど
EOF は -1 で char 型が表せる値の範囲外にあります。
そもそも
int getchar(void)
とあるように、getchar 等の char 型を読み込む関数は
EOF も返せるように int 型の返値を持ちます。
だから、
char a;
a=getchar();
だと終了文字を読み込めませんが、
int a;
a=getchar();
だと終了文字を読み込めます。そしてその値は EOF (-1) という形で格納されます。
これで大丈夫?
>>629 while((a=getchar()) !=EOF){
は一文字読み込んでそれを a に格納する。と、
その文字が終了文字でなければループを続ける
終了文字なんてものない。
>>635 DOS系では^z(0x1a、SUB)、UNIX系では^d(0x04、EOT)が終了文字として扱われる。
昔のファイルには^Zが入ってたりした
>>637 おいおい、入力の終端とテキストファイルの終端とを混乱していないか?
>>638 大丈夫、今でもバイナリファイルには山ほど入っている(かも知れない)。
>>637 。。。痛さ倍増だよアンタ。それ以上傷口広げないうちに帰ったほうがいいよ。
端末の制御コード
ということば,何で誰も言わないの?
どこが痛いのかも分からずに帰るわけには行かない
知識がない奴でも教える側に回れる
これが 2ch
>>644 知識がない奴に嘘を教えられてしまったやつはいい迷惑だよな。
それで将来左右されるかも知れないのに。
将来を心配するなら2chなんぞに頼るなよ
将来左右されるような情報をタダで得ようとする方がどうかしてる。
この程度で左右される人生なんて最初からダメなんだよ。
Cについての質問です。
画面出力された文字列を全てクリアーする定義文を御教唆ください。
・・・超初心者で申し訳ないです。
if(int iが、int j[10]のいずれの数字とも一致しない場合)
というのをできるだけ簡潔なコードで書く方法を教えて下さい。
>>651 そんなものはありません。少なくともANSI Cの範囲では。
>>652 int k
for(k = 0;k < 10;k++) if(i == j[i]) break;
if (k == 11) { ... }
>>651 環境書け
>>652 int check(int i, int j[], int n){
while (n-- > 0) if (j[n] == i) return 0;
return 1;
}
if (check(i, j, sizeof(j) / sizeof(j[0]))) puts("hoge");
>652
#include<algorithm>
if(std::find(j,j+10,i)==j+10) hogehoge....
#define CLS() printf("\x1b[2J")
or
#define CLS() system("cls")
残念ながらWinXpのコマンドプロンプトはエスケープシーケンスが正しく動作しない。
分→文くらいちゃんと書け。
・while( c != 'y' && c != 'n' );
おれなら、
C == 'Y'
・if( ans == 'y' && 'Y') { /* これは常に真 、と前に書いた覚えがある。*/
方針
・大文字を小文字に変換して処理
or
・大文字と小文字は別の文字なので両方処理に組み込む
でソースの
> if( ans == 'y' && 'Y'){
は間違いなので
if(ans=='y'||ans=='Y'){
だと思うよ。
ミスって送信してしまった。
・分→文くらいちゃんと書け。
・while( c != 'y' && c != 'n' );
俺なら、!(c == 'Y' || c == 'y' || c == 'N' || c == 'n') こう書く。
・改行文字を読んでるから。
・if( ans == 'y' && 'Y') { /* これは常に真 、と前に書いた覚えがある。*/
>>660 すれ違いだが…
> while( c != 'y' && c != 'n' );
ループの中でcの値を更新しないと無限に回る事になる。
while(c != 'y' && c != 'n' && c != 'N' && c != 'Y') c = getchar();
とすれば良い。
>・YとNを入力したときにもちゃんと回答として判定する方法がわからない(今のままだと小文字のみ判定)
> if( ans == 'y' && 'Y'){
この文の表す条件は、「ansが'y'であり、'Y'が真」で、「'Y'が真」は常に成り立つから(文字は全て真)、意図したように動かない。
if(ans == 'y' || ans == 'Y'){
とすれば良い。
失礼。前半は無し。
ごめん。全部無し。
厨くさい回答だな
あえて本人が気づいたことをつっこむ最悪人間が来ましたよ
> while(c != 'y' && c != 'n' && c != 'N' && c != 'Y') c = getchar();
do { } while( 〜 );
> > if( ans == 'y' && 'Y'){
> この文の表す条件は、「ansが'y'であり、'Y'が真」で、「'Y'が真」は常に成り立つから(文字は全て真)、意図したように動かない。
> if(ans == 'y' || ans == 'Y'){
'Y''は意味が無いだけで悪影響は及ぼさない。
>>594 エラーになってうまくいかないようです。
適当にソース分断の例
main(void)
{int a,b;
a = 0;
-----------ここでソース分割---------------
b = 1;
}
関数呼び出しはソースを別にしても問題ないですが、
適当にソース分断してコンパイル時に結合することは
できないのかなあ?
単純に結合するわけじゃないから・・・・
671 :
デフォルトの名無しさん:04/08/02 22:34
次の様なファイルから、単位ごとに分けて数値を変数に格納しなければになりました。
--data.txt--
32cm 1.5mm 80m
これをC標準関数と、C++のSTL、両方で作っていかなければでして、
C標準関数の方はfopenやstrrchr、atoiなどを使って、馬鹿な俺にも力技で出来ました。
ところがSTLの方はさっぱり分かりません。fstreamを使ったところで固まってます。
どうか斬り捨てて頂けないでしょうか。
>>669 main.c
int main(void)
{
#include "another.c"
return 0;
}
another.c
int a,b;
a = 0;
b = 1;
foot.c
--------------------------
b = 1;
}
--------------------------
head.c
--------------------------
main(void)
{int a,b;
a = 0;
#include "foot.c"
--------------------------
回答が無いと言うことは、結構難しいのかな(´・ω・`)
時間になってしまったので質問を撤回します。スレ汚し失礼。
>>671 >単位ごとに分けて数値を変数に格納しなければ
が説明不足なので誰も手をつけないのではないかと。
ん?cmならこの変数に、みたいな話でしょ
誰も手を付けないのは、パーサーをSTLだけで書くと面倒だからじゃない?
こんな宿題出すなと言ってやれw
まぁ、そんなに難しくないけど
678 :
デフォルトの名無しさん:04/08/03 07:50
こんな場面でSTL使うことに意味があるとは思えない。
>>678 たった一つの変数の為にポインタ使う宿題だってあるじゃん
#include <stdio.h>
#include <string.h>
int btoi(char[],int);
char *itob(int);
void main(int argc, char *argv[]) {
int s,temp;
s = btoi(argv[1], strlen(argv[1])) + btoi(argv[2], strlen(argv[2]));
printf("%s",itob);
}
つづく・・・
「この場面でSTLを使うことに意味がある」んじゃなくて
単純に「STLを使うことに意味がある」んだよ。
STL使わせたいだけだから問題はどうでも良いんだよ。
コンテナやアルゴリズムは使ってるけど、ストリーム系はキモくて使わないから…
と言い訳
Cについての質問です。
「キーボードから1つの自然数を入力し、1からその数までの3で割ると
1余る数の和を求めよ。」
という問題です。
どなたかよろしくおねがいします。
>>685 #include <stdio.h>
void main( void )
{
int i, n, sum = 0;
scanf( "%d", &n );
for( i = 1; i <= n; i += 3 ) sum += i;
printf( "%d", sum );
}
int main()
{
int n = 0, i, c;
for(;;){
printf("Input number > ");
scanf("%d", &n); /* fgets + atoi(strtol)を使ってもok */
if(n <= 0){
puts("自然数を入力して下さい。");
continue;
}
c = 0;
for(i = 1; i <= n; i++)
if(i % 3 == 1) c++;
printf("Count > %d\n", c);
}
return 0;
}
注意点
※行頭の全角スペースを半角スペースかタブに変えておくこと(重要)
※文字を入力しないこと
個数じゃなく和だと思うの…
最近痛い香具師が出没しているが、ひょっとして同一人物?
仕様にないものを勝手に付け足してバグ増やしてりゃ世話ないわな
int btoi(char x[],int a) {
int i = 0;
int s = 0;
while (x[i] != '\0') {
if (x[i] == '1') {
s = s + ( 1 << (a - 1));
}
i ++;
a --;
}
return(s);
}
char *itob(int sum) {
int cnt=0,i=0;
char z[99];
while (sum >> cnt > 0) {
z[i] = '0' + sum >> cnt & 0x1;
i ++;
cnt --;
}
return(z);
}
コマンドラインから2進数を2つ入力して
加算結果を文字列に変換したのち、出力するプログラムです
文字列に変換するところと文字列のリターン方法がわかりません
教えてください
atoi itoaなどの関数は使用不可です
おながいします
もろくそ環境依存なんですが
char *itob(int sum) {
// ...
char z[99];
// ...
return(z);
}
zのポインタ返しちゃダメじゃん。。。
>>686 ありがとうございました。
>>687 688さんが指摘されたとおりなので。問題文がわかりにくくてすいませんでした。
int btoi(char* str) {
unsigned int value;
value = 0;
while (*str)
value = value * 2 + (*str++ == '1' ? 1 : 0);
return value;
}
char* itob(int i, char* str) {
char* ptr;
unsigned int value;
ptr = str;
value = i;
while (value) {
++ptr;
value /= 2;
}
*ptr = '\0';
value = i;
while (value) {
*--ptr = value % 2 ? '1' : '0';
value /= 2;
}
return str;
}
int main(int argc, char *argv[]) {
char buff[sizeof(int) * 8 + 1];
int sum;
if (argc < 3) return -1;
sum = btoi(argv[1]) + btoi(argv[2]);
printf("%s\n", itob(sum, buff));
return 0;
}
unsigned int btoi(char *p){
unsigned int n = 0;
for(;*p == '0' || *p == '1'; p++) n = (n << 1) + (*p - '0');
return n;
}
void itob(unsigned int s, char *p){
unsigned int m;
if(s == 0){*p = '0', *(p + 1) = '\0'; return;}
for(m = 1; m < s; m <<= 1);
if(!(m & s)) m >>= 1;
for(; m; m >>= 1, p++){*p = s & m ? '1' : '0';}
*p = '\0';
}
// Need #include <limits.h>
const int int_bits = CHAR_BIT * sizeof(unsigned int);
char *itob(unsigned int n, char *s)
{
int i;
char *ts = s;
for(i = int_bits-1; i > 0 && (n >> i & 1) == 0; i--);
for(; i >= 0; i--, s++)
*s = '0' + (n >> i & 1);
*s = '\0';
return ts;
}
・・・・・厨くせえソースだな。吊ってくる。
ああ、CHAR_BITだ
なんか定数あった筈と思いながら、思い出せなかった
ありがとうございます
文字列をリターンするときは
ex)
char str[5] = {"abcd"};
return(str);
はだめですか?
char *str
strに文字列代入処理;;
return(str);
はOK?
ポインタとstaticを理解してください
この例ではchar str[]は関数内のローカル変数。
関数を抜けた時点でスコープから外れ、その内容は保証されない。
まずはアセンブラを学ぶことをお勧めする
低水準厨うぜぇ
コンパイルしろ
お前は今超能力でここに書いてるのか?
>>713 全部リンクしないと駄目なんでしょうか?
これだけで実行できると教授は言っているんですが一度やったら実行できなかったのです....
>>714 void mainの時点でその教授は信用しないでいいぞ。
mymacro.hは何処やー
mainがコメントアウトされてるのは何でやー
>>715 信用しては駄目ですか....
>>716 そこで止まります....そしたらプログラム読みなさいと言われたので・゚・(つД`)・゚・
無能すぎ
710も、教授も
> /* でも本当は、グローバル変数を多用する事は、あまり */
> /* おすすめできません。(なぜでしょう?) . */
ま た こ の 講 師 か !
そろそろ学校名晒しがあってもいいほど頻出な悪寒
グローバル変数だらけのプログラムの保守だけはしたくない罠
COBOLの保守なら喜んでやる
(´・ω・`)
>>723 ねーねー、君がソースを貼ったスレの275を見てごらんよ
ひでぶっ!
それじゃただの荒らしじゃん
申し訳ない
>>710 ********** Showing input graph!! (Adjacency-List) **********
# of nodes = 6 # of edges = 7 (Edge density = 46 percent)
Node 1 --------------------
degree = 2 (2,1)(4,1)
Node 2 --------------------
degree = 3 (1,1)(3,1)(4,1)
Node 3 --------------------
degree = 2 (2,1)(6,1)
Node 4 --------------------
degree = 3 (1,1)(2,1)(6,1)
Node 5 --------------------
degree = 1 (6,1)
Node 6 --------------------
degree = 3 (3,1)(4,1)(5,1)
Tabの代わりに半角スペース4こを使った。
>>710 そのソースを見て判る事は「コメントは簡潔かつ分かりやすく」という事だ。
>>729 ありがとうございました。皆様、ご迷惑おおかけいたしました。
Cの宿題なのですが@の部分で"clients.dat"の部分を任意のファイル名にできるようにプログラムを作り変えてください。
#include<stdio.h>
main()
{
int account;
char name[30];
float balance;
FILE *cfPtr;
if ((cfPtr = fopen("clients.dat","w")) == NULL) <===@
printf("ファイルをオープンできません\n");
else {
printf("口座番号、名前、取引残高を入力してください\n");
printf("(EOFを入力すると終了)\n");
printf("? ");
scanf("%d%s%f",&account, name, &balance);
while (!feof(stdin)) {
fprintf(cfPtr, "%d %s %.2f\n",
account, name, balance);
printf("? ");
scanf("%d%s%f2", &account, name, &balance);
}
fclose(cfPtr);
}
return 0;
}
構造体の配列(メンバは口座番号、名前、取引残高とすること)にファイルのデータを全て読み込むように作り変えてください。
読み込んだデータを、取引残高の多い順に並び替えて表示するようにしてください。
#include<stdio.h>
int main()
{
int account;
char name[30];
double balance;
FILE *cfPtr;
if ((cfPtr = fopen("clients.dat", "r")) == NULL)
printf("ファイルをオープンできません\n");
else {
printf("%-12s%-14s%s\n", "口座番号","名前","取引残高");
fscanf(cfPtr, "%d%s%f", &account, name, &balance);
while (!feof(cfPtr)) {
printf("%-12d%-14s%8.2f\n", account, name, balance);
fscanf(cfPtr,"%d%s%f", &account, name, &balance);
}
fclose(cfPtr);
}
return 0;
}
735 :
デフォルトの名無しさん:04/08/04 07:48
一行目に追加→ extern char *filename;
@→if ((cfPtr = fopen(filename,"w")) == NULL)
char szFilename[260];
fgets(szFilename, sizeof(szFileName), stdin); /* scanf("%s", szFileName); じゃないとバレる? */
if((cfPtr = fopen ...
うわ、ハンガリアンや!
MS の DirectX のコード見ても全員ハンガリアンだし
最近になって,ハンガリアンが一人混じったよな
いち、にぃ、ハンガリアン♪
ハンガリアン てなんですか?
入門書読み返せ!
>>743 strlen は 0 返すだろ?
意味分かって使ってんのか?
string はローカル変数だろ?
その値変えたって何にもならねーよ。
変わるのは main の name の方
ポインタ勉強してこい
>>743 あ,ごめ〜ん,スレ間違えた。
逝ってくる…
>-1文字以内で入力してください
長さ0の文字列をstrlenしてから-1してるんだから、そりゃそうだろう
>姓と名が同じになってしまいます
b_ptrが指す内容は変わっているが、b_ptrの値は変わっていないから
#include<stdio.h>
char* sprit(char *);
void input(char *, size_t);
int main() {
char name[40]={'\0'};
char *a_ptr,*b_ptr;
input(name, sizeof(name));
a_ptr=name;
b_ptr=sprit(name);
printf("姓は:%sです\n",a_ptr);
printf("名は:%sです\n",b_ptr);
return 0;
}
char* sprit(char *string) {
while(*string!='/'&& *string!='\0')
string++;
if(*string=='/'){
*string ='\0';
string++;
}
return string;
}
void input(char *name, size_t len) {
printf("ローマ字で氏名を%d文字以内で入力してください", len);
printf("ただし、姓と名の間に/を入力してください:");
fgets(name, len, stdin); /* scanf("%s",name); */
}
あ、ごめん
×printf("ローマ字で氏名を%d文字以内で入力してください", len);
○printf("ローマ字で氏名を%d文字以内で入力してください", len - 1);
うう、なんか他にも色々ミスってる悪寒…
strchr使えよ
おいお前!おれの名をいってみろ!!
関数名のあとスペース空けろよ
753 :
(つД`)タスケテクダサイ:04/08/04 11:07
スレ違い
つか、「プログラムの説明」なんて曖昧に過ぎて答えられない
>>753 プログラムの説明↓
>出力結果としては3+4*2と入力すると=11とでるようになってます。
757 :
(つД`)タスケテクダサイ:04/08/04 12:42
説明は多分一つ一つの命令の説明だと思います。自分では作ってないんで
大体でいいのでだれか暇な方お願いしますm(__)m
アルゴリズムってゆーのもよくわからないです(つД`)
作ったやつに「コメントつけろバカ」って言ってやれ
つまり回答丸コピがバレたんで説明してみろと言われて
それすらも丸投げしていると(w
main:
数字、. 、演算子が入力されたら、
配列 caExpression にそれらの文字を蓄積していく。
蓄積された文字列の長さは ucLength が表す。
0x0d は enter。これか = が来たら計算を始める。
ucLength を 0 にして、もう蓄積されていないことにする。
0x1b は esc。これが入力されたら計算せずにループを抜けて、
"Hit any key.\n" を表示して一文字入力を待って終了。
myMath : 数式を解析して数値に変換して返す関数。
//+,-
文字列を、最初に見つかった + または - の右側と左側に分解し、
それぞれを再帰的に解析し、その結果を + もしくは - で計算して返す。
ただし、*, / の直後のものは数値の符号として扱われる。
//*, /
同様に、左右に分解して解析し、2者の結果を * もしくは / する。
なぜ +, - が先かと言えば、
これら演算子が一番最後に計算されるから
(再帰だから、ずんずん分解していった一番奥が先に計算される)
二つの while を通じて return されなかったということは、
残りは数字と . のみである。
とりあえず数字はどんどん積み重ねる。たとえば 3, 2, 4, ., 2, 5 ときたら、
3 → 32 → 324 → 3242 → 32425 と数を作っていく。これは dAns に格納される。
この過程で . が見つかっているが、見つかって以後何桁きたかを cDecimal に記憶する。
最後に小数点以下の桁数の数だけ、dAns を 10 で割り、値を返す。
きちんとした理解は、もう紙に書いて実践してみるっきゃないな。
764 :
(つД`)タスケテクダサイ:04/08/04 17:52
>760
ありがとう(つД`)タスカリマスタ
でもクズっていうことないじゃん(´・ω・`)ショボーン
クズって言うか無能なだけ
チリもつもれば山となる
クズもあつまれば再利用できるかもしれん
だが764は無駄飯を食らうだけだ
そうだな、みんな最初はクズだったんだ、とか
プログラムソースは、
制作者にはソースそのものがコメント文のように働き、
他人にはソースがマシン語のごとく見える。
non
プログラムソースは、
制作者にはソースそのものがコメント文のように働き、
他人にはコメントがマシン語のごとく見える。
「コメントを書くぐらいなら関数名と変数名に気を遣え。」
そういう時はローマ字で命名するといいですよ(* ^ー゚)ノ
>>774 わざわざすまないな
貴様のレス見て荒らしに変貌したくなってきた
>>775 自分がまだ荒らしじゃないと思ってるあたりが笑える
>>776 そりゃそうだ
漏れがここに書き込んだの772で3回目だし
>変貌したくなってきた
なんていってる時点でもう素質十分でっせ
おみゃーはじゃヴぁをつかっとれ
>>771 俺、関数名と変数名つけるの苦手だわ。。。
あ、なんだ俺が「名前に日本語が使えない」って書いたから、ひm(ry が出てきたのか
あれは「英語で名前付けるのが苦手」って意味にとってくれ
マジで一瞬馬鹿にされたんかと思った(っていったら作者に失礼か)
自分でも混乱していたらしいマジすまなかった
んじゃROMに戻るよ
願わくば、二度と現れんことを。
現れんこと?
「"現わ" 連呼!」と?
現わレインコート?
びっくりするほど現わ連呼!
びっくりするほど現わ連呼!
神のご加護のあらんことを
あの使い方だったら「願わくば、二度と現れざらんことを」とすべきだな。
ここは日本語を勉強するスレではありません。
特撮ヲタだったら「あれが最後の772とは思えない。第二、第三の〜」とすべきだな。
似たようなものだ。
質問の仕方を教えるスレだしな。
Cで日本語を弁巨うしろという宿題がでまちた。おねがいそます。
>>761 それは,リンクに失敗したということですか?
それはそういう仕様だから大丈夫。
何も心配することはありません。
課題の条件は満たしているので,自信を持って提出してください。
namingセンスがそいつのレベルの80%を語る。
名前は命。
798 :
デフォルトの名無しさん:04/08/04 22:26
799 :
デフォルトの名無しさん:04/08/04 22:30
C++のクラスで、
class _2ch
{
int val;
int* pval;
public:
_2ch(int i){val=i;pval=&val;};
}
このクラスで、時々pvalと*valが違う値を示すのですがヽ(`Д´)ノ
800 :
デフォルトの名無しさん:04/08/04 22:33
>>799 そら、コンストラクト時には違う値だろう。
つか、pvalと*valは常に違うな。釣り?
クマキボン
typo?
>このクラスで、時々pvalと*valが違う値を示すのですがヽ(`Д´)ノ
このクラスで、時々pvalと&valが違う値を示すのですがヽ(`Д´)ノ
803 :
デフォルトの名無しさん:04/08/04 22:38
ミスです!釣ってません!!
pvalと&valが違う値になります
804 :
デフォルトの名無しさん:04/08/04 22:49
>>803 だからそれも常にだって。たまになわけがない。釣り?
クマキボン
805 :
デフォルトの名無しさん:04/08/04 22:51
ちょっと待て、釣ってない!!絶対違う!!!
確認してくる!!
身体測定のデータ処理を行いたい。番号(2桁の整数)と身長、体重、性別のデータを持つ構造体を作り20人分のデータを扱えるようにしてください。
・入力されたデータから身長と体重の最大、最小値と平均値を性別ごとに求めるプログラムを作ってください。
・番号を入力することで、その人の身長、体重、性別の各データを表示できるようにしてください。
この時、次の式を使って、標準体重からの差も表示しなさい。
標準体重 = (身長-100)x0.9
身長は150cmから180ab
体重は45`cから90`c
の範囲で生成せきるようにしてください。
性別は男性:0,女性:1としてください。
データは以下の構造体を用いてください。
struct person{
int number;
int height;
int weight;
int sex;
}
int main()
{
struct person data[20];
return 0;
}
807 :
デフォルトの名無しさん:04/08/04 22:55
>>805 そんな確認のしようがないもの春な。
きちんと現象が出る状態のソースを腫れ、このバカ。
808 :
デフォルトの名無しさん:04/08/04 22:59
キタ━(゚∀゚)━キタ━
やっぱり値が違う!!!!!
800〜804は逝ってよし
以下にソースを↓
死んでくれ
810 :
デフォルトの名無しさん:04/08/04 23:01
//前半
#include <iostream>
using namespace std;
class _2ch
{
int val;
int* pval;
public:
_2ch(int i){val=i;pval=&val;};
int* GetAddressOfVal(){return &val;};
int* GetPval(){return pval;};
_2ch copy(){
_2ch c(val);
return c;
};
_2ch& operator=(_2ch& c){
cout<<c.GetAddressOfVal()<<endl;
cout<<c.GetPval()<<endl;
val=c.val;
pval=&val;
return *this;
};
};
811 :
デフォルトの名無しさん:04/08/04 23:02
//後半
int main()
{
_2ch c0(0);
_2ch c1(0);
c0=c1.copy();
return 0;
}
812 :
デフォルトの名無しさん:04/08/04 23:04
これを実行すると違うアドレスが表示されます!!!!!
キタ━(゚∀゚)━キタ━
>>810 >int* GetAddressOfVal(){return &val;};
何これ?
お前って池沼?
はー、最近では小学生でもC++書けるのかぁ。
何この糞設計?
816 :
デフォルトの名無しさん:04/08/04 23:13
(`Д´)ウワーン
正直自身あったのに、、、、
正直、どういう動作を想定していて、
どう違うと言っているのかすら分からん。
順を追ってネタを説明してみろ。
818 :
デフォルトの名無しさん:04/08/04 23:22
(`Д´)ウワーン
c0=c1.copy()は、
1)c1.copy()
2)c0=
の順に実行されます。
問題は2)で
2ch& operator=(_2ch& c)の引数cのpvalと&valが違う値になります(`Д´)ウワーン
おまいはC++以外の言語に移行した方がいいんじゃね?
820 :
デフォルトの名無しさん:04/08/05 01:18
すれちがーいさよーならー
>>820 Cの人間はBASICと数学解らんから他スレ行っとけ
824 :
デフォルトの名無しさん:04/08/05 01:57
825 :
デフォルトの名無しさん:04/08/05 02:05
Nが2未満のときのエラー処理がないので
こんなプログラム書いたヤシは落第です。
そのとき、この点は膣番目に表示される。
どのスレで聞こうか悩んだんですが、やはりスレ違いでしたか。
>>825 先生が書いたんですが・・・
828 :
デフォルトの名無しさん:04/08/05 02:51
>>818 コピーコンストラクタが無いからだよ。
_2ch(const _2ch &c)を追加しる。
829 :
デフォルトの名無しさん:04/08/05 02:56
>>827 じゃあ先生に注意してください
Nに文字入れたときもエラーでるよ
>>829 だから数字も文字なんだってば。
>>820 Basicでプログラム書いて実行してみればいいだろ。
或いはこのスレ的にはだれかCに移植するかもしれないけど。
#単純すぎるから私はやらない。
##って書くと、できないからだとか言われそうだが。
>>820 (1)
3
(2)
1) 1 1
2) 1 2
3) 2 1
(3)
10) 4 1
20) 5 2
27) 6 2
(4)
7
19
センター試験受ける気ならこの程度の問題自分で解け。まぁ、その気はないんだろうけど・・・。
あと、こんなの板違いで聞かないように。(特に数学板。)はずかしい。
>>830 #include <stdio.h>
#define $A$ /* (1) */
int main()
{
int n, s = 0, k, x, y;
printf("n="), scanf("%d", &n); /* INPUT "n=";N */
s = 0; /* S = 0 */
for(k = 2; k <= n; k++){ /* FOR K=2 TO N */
for(x = 1; x <= $A$; x++){ /* FOR X=1 TO [ア] */
y = k - x, s++; /* Y = K - X : S = S + 1; */
printf("%d) %d %d\n", s, x, y); /* PRINT S;") ";X;Y */
} /* NEXT X */
} /* NEXT K */
return 0; /* END */
}
BASIC知らないからミスがあるかもしれない
1)1つの文字列と1つの文字を入力し、文字列中にその文字が何回含まれているのかを調べるプログラムを作成してください。
2)また、このプログラムを改良して文字列中の何文字目に指定された文字が含まれているのかを答えるプログラムを作成してください。
3)入力された文字列中の文字を逆順に複写し、出力するプログラムを作成してください。
>>833 #include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int
main()
{
char c;
string s;
cout << "文字列 : ";
getline( cin, s );
cout << "文字 : ";
cin >> c;
// (1)
cout << count( s.begin(), s.end(), c ) << "個" << endl;
// (2)
string::iterator i;
for( i = s.begin(); i != s.end(); ++ i )
if( c == *i ) cout << distance( s.begin(), i ) + 1 << "番目" << endl;
// (3)
reverse( s.begin(), s.end() );
cout << s << endl;
return 0;
}
>810-812
gcc 3.4.0 で試してみた。
なるほど、このコードだと copy() から _2ch を返す時に
「見えないインスタンス」を別に作っているようだね。
コピーコンストラクタを書いていないから、デフォルトのコピーコンストラクタにより
pval がその値のままコピーされている。
だから operator = () の中の c の pval と &val は違う値になるんだ。
# この時,*(c.pval) をいじるのは危険だろうね。おそらく前のインスタンスは
# 破棄されているはずだ。つっても、ここで pval は const int * 型のはずだけど。
>828 の言う通りコピーコンストラクタを明示的に書いておくと、
今度は「見えないインスタンス」を生成せず、copy() の中で作った c を
そのまま返してくるのな (;´Д`)
コピーコンストラクタを書いたはずなのに呼び出されないから、焦った。
コピーコンストラクタの呼び出しを省略するのは C++ の仕様の範疇だ (ったと思う)。
次に、コピーコンストラクタを書かず、代わりにデストラクタを書いてみた。
すると、copy() の中の c をそのまま返してきた (;´Д`)
前段落のように、コピーコンストラクタを明示的に書いておいた時のようにね。
これも C++ の仕様だったっけ?
コピーコンストラクタなければ、ただのビットコピーだろ
Cの問題です。
整数nを入力し、n個の乱数を発生して、大きさの昇順のリンク付きリストにせよ
またそのリストの内容を降順に出力せよ。
>>836 >copy() から _2ch を返す時に
>「見えないインスタンス」を別に作っているようだね。
そんな当然のことを,何わざわざ語ってるんだ?
返り値が値渡しなんだから当然だろ。
>copy() の中で作った c を そのまま返してくるのな
これ,考え方が逆。
最適化のスイッチが入って,返り値用に確保してある領域(=_2chのインスタンス)を
そのまま内部変数cとして使うようになっただけ。
バカの相手はほどほどに
841 :
デフォルトの名無しさん:04/08/05 14:45
実数xと正の整数nを受け取りx^n(xのn乗)を計算して返す関数を作成せよ
ただし、main関数では適当なデータをキー入力し、関数を呼び出した後は、x^nの値を出力せよ
このプログラミングをC言語で作成していただけたら助かります。
さらに以下のような感じに仕上げてもらえたら、さらに助かります
#include<stdio.h>
float func(float *a, float *b, float *x){
*x = -(*b)/(*a);
return 0;
}
float main(void)
{
float a=-10,b=1,kai;
func(&a, &b, &kai);
printf("a = %f\n", a);
printf("b = %f\n", b);
printf("kai = %f\n", kai);
return 0;
}
floatが32バイトでPODへのポインタが4バイトでconstが無い処理系だったらどうしてくれる
#include<stdio.h>
float func(const float a, const int b){
float x = 1.0;
int i;
for (i = 0; i < b; i++) x *= a;
return x;
}
float main(void)
{
float a = -10.0, kai;
int b = 2
kai = func(a, b);
printf("a = %f\n", a);
printf("b = %d\n", b);
printf("kai = %f\n", kai);
return 0;
}
constが無い処理系はこのスレ野対象外。
const float a, const int b
ワロタ
そもそもfloatってdouble使えない環境以外では使わないだろ
848 :
デフォルトの名無しさん:04/08/05 15:46
そもそもfloatってdouble使えない環境以外では使わないだろ
そもそもfloatってdouble使えない環境以外では使わないだろ
そもそもfloatってdouble使えない環境以外では使わないだろ
そもそもfloatってdouble使えない環境以外では使わないだろ
そもそもfloatってdouble使えない環境以外では使わないだろ
そもそもfloatってdouble使えない環境以外では使わないだろ
そもそもfloatってdouble使えない環境以外では使わないだろ
そもそもfloatってdouble使えない環境以外では使わないだろ
3Dの分野では使いまくっとるが・・・・。float。
852 :
デフォルトの名無しさん:04/08/05 16:20
☆ チン
☆ チン 〃 ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ヽ ___\(\・∀・)< 宿題マダー?
\_/⊂ ⊂_)_ \____________
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄/|
|  ̄  ̄ ̄ ̄ ̄ ̄ ̄:| |
| 淡路たまねぎ .|/
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
FPU内部ではすべてdoubleで計算してて
floatはdoubleからの変換の手間がかかるから遅いって聞いた
あれ?64bitじゃなくて80bitだっけ?
>>853 一回インテルのマニュアルでも読んできたら?
>FPU内部ではすべてdoubleで計算してて
凄まじいアフォだな
他力本願で悪いが誰か俺に正しい知識を与えてくれ!
正しい知識って、そんなハード寄りな話は
環境を特定しないと答えようがないだろ
じゃあIntel系で
scanfとprintfっていうコマンドを使って、プログラム作れって
いわれたんだけど、意味わかんない。誰か助けて。UNIXでやってます。
>>860 #include <stdio.h>
int compare(int (*p)(const char *, ...), int (*q)(const char *, ...))
{
return p == q;
}
int main(void)
{
return compare(printf, scanf);
}
scanfとprintfっていうラインエディタがあるとですか?
#include <stdio.h>
int main()
{
char szStr[256];
printf("文字列を入れろや、ボケ教授が!!\n");
scanf("%s", szStr);
printf("お前が入力したのは、「%s」だ。馬鹿野郎。\n", szStr);
return 0;
}
>>860 $ scanf
zsh: command not found: scanf
a:\>scanf
I am scanf.
メモリアロケートエラー
command.comが停止しました
>>860 #include <stdio.h>
void main( void ){ scanf( "" ); printf( "" ); }
void main キター
voiid 厨キター
voiid 厨厨キター
そろそろやめないか?
voiid
voin
875 :
デフォルトの名無しさん:04/08/05 19:24
799ですヽ(`Д´)ノ
>>828,836,839
分かりました!!!!!
ありがとうございますm(__)m
ってか,俺もc++には自信があったんだが(-_-;)(-_-;)
>俺もc++には自信があったんだが
悪いのは頭だけではないようですね
877 :
デフォルトの名無しさん:04/08/05 19:34
>>876 いや,ネタではなく俺は間違いなくできるほうだ!!
周りはクラスすら理解していない厨房ばかり
他の人がどうであれ、ヌヒが低レベルという事に変わりはないわけだが。
>>877 まるで自分がクラスを理解出来ているかのような言い方ですね
お前も理解出来てないだろ。
出来てると勘違いしてる輩は、問題点を別の個所に求めるから余計にタチが悪い。
OS・コンパイラ・ライブラリのバグだ!とかな。
おやまあ、小山田だ
二分サーチの短所ってなんですか?
>>882 まず探索に O(logN)かかること
例えばハッシュならば O(1) で検索が実行できる。
次に表を昇順にソートしておく必要があるため、
要素を頻繁に挿入・削除される場合、再ソートのオーバーヘッドが大きくなること。
ちなみに、後者についてはデータ構造によってある程度回避することは可能。
>>885 色々なサーチやソートの方法があるのはそれぞれ一長一短があるから。
式 x+y に代入するデータを(x,y)=(2,0),(10,9),(12,4) とする。
この計算結果を表示するプログラムを作成せよ。
ただし、filename.exe -tekitou の様に、それぞれの(x,y)の値における
計算結果を返すようにコマンドラインで引数を任意に指定せよ。
>>887 いまいち入力フォーマットがわからんがコレで良い?
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
if (argc < 3) return 1;
printf("%d + %d = %d\n", atol(argv[1]), atol(argv[2]), atol(argv[1]) + atol(argv[2]));
return 0;
}
889 :
デフォルトの名無しさん:04/08/06 09:32
☆ チン
☆ チン 〃 ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ヽ ___\(\・∀・)< 宿題マダー?
\_/⊂ ⊂_)_ \____________
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄/|
|  ̄  ̄ ̄ ̄ ̄ ̄ ̄:| |
| 淡路たまねぎ .|/
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
890 :
デフォルトの名無しさん:04/08/06 09:57
>>887 // filename [0..2]
#include <stdio.h>
int main(int argc,char* argv[])
{
&sp;struct{
&sp;&sp;int x,y;
&sp;}tbl[3]={{2,0},{10,9},{12,4}};
&sp;unsigned int c=argv[1][0]-'0';
&sp;if(c<3)printf("%d",tbl[c].x+tbl[c].y);
&sp;return 0;
}
s/&sp;/ /
文字列を文字型ポインタで初期化するって具体的にはどんなカンジになるんでしょうか?
膣内ぬるぽするようなカンジです
[m]<- char* chinpo
[a]
[n]
[k]
[o]
[\0]
>>893 PCTSTR pszHoge = TEXT("HOGE");
まだちん
chinpoという名前だが、実態はmankoというオチか?
ちんぽがまんこをさすんでね?
900 :
デフォルトの名無しさん:04/08/06 19:56
(読み込むファイル形式:input.txt)
576 名前: 名無しさん 投稿日: 04/08/06 19:40 ID:aospsRua
ごにょごにょ
577 名前: 名無しさん 投稿日: 04/08/06 19:41 ID:1Y+s4rjs
ごにょごにょごにょにょ
↑のような形式のファイル input.txt があります。
これを読み込み【ID:】以下の文字列(8文字)を読み込み、
同じIDがあればその重複回数をカウントして重複数の多い順に
output.txt に出力するプログラムを作成してくだせ。
出力する際は、そのIDが全体のレス数のうちどのくらい占めているかをあらわす%も付け加えて出力。
入力に関しては読み込むファイル名をコマンドラインで指定するだけというのがうれしいです。
outputの形式は以下参照
(出力ファイル形式:output.txt)
ID NUM %
aospsRua 10 15.3%
1Y+s4rjs 2 3.2%
ああーちと出力ファイル形式のテンプレがずれたので書き直し
(出力ファイル形式:output.txt)
ID(tab)NUM(tab)%
aospsRua(tab)10(tab)15.3%
1Y+s4rjs(tab)2(tab)3.2%
うえのように(tab)をTAB(4文字スペース?)であけてください。
みにくくてスマンです。
それはPerlの仕事。他行ってね
あきらかに宿題ではないよね
>882 要素がソートされていないと探索できない。以上。
907 :
デフォルトの名無しさん:04/08/07 16:59
スレ違い感漂いまくりですが
『プロセス間通信及びマルチスレッドプログラミングにはどのような物があるか調査し、
簡単なプログラムを作成する』
って課題出たんですけど、何作ればいいと思いますか?
やり方は2つともわかるけど、具体例が思いつかなくてOTL
いわゆる複数クライアントからの接続要求に対してマルチスレッドで相手するWebサーバーみたいなものでよかろ?
OS
>>908>>909 ちなみに科目はOS、概念だけしかやってないから、あまり高度な事は期待していないと思う
ローカル上で真似事をするようなのは構わないかも知れないけど、
実際に接続できるような物作ろうとすると、こっちも時間足りないし
>>910 ローカルでやる、実際に接続、どちらも同じ。
喪前、理解度低すぎで不合格。
>>911 ローカルでやるっつったのは、ソケットその他一切使わない真似事って事
単にスレッドとかが動けばいいの
アプリ作れっていうんじゃないなら、一通りのデモでも作ればよかろ。
やり方がわかるなら、そのやり方をプログラムにするだけだ。
経過の表示をグラフィカルに表現すれば、そこそこのヴァリュームで見栄えもよいだろな。
愚痴スレですか?
>>907 >具体例が思いつかなくて
具体例を調査してレポート作成するのも宿題じゃないのか?
telnetdでも作れば?
>>915 いや、スレッドとかプロセス間通信なんて、技巧の1つでしかないから、具体例いっぱいありすぎて
逆にスレッドがメインであるようなのは…………正直サーバ・クライアント系だけど、
それ前の課題で似たようなの出てたのよ
その辺りもうちょっと突き詰めれば、そっちは可能かもしれないけど……云々
多分俺の理想が高すぎるだけ
楽しようとしなければ、全然平気(?)
ついでに言うと、ネットワーク系まだやってない_| ̄|○
win 系なら幾らでもつなげられるけど、unix 系だから、やった事なくて
>>912 それでプロセス間通信てのはどーやってやんだ?
それで理想が高すぎるって…噴飯ものw
もの凄い勢いで戦う将棋でも作ったらどうよ
とにかく歩を一つ確保して二歩する将棋なら作れるが
つか、やればできるみたいな事言いながら出来ない愚痴を聞かされてもな。
924 :
デフォルトの名無しさん:04/08/08 01:01
#include <stdio.h>
int main (void){
int x[10]={1,2,3,4,5,6,7,8,9,10};
int *y,i;
y=x+2;
for(i=0;i<10;i++){
printf("x[%d]=%d\n",i,*y);
y++;
}
return (0);
}
このプログラムでx[0]のアドレスを(y=x)の時は問題ないのですがx[2]のアドレス(y=2)を出力
しようとするとx[0]=3から出力されるのですが、x[8],x[9]あたりで変な値が出て困ってます。
int x[10]の最後の値 10で止まるようなプログラムの場合はどうしたらよいのでしょうか?
どなた様かお力を貸してください。
スレ違い
ポインタが理解出来ていないのが原因。セグフォ。
お前、y=x+2;でx[]のそれぞれの値に2を足した配列のポインタが
yに代入されると思ってないか?(そんなMathematicaじゃあるまいし)
y=x+2でyはx[2]を指す。y++;でx[3],x[4]…と指す先が変わって
いくからyがx+10になった時点でおかしくなるのは当たり前だ。
何をしたいのか分からん。
927 :
デフォルトの名無しさん:04/08/08 01:30
924はネタだろ
928 :
デフォルトの名無しさん:04/08/08 01:38
ネタではないのですが・・・ors
質問の仕方が悪かったと思います。スイマセン
このプログラムを実行すると
x[0]=3
x[1]=4
x[2]=5
x[3]=6
x[4]=7
x[5]=8
x[6]=9
x[7]=10
x[8]=1245120
x[9]=4199081
となります。これをx[7]=10で止めるようなプログラムを作成して
いただきたいのですが
#include <stdio.h>
int main (void){
int x[10]={1,2,3,4,5,6,7,8,9,10};
int *y,i;
y=x+2;
while(y <= &x[9]){
for(i=0;i<10;i++){
printf("x[%d]=%d\n",i,*y);
y++;
}
return (0);
}
#include <stdio.h>
int main (void){
int x[10]={1,2,3,4,5,6,7,8,9,10};
int *y,i;
y=x+2;
while(y <= &x[9]){
printf("x[%d]=%d\n",i,*y);
y++;
}
return (0);
}
放っといてくれ!
935 :
デフォルトの名無しさん:04/08/08 01:56
>>930 解答のほどありがとうございます。
ですが930さんのプログラムを実行させていただきますと
iがないのでxの中身が変になりました。
x[-858993460]=3
x[-858993460]=4
x[-858993460]=5
x[-858993460]=6
x[-858993460]=7
x[-858993460]=8
x[-858993460]=9
x[-858993460]=10
iがないxなんて・・・
930さんはもう嫌になってますよ
あなたとはもうやっていけないわ
いや、そもそも
>>924は誤解していると思うのだが。表示は
x[0]=3
x[1]=4
…
となっていてもx[0]==1、x[1]==2…のままだぞ。それは分かってるのか?
それでいいなら
#include <stdio.h>
int main (void){
int x[10]={1,2,3,4,5,6,7,8,9,10};
int *y,i;
y=x+2;
for(i=0;i<10-2;i++){
printf("x[%d]=%d\n",i,*y);
y++;
}
return 0;
}
でいいんじゃないのか?
あ、ちとインデント間違えた。
941 :
デフォルトの名無しさん:04/08/08 02:39
>>939 (926)
表示はそのままでよかったです。
ホントありがとうございました。
助かったです。
これ教えてください(つд`)
身体測定のデータ処理を行いたい。番号(2桁の整数)と身長、体重、性別のデータを持つ構造体を作り20人分のデータを扱えるようにしてください。
・入力されたデータから身長と体重の最大、最小値と平均値を性別ごとに求めるプログラムを作ってください。
・番号を入力することで、その人の身長、体重、性別の各データを表示できるようにしてください。
この時、次の式を使って、標準体重からの差も表示しなさい。
標準体重 = (身長-100)x0.9
身長は150cmから180ab
体重は45`cから90`c
の範囲で生成せきるようにしてください。
性別は男性:0,女性:1としてください。
データは以下の構造体を用いてください。
struct person{
int number;
int height;
int weight;
int sex;
}
int main()
{
struct person data[20];
return 0;
}
806 == 942 なのか?
次スレの立て方についてどうぞ
どなたかお助けください
テキストファイルに、1〜nまでの素数を書き込む関数fileSosu()を作成せよ。
void fileSosu( char *fileName, int n )
・fileName : 素数を書き込むファイル名
・n : 素数を求める最大数
上記の関数を以下のプログラムで実行し1〜100までの素数がファイルに出力されたか動作を確認せよ。
#include <stdio.h>
//ここにfileSosu()関数を書く。
void main()
{
//ファイル名を格納する文字列
char wFileName[20];
printf("素数を出力するファイル名=");
//ファイル名をキーボードから入力する
scanf("%s", wFileName );
fileSosu( wFileName, 100 );
}
前すれで聞いた時は流れてしまって、でっちあげて提出したら「お前がやるのは再提出問題で、これは元になった問題の回答だ」と言われました
元になった問題も張りますので、どうにかお助けを_| ̄|○
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=302
void fileSosu( char *fileName, int n )
{
FILE *fp;
int *prime, i, j;
fp = fopen(fileName, "w");
if(fp == NULL) return;
prime = calloc(sizeof(int), n+1);
if(prime == NULL) return;
for(i = 2; i <= n; i++){
for(j = i * 2; j <= n; j += i)
prime[j] = 1;
if(prime[i] == 0){
if(i > 2) fputc('\n', fp);
fprintf(fp, "%d", i);
}
}
fclose(fp);
free(prime);
return;
}
こんな感じか?
>>948 void fileSosu(char *const filename, const int n)
{
int i;
FILE *out = fopen(filename, "w");
for(i = 2; i <= n; i++)
{
int j;
for(j = 2; j < i; j++)
if(i % j == 0)
goto not_prime;
fprintf(out, "%d\n", i);
not_prime:;
}
fclose(out);
}
かぶったうえに明らかに拙い…
欝だ死のう
>>949 合成数でもふるいを更新するならフルイのアルゴリズムの利点が無くないか?
for(i = 2; i <= n; i++){
...
}
↓
for(i = 2; i <= n; i++){
if(prime[i] == 0){
for(j = i * 2; j <= n; j += i)
prime[j] = 1;
if(i > 2) fputc('\n', fp);
fprintf(fp, "%d", i);
}
}
これで大丈夫かなぁ・・・
埋め立てちう
#include <vector>
#include <set>
#include <map>
#include <algorithm>
#include <time.h>
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
#include <signal.h>
class FDS : public std::set<int> {
private:
fd_set fds;
iterator it;
public:
int fd_max() const { return *max_element(begin(),end()); }
fd_set *fdset(){
it=begin();
FD_ZERO(&fds);
iterator itt;
for(itt=begin();itt!=end();++itt){
FD_SET(*it,&fds);
}
return &fds;
}
int active_fd(){
for(;it!=end();++it)
if( FD_ISSET(*it,&fds) ) return *it++;
return -1;
}
};
struct {
pthread_mutex_t mutex;
pthread_cond_t cond, finish;
int count, nmenber;
void join(){
pthread_mutex_lock(&mutex);
if( ++count!=nmenber ) pthread_cond_wait(&cond,&mutex);
else pthread_cond_broadcast(&cond);
pthread_mutex_unlock(&mutex);
}
void oneless(){
pthread_mutex_lock(&mutex);
if( count==--nmenber ) pthread_cond_broadcast(&cond);
pthread_mutex_unlock(&mutex);
}
void onedead(){
pthread_mutex_lock(&mutex);
if( !--count ) pthread_cond_broadcast(&finish);
pthread_mutex_unlock(&mutex);
}
bool end(){ return count<2; }
void wait(){
pthread_mutex_lock(&mutex);
pthread_cond_wait(&finish,&mutex);
pthread_mutex_unlock(&mutex); }
} thread_starter = { PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, PTHREAD_COND_INITIALIZER,
0 };
struct thread_data {
pthread_t th;
int pipe[2];
};
std::vector<thread_data*> vec_thread;
time_t base_sec = 0;
const char*const msg[] = {
"%dは%dに斬りかかった",
"%dは%dに銃口を向けた",
"%dは%dに呪文を唱えた",
"%dは%dにぬるぽ",
"%dは%dにガッ!",
};
void *student_thread(void *input){
pthread_mutex_t mystart_mutex = PTHREAD_MUTEX_INITIALIZER;
thread_data *arg = (thread_data*)input;
thread_data *data;
int nwrite;
sigset_t sigset;
sigemptyset(&sigset);
sigaddset(&sigset,SIGTERM);
sigprocmask(SIG_BLOCK, &sigset, NULL);
thread_starter.join();
do{
sleep(rand()%5+1);
sigpending(&sigset);
time_t sec;
int len;
char buf[100];
sec=time(0)-base_sec;
write(arg->pipe[1],&sec,sizeof(time_t));
if( thread_starter.end() ){
snprintf(buf,sizeof(buf),"%dが生き残った",arg->th);
}else if( sigismember(&sigset,SIGTERM) ){
snprintf(buf,sizeof(buf),"%dは死んだ",arg->th);
}else{
data = vec_thread[rand()%vec_thread.size()];
if( arg != data )
snprintf(buf,sizeof(buf),msg[rand()%(sizeof(msg)/sizeof(msg[0]))],arg->th,data->th);
else
snprintf(buf,sizeof(buf),"%dは身を投げた!!!",arg->th);
if( pthread_kill(data->th, SIGTERM) )
strcat(buf," ミス");
};
len=strlen(buf)+1;
write(arg->pipe[1],&len,sizeof(int));
write(arg->pipe[1],buf,len);
}while( !thread_starter.end() && !sigismember(&sigset,SIGTERM) );
close(arg->pipe[1]);
thread_starter.onedead();
return NULL;
}
void log_process(FDS &fds){
std::multimap<time_t,char*> map_log;
while( fds.size() ){
int nsel;
if( 0<(nsel=select(fds.fd_max()+1,fds.fdset(),NULL,NULL,NULL)) ){
int fd;
while( (fd=fds.active_fd())>=0 ){
time_t sec;
int msglen;
char *msg;
int nread;
read(fd,&sec,sizeof(time_t));
read(fd,&msglen,sizeof(int));
msg = new char[msglen];
nread=read(fd,msg,msglen);
if( nread > 0 ){
map_log.insert(std::make_pair(sec,msg));
}else{
fds.erase(fd);
close(fd);
}
}
}
}
std::multimap<time_t,char*>::iterator it;
for(it=map_log.begin();it!=map_log.end();++it){
printf("%03dターン: %s\n",it->first,it->second);
}
return;
}
分速500文字級で
>>956がコードを打ってると想像して萌えてみる
int main(int argc, char **argv){
srand(time(0));
int count;
FDS fds;
std::vector<thread_data*>::iterator it;
if( argc<2 ){
fprintf(stderr,"Usage:%s [thread_count]\n",argv[0]);
return 1;
}
for(count=atoi(argv[1]);count;--count){
thread_data *data;
data=new thread_data;
pipe(data->pipe);
vec_thread.push_back(data);
fds.insert(data->pipe[0]);
}
thread_starter.nmenber=fds.size();
pid_t pid=fork();
if( pid<0 ){
abort();
}else if(pid>0){
pid=fork();
if(pid<0) abort();
else if(pid>0) return 0;
for(it=vec_thread.begin();it!=vec_thread.end();++it){
close((*it)->pipe[1]);
delete *it;
}
vec_thread.clear();
log_process(fds);
return 0;
}
close(0); close(1); close(2);
setpgid(0,0);
for(it=vec_thread.begin();it!=vec_thread.end();++it){
thread_data *data=*it;
close(data->pipe[0]);
if( pthread_create(&(data->th), NULL, student_thread, data) ){
close(data->pipe[1]);
delete data;
vec_thread.erase(it);
thread_starter.oneless();
continue;
}
}
time(&base_sec);
thread_starter.wait();
return 0;
}
>>963 ふふふ
コピペとSTLの力は偉大なのだよ
>>957 dクス
でも、HttpDownLoader(偽) と簡易シェルを作って終わりにしちった
許してくれ
ちなみに、使用可能なのは C であって、C++ ではないらしい
とても愉快なうちのPCルーム
しかしコンパイルできない
しかし,埋まらない。
ところで,何がコンパイルできないとお悩みじゃ,お若いの?
>>970 /home/hoge/tmp/ccsX09Q1.o(.text+0x210): In function `student_thread(void*)':
: undefined reference to `pthread_kill'
collect2: ld はステータス 1 で終了しました
gcc3.3.2
コンパイルオプションを教えて.
そりゃ,コンパイルエラーじゃねぇ,リンクエラー。
キミの任務はpthread用のライブラリをリンクすることだ。
リンカオプション -lpthread を活用したまへ。