Rada ohledně funkce řádkové normy matice – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Rada ohledně funkce řádkové normy matice – C / C++ – Fórum – Programujte.comRada ohledně funkce řádkové normy matice – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
Loutis0
Duch
10. 1. 2016   #1
-
0
-

Zdravím,

bojuji s pravděpodobně nejbanálnější úlohou v historii Vesmíru,

potřebuji vytáhnout hodnoty matice z vnějšího souboru (matice A je 1;3), (matice B je -2;1)

a poté je sečíst (|A|+|B| a |A+B|) a nechat vylézt na obrazovku, potíž mám v tom že nejsem schopen dostat se ke správnému výsledku, mohl by mi někdo poradit jak na to ? jestli třeba nemám špatně způsob zapsání do vnějšího textového souboru atd, popřípadě špatně vzorec, vážně se snažím a nejsem schopen už pár hodin přijít na to proč to nefunguje.

#include <stdio.h>                        // standarni knihovna I/O
#include <conio.h>                        // operatorska konzola I/O
#include <math.h>                         // matematicka knihovna 
#include <stdlib.h>                       // standarni knihovna I/O

    int main()
    {
     FILE *fr; 
    int A1,A2,B1,B2;                                        //lokalizace a otevření vnějšího souboru obsahující matice
    fr=fopen("matice.txt","r");                           
    scanf("matice.txt", "r" , "A1" , "A2" , "B1" , "B2" );    
       
    int soucet1;
    soucet1 =int (abs(A1)+abs(A2))+(abs(B1)+abs(B2));
    return (soucet1);
    

    int soucet2;
    soucet2 = int (abs(A1+B1)+abs(A2+B2));
    return (soucet2);
    
    printf("Výsledek |A|+|B|:%f \n Výsledek |A+B|:%f",soucet1,soucet2);
    return(1);       
        }

eustále to vychází 62, s tím že výsledek má být součet 1 = 7 a součet 2 = 5

Děkuji mnohokrát za jakoukoliv pomoc,

Loutis

Nahlásit jako SPAM
IP: 88.103.79.–
10. 1. 2016   #2
-
+1
-
Zajímavé

Při práci se soubory je dobré se přesvědčit, že soubor je otevřený, v takovém případě návratová hodnota fopen není NULL. Funkce scanf čte z klávesnice, navíc i způsob jak je použitá... Je třeba použít funkci pro čtení ze souboru např. fscanf. Způsob čtení ze souboru záleží na tom, jak jsou data v souboru uspořádána. Nesmyslný výsledek je pak zapříčiněn tím, že do proměnných nic nenačteš a tak obsahují nějaké smetí po předchozím použití paměti.

hu

Nahlásit jako SPAM
IP: 193.86.81.–
Loutis0
Duch
10. 1. 2016   #3
-
0
-

Díky moc za radu, po upraveni na fscanf mi vyběhl tento error, nejsem si zcela jistý čím to je, na internetu jsem nenašel nic co by mi pomohlo,

[Error] cannot convert 'const char*' to 'FILE* {aka _iobuf*}' for argument '1' to 'int fscanf(FILE*, const char*, ...)'

pro info, soubor mám otevřený  a uspořádání hodnot je takovéhle 

A1=1;A2=3;B1=(-2);B2=1

ještě jednou díky za pomoc !

Nahlásit jako SPAM
IP: 88.103.79.–
PiranhaGreg0
Stálý člen
10. 1. 2016   #4
-
+1
-
Zajímavé

Čau, máš to celý nějaký divný. V rychlosti jsem něco sepsal a vypadá to funkčně. 

#include <stdio.h>
#include <stdlib.h>

struct Matrix {
	int Value1;
	int Value2;	
};

int main(void) {
	struct Matrix A, B;
	FILE * input = fopen("matice.txt", "r");

	if (!input) {
		fprintf(stderr, "Soubor nelze otevřít\n");
		return 1;
	}

	if (fscanf(input, "%d;%d %d;%d", &A.Value1, &A.Value2, &B.Value1, &B.Value2) != 4) {
		fprintf(stderr, "Soubor nemá očekávaný formát\n");
		return 1;
	}

	int sum1 = abs(A.Value1) + abs(A.Value2) + abs(B.Value1) + abs(B.Value2);
	int sum2 = abs(A.Value1 + B.Value1) + abs(A.Value2 + B.Value2);
	
	printf("Výsledek |A| + |B|: %d\n", sum1);
	printf("Výsledek |A + B|: %d\n", sum2);

	return 0;
}

Zdrojový soubor pak vypadá následovně.

1;3
-2;1
Nahlásit jako SPAM
IP: 147.32.126.–
Loutis0
Duch
10. 1. 2016   #5
-
0
-

Človeče, jsi můj hrdina, je to boží, přehledný a jednoduchý.

Strašně moc děkuju a přeju krásnej den, stejně jako jsi ho udělal ty mě :)

Loutis

Nahlásit jako SPAM
IP: 88.103.79.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 91 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý